Lek$on 3: Kunskapsrepresenta$on Robin Keskisärkkä
Översikt Laborationerna så här långt Genomgång av laboration 3 Uppgift Förberedelser Kunskapsrepresentation Framesteori
Uppgi9 Implementera ett frames-system Frames-struktur Ärvning Procedural attachments Diskussionsuppgift För VG: Utöka ert system till att stödja multipelt arv
Förberedelser Läs igenom laborationsinstruktionerna Läs om kunskapsrepresentation i R&N (kap. 12) Förstå frames-strukturen Bestäm domän att representera
Kunskapsrepresenta$on Viktigt inom många områden Robotik, expertsystem, Semantic Web mm. Representationstyper Representationsformat Labb 3 fokuserar på frames-system
Frames-system Används för att spara information hierarkiskt Frame-instanser representerar koncept eller objekt Information sparas som attributvärden Attribut hämtas och lagras på olika sätt Ärvning/inte ärvning Ersätt/lägg till Attributvärden kan Vara enkla eller sammansatta värden (strängar, tuplar, listor, etc.) eller procedural attachments
Exempel Djur Fågel Kräldjur Amfibie Uggla Struts Krokodil Groda Padda Fjälluggla Molybdophanes Trevor Hedwig Fåglar kan flyga och därmed kan Hedwig flyga E9ersom strutsar inte kan flyga så kan inte Molybdophanes flyga Hedwig heter Hedwig
Huvudfunk$onalitet Lagra information om nya ramar och attribut store_frame store_attribute Lagra värden för ett visst attribut i en frame tell Fråga efter värden för ett visst attribut i en frame ask
KodskeleR Innehåller tre klasser Frame KnowledgeBase FrameSystem Användaren interagerar endast med systemet via fyra metoder som finns i FrameSystem
KodskeleR: Arkitektur FrameSystem store_frame store_attribute ask tell local inherit add replace KnowledgeBase add_attribute add_frame get_attribute_methods get_frame 1 1 1 * Frame add_attribute_value replace_attribute_value get_attribute_value get_isa
Komma igång Hur samverkar klasserna? Vad gör de andra metoderna? Klurigheter I vilken ordning bör jag implementera mina metoder? Hur kontrollerar man att en metod fungerar när den är beroende av att andra redan finns implementerade? Hur hanterar man fel på bästa sätt?
Hur samverkar klasserna? Användaren kommunicerar bara med FrameSystem Kunskapsbasen lagrar både frames och attribut Utnyttjas av FrameSystem för att hämta frames och för att hantera atttribut på rätt sätt Information om hur ett attribut fungerar är inte samma sak som ett attributvärde Frame-instanser sparar information om ett visst koncept/objekt Innehåller metoder för att hämta och spara attributvärden Håller reda på föräldrarelationen (ISA)
Vad gör de andra metoderna? Både tell och ask kan utföras på två sätt. Vilken metod som väljs beror på attributet i fråga. Tell Ask replace Ersätt redan existerande värde add Lägg till ytterligare ett värde local Om inte värdet finns i denna frame så ge upp inherit Om inte värdet finns i denna frame så fråga föräldern Övriga metoder finns för att underlätta kommunikation mellan klasserna. Dessutom underlättar de felhanteringen.
Förslag på implementa$onsordning 1. Skapa och lagra några frames för er domän 2. Specificera några tillåtna attribut för er domän 3. Lagra värden på attribut (börja med replace sedan add) 4. Hämta värden på attribut (börja med local sedan inherit) 5. Implementera er procedural attachment 6. Lägg till felhantering Förutse vilka fel som kan uppstå. Returnera None vid fel men ha även med rimliga felutskrifter. Använd inte try-except
Hur kontrollerar man ar en metod fungerar? Användaren interagerar bara med frame-systemet... men ni som utvecklare kan komma åt både klassattribut och metoder! Exempel Kontrollera om store_frame fungerar: Skriv ut all frames som finns lagrade i KB Kontrollera om klassen Frame fungerar: Skapa en frame utanför systemet och kontrollera att klassen fungerar som väntat
Hur hanterar man fel på bästa sär? Förutspå fel Anta att användaren kommer att stava fel Anta att användaren kommer att göra saker i fel ordning Försök att hantera felen på så få ställen som möjligt Felutskrifter är bra för människor men inte maskiner. Returnera None om det blir fel så att andra saker som är beroende kan bli meddelade om att något gått snett. Syntaxfel behöver inte hanteras autocheck.py kan användas för att få se om man hanterat de allra vanligaste felen
Välja domän Bestäm er för en domän att representera i frame-systemet Domänen ska vara lämplig att representera hierarkiskt Några förslag på domäner: Böcker, växter, fordon, mat, djur, geografisk information Definiera lämpliga attribut Vilka kan ärvas och vilka kan inte ärvas? För vilka attribut tillåts flera värden? Rita upp er domän som ett klass- eller UML-diagram Fundera över en procedural attachment. Metoden ska bidra till framesystemet på något sätt!
Live-kodning Kolla in skelettet Kolla in autocheck.py Visa hur metoder kan sparas i variabler och köras
www.liu.se