Lek$on 4: Kunskapsrepresenta$on Robin Keskisärkkä och Jonas Rybing
Översikt Laborationerna så här långt Genomgång av Laboration 4 Uppgift Förberedelser Kunskapsrepresentation Framesteori
Uppgi= 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) Fokus på frames (kap. 12.5) Förstå frames-strukturen Bestäm domän att representera
Kunskapsrepresenta$on Viktigt inom många områden Robotik Expertsystem Semantic Web Representationstyper Representationsformat Labb 4 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.) Räknas ut via procedural attachments
Exempel Djur Fågel Kräldjur Amfibie Uggla Struts Krokodil Groda Padda Fjälluggla Molybdophanes Trevor Hedwig Ø Fåglar kan flyga ger ar Hedwig kan flyga. Ø Strutsar kan inte flyga ger ar Molybdophanes inte kan flyga Ø Det finns fem arter av struts. Det finns inte fem arter av Molybdophanes.
Huvudfunk$onalitet Lagra information om ramar och attribut store_frame store_attribute Lagra värden för attribut tell Fråga efter värden på attribut ask
KodskeleR Innehåller tre klasser Frame KnowledgeBase FrameSystem Användaren interagerar endast med systemet via fyra metoder som finns i FrameSystem OBS: I en version av skelettet låg procedural attachment-metoden i KnowledgeBase. Den ska egentligen ligga utanför klassen som en funktion!
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 frames för er domän 2. Specificera tillåtna attribut för er domän 3. Lagra värden på attribut Börja med replace och därefter add 4. Hämta värden på attribut Börja med lokala värden och fortsätt därefter med ärvning 5. Implementera er procedural attachment Exekvera metoden innan värdet returneras till användaren 6. Lägg till felhantering Förutse vilka fel som kan uppstå. Vad returneras och vad skrivs ut? Använd inte try-except
Hur kontrollerar man ar en metod fungerar? Användaren interagerar bara med frame-systemet via endast fyra metoder Men utvecklare kan komma åt klassattribut och metoder! Exempel: Kontrollera om store_frame fungerar: Skriv ut klassattributet i kunskapsbasen som håller reda på frames Kontrollera om klassen Frame fungerar: Skapa en frame utanför systemet och kontrollera att klassen fungerar som förvä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 fel på så få ställen som möjligt Felutskrifter är bra för människor men inte maskiner. Returnera något 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
Frame- system och Seman$c Web Semantic Web bygger på frame-system Attributvärden kan vara Enkla värden (text, siffror) Frames Referenserna/nycklarna till frames
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, dryck, djur, geografisk information Definiera lämpliga attribut Vilka kan ärvas och vilka ka 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 Visa förväntad output Visa hur metoder kan sparas i variabler och exeveras
www.liu.se