Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
1
Tudásalapú rendszerek
Gyakorlat - CLIPS
2
Tartalom Szabályalapú leírás A CLIPS rendszer Ki Csipike? Születésnap
Rendezett és nem rendezett tények Feladatok Keretrendszer Források
3
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. HA feltétel AKKOR következmény 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.
4
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ő.
5
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. Ezt támogatja a CLIPS.
6
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 tehát Csipike madá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.
7
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.
8
A CLIPS rendszer Neve a C Language Integrated Production System kifejezés rövidítése. Már a névből is több dologra következtethetünk: a production system utal 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. Ennek megfelelően ezt az ingyenes rendszert szinte minden operációs rendszeren futtathatjuk. Épp ezért ez az általános program a mai Windowsos programokhoz képest kicsit fapadosnak tűnik, de azért igen jól használható.
9
Ki Csipike? Azt, hogy Csipike veréb azt úgy is írhatjuk, hogy
(Csipike vereb) (vereb Csipike) (Csipike egy vereb) Megjegyzés: A program szövegében nem érdemes ékezetes betűket használni. Ugorjunk egyből mindennek a közepébe! A korábban már szereplő feladatot oldassuk meg ezzel a rendszerrel. Természetesen ehhez a feladatot át kell alakítani a program szájíze szerint. Nem véletlenül rímel a CLIPS a LISP-re: a LISP-re jellemző írásmódban kell a tényeinket, szabályainkat megfogalmazni. Ez azt is jelenti, hogy rengeteg zárójelet kell használnunk. A CLIPS bizonyos korlátai miatt én most a második variánst fogom használni. (Elvileg ilyen esetekben, amikor egy relációt, vagy egy tulajdonságot kell leírni, akkor a reláció vagy tulajdonság elnevezése kerül az első helyre, s ezt követik az objektumok elnevezései.)
10
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. Hozzáadás assert Törlés retract
11
Csipike veréb Tehát a CLIPS programját elindítva az (assert (vereb Csipike)) 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.
12
Ú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át a deffacts kulcsszóval, melyet a tények elnevezése követ, s majd a tények maguk.
13
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.clp fáljban találhatóak, ezeket a (load "csipike.clp") paranccsal lehet betölteni.
14
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.
15
(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.
16
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-ben a következőképpen néz ki: (defrule hello "Hello world" (initial-fact) => (printout t "Hello World!" crlf) ) Ez a program nem más mint egy szabály. Első látásra csak a nyíl tűnik ismerősnek. Az előtte és a mögötte álló sor alkotja a magát a szabályt. Előttük a szabályt definiáló kulcsszó, a szabály elnevezése (hello), s idézőjelek között egy rövidebb megjegyzés található, amely emlékeztetni hivatott a program íróját, vagy felhasználóját arra, hogy mi is volt a szabály célja. A nyíl előtt a feltétel, vagy a feltételek szerepelnek. Ha ez vagy ezek mind igazak lesznek, akkor végrehajtódik a nyíl mögötti műveletlista. Ez most egyetlen műveletből áll, s abban pedig egy kiírás szerepel. A t arra szolgál, hogy a képernyőre írjon a rendszer, a crlf pedig a soremelésről gondoskodik.
17
„Minden veréb madár.” ∀x(v(x) ⊃ m(x))
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-ben kérdőjellel kezdődnek.
18
(vereb ?x) => (madar ?x)
„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.
19
defrule vereb-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: (defrule vereb-madar "Minden veréb madár" (vereb ?x) => (assert (madar ?x)) ) Az eredeti feladatban szereplő összes szabály hasonlóképpen írható fel. Érdemes ezt a tagozást megtartani, mert így a későbbiekben is jól olvashatóak lesznek a szabályaink. Ha egy másik szabály is ugyanezt a nevet kapja, akkor az majd felülírja ezt.
20
(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.
21
(run)+ facts A facts parancs 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: (defrule allathirdetes "Kiirjuk az állatok neveit" (allat ?x) => (printout t ?x " állat." crlf) )
22
Feladatok Autójavítás Rendőrségi nyilvántartás Sör Házasságközvetítő
23
Források Aszalós László: Mesterséges intelligencia közgazdászoknak
prog.php o.clp
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.