270 likes | 426 Views
Tudásalapú rendszerek. Gyakorlat - CLIPS. Tartalom. Szabályalapú leírás A CLIPS rendszer Ki Csipike ? Születésnap Rendezett és nem rendezett tények Feladatok Keretrendszer Források. Szabályalapú leírás.
E N D
Tudásalapú rendszerek Gyakorlat - CLIPS
Tartalom • Szabályalapú leírás • A CLIPS rendszer • Ki Csipike? • Születésnap • Rendezett és nem rendezett tények • Feladatok • Keretrendszer • Források
Szabályalapú leírás • Szabályalapú leírás esetén Ha . . . akkor . . . alakú szabályok segítségével írhatjuk le az ismereteket. • HAfeltétel AKKORművelet • A hétköznapi nyelvben a szabályokat rendszerint a következő formában fogalmazzuk meg (pl): Minden veréb madár. • Ezt a szabályt úgy fogalmazhatjuk át, hogy ha egy élőlény veréb, akkor az az élőlény madár is.
Legyenek adottak a következő tények (1-3.) és szabályok (4-9): • Ká kígyó. • Szilvia elefánt. • Csipike veréb. • Minden veréb madár. • Minden hüllő állat. • Minden madár állat. • Minden pingvin madár. • Minden madár tojással szaporodik. • Minden kígyó hüllő.
Előreláncolásos következtetés • A felsorolt szabályokat és tényeket két módon is felhasználhatjuk. • Első esetben az itt megadott tényekből indulunk ki, és a szabályokat felhasználva újabb és újabb tényeket generálunk. • Ezt a módszert előreláncolásos következtetésnek nevezzük.
Lássuk, hogyan működik ez a módszer az itt megadott tényekkel és szabályokkal! A „Minden veréb madár.” érvényes Csipikére is, azaz Ha Csipike veréb akkor Csipike madár is. Mivel Csipike veréb, így Csipikemadár. A „Minden madár állat.” érvényes Csipikére is, azaz Ha Csipike madár akkor Csipike állat is. Mivel Csipike madár az előzőek alapján, így Csipikeállat.
Cél • Az előreláncolásos következtetés feladata a tények, szabályok következményeinek megkeresése. • Mivel a folyamat során újabb és újabb tények keletkeznek, és ezek határozzák meg a soron következő alkalmazandó szabályt, így a módszer adattal irányított.
A CLIPS rendszer Neve aCLanguage Integrated Production System kifejezésrövidítése. Már a névből is több dologra következtethetünk: • a productionsystemutal a ha-akkor szabályokra, tehát ez a rendszer nem más mint egy szabályokon alapuló szakértő rendszer; • a C nyelv pedig arra utal, hogy a rendszert a NASA valamikor C-ben kezdte el fejleszteni, s jelenleg többek között ebben a formában is hozzáférhetünk a programhoz.
Ki Csipike? • Azt, hogy Csipike veréb azt úgy is írhatjuk, hogy • (Csipikevereb) • (verebCsipike) • (Csipike egy vereb) • Megj: A program szövegében nem érdemes ékezetes betűket használni.
Csipike veréb • Ezt a tényt a rendszer tudomására kell hozni. • A Prologhoz hasonlóan a rendszer adatbázisához az assert utasítással tudunk új dolgokat hozzáadni, s a retract utasítással tudunk onnan valamit törölni.
Csipike veréb • Tehát a CLIPS programját elindítva az (assert (verebCsipike)) hatására veszi tudomásul ezt a tényt a rendszer. • A rendszer által ismert tények lekérdezése: (facts) utasítással. • A tények előtt álló számok azért lényegesek, mert egy tévesen megadott tényt az azonosítási száma segítségével lehet törölni. Például (retract 0) törli az elsőként megadott tényt.
Új tények generálása, törlése • A program működése során az általunk megadott tények és szabályok alapján újabb tényeket generál. • Új programfuttatás esetén rendszerint ki kell törölnünk a gép által generált tényeket. Több száz tény esetén reménytelen feladat egyenként kitörölni ezeket a tényeket. • Épp ezért létrehozhatjuk a kiinduló tények csoportjáta deffactskulcsszóval, melyet a tényekelnevezésekövet, s majd a tények maguk.
Betöltés • Ezek a csoportok begépelhetők az előbbi módon, vagy akár egy külső fájlból is beolvashatóak. (Ez utóbbi természetesen sokkal kényelmesebb.) • A Csipikére és a többiekre jellemző tények a csipike.clpfáljban találhatóak, ezeket a (load "csipike.clp") paranccsal lehet betölteni.
Mentés • Ha valaki a rendszeren belül definiálja a kiinduló tényeket vagy szabályokat, akkor a save paranccsal mentheti ki. • Ez nem menti a generált tényeket. • Azokat a save-facts segítségével menthetjük, és a load-facts segítségével tölthetjük vissza.
(reset) • A szabályok betöltése még nem elegendő ahhoz, hogy egyből használatba vegyük a tényeket. • Ehhez előbb ki kell adni a (reset) parancsot, amely aktivizálja a kiinduló tényeinket, illetve még létrehoz egy (initial-fact) tényt is.
Hello world! • Ez utóbbi tényt felhasználva bemutatjuk a Hello world! programot, mellyel sok programnyelv ismertetése elkezdődik. Ez a program a CLIPS-bena következőképpen néz ki: (defrule hello "Helloworld" (initial-fact) => (printout t "Hello" crlf) )
„Minden veréb madár.” • A szabályok a Prologban sem tartalmazták kiírva a kvantorokat, de oda kellett volna gondolni azokat. Itt szintén ugyanaz a helyzet. A Minden veréb madár. szabály formalizáltja a ∀x(v(x) ⊃ m(x)) volt. Innen • első lépésben el kell hagyni a kvantort, • a másodikban a ⊃jel helyett a=> jeleket kell írni, • harmadikként a változók a CLIPS-benkérdőjellel kezdődnek.
„Minden veréb madár.” Ezzel eljutottunk a (vereb ?x) => (madar ?x) alakhoz, ami már majdnem jó, csak meg kell mondani, hogy mit szeretnénk csinálni a következményben szereplő ténnyel. Esetünkben a rendszer tudomására hozni, azaz alkalmazni rá az assert parancsot.
defrulevereb-madar Ezzel kész a szabály, csak adni kell neki egy nevet (pl. vereb-madar), és esetleg egy kis magyarázó szöveget (Minden veréb madár). Összességében a parancs a következőképpen néz ki: (defrulevereb-madar "Minden veréb madár" (vereb ?x) => (assert (madar ?x)) )
(run) • Ha már adott az összes szabály meg a tények, akkor a (run) paranccsal indítható el a következtetés. • Megj: Ha nem akarjuk indítani, csak látni, hogy hogyan indulna el az egész, akkor az agenda parancsot kell használni. • Mindebből persze nem látunk semmit.
(run)+ facts • A factsparancs kiadásával láthatjuk, hogy miről bizonyíthatjuk be a tények és szabályok alapján, hogy valóban állat. • Persze ezt is lehet automatizálni. Készíthetünk egy olyan szabályt, amely kiírja az állatok neveit: (defruleallathirdetes "Kiirjuk az állatok neveit" (allat ?x) => (printout t ?x " állat." crlf) )
Feladatok Adjuk hozzá az adatbázishoz (ezután adjuk ki a run parancsot)! • Vilit, aki veréb • Palit, aki madár Listázzuk ki a tényeket! Töröljük ki a 7-dik tényt! Töröljük a tényeket 3-tól 6-ig! Mit tapasztalunk a sorszámokra vonatkozóan?
Feladatok Töröljük az adatbázist (clear)! Adjuk hozzá a következő tényeket az adatbázishoz! …
Feladatok • Autójavítás • Rendőrségi nyilvántartás • Sör • Házasságközvetítő
Források • http://www.inf.unideb.hu/~aszalos/diak/mik/mik_clips.htm • http://www.inf.unideb.hu/~aszalos/diak/mik/mik.pdf