Tudásalapú rendszerek

Slides:



Advertisements
Hasonló előadás
Szerver oldali programozás
Advertisements

Információs függvények
Weblapkészítési tudnivalók 2: Útmutató az elnevezésekhez Pék Ágnes © 2009.
Statisztika 2008 Az elektronikus program használata.
Grafikus tervezőrendszerek programozása 10. előadás.
Hatékonyságvizsgálat, dokumentálás
NEMMONOTON KÖVETKEZTETÉS (NONMONOTONIC REASONING).
Számítógépes ismeretek 5. óra
Determinisztikus programok. Szintaxis: X : Pvalt program változók E : Kifkifejezések B : Lkiflogikai kifejezések C : Utsutasítások.
Kétértékűség és kontextusfüggőség Kijelentéseink igazak vagy hamisak (mindig az egyik és csak az egyik) Kijelentés: kijelentő mondat (tartalma), amivel.
Sztringek  Az fscanf() és a fprintf() függvényeknél a %s-es formátumtagot kell használni.  A %s formátumtag az első white space karakterig folytatja,
Adatbázis alapú rendszerek
A CLIPS keretrendszer CLIPS "C" Language Integration Production System.
Tudásalapú rendszerek
CCleaner Skyman ™.
A körlevél készítésének menete
A C++ programozási nyelvSoós Sándor 1/12 C++ programozási nyelv Gyakorlat - 8. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
A HTML alapjai Havlik Barnabás Készítette:
Operációs rendszerek gyakorlat sed, awk parancsok.
Nézettáblák létrehozása, módosítása és törlése
P ROGRAMOZÁS C# - BAN Kivételkezelés. P ÉLDA I. Nullával való osztás miatt kapjuk a hibaüzenetet.
Programozás alapismeretek
P ROGRAMOZÁS I/O műveletek. S YSTEM.C ONSOLE A programjainknak fontos része a felhasználóval való kommunikáció. Adatokat kell kérni tőle, vagy közölnünk.
Programozás Az adatokról C# -ban.
„Doctor” szakértő rendszer
A Pascal programozási nyelv alapjai
A Pascal programozási nyelv alapjai
Frappáns novella a szeretetről...
Természetes és formális nyelvek Jellemzők, szintaxis definiálása, Montague, extenzió - intenzió, kategóriákon alapuló gramatika, alkalmazások.
Szintaktikai, szemantikai szabályok
1.3. Pascal program felépítése Az els ő program. Program ; … Begin … End. Program fej Deklarációs rész Végrehajtó rész.
1 Operációs rendszerek I, 3. gyakorlat Windisch Gergely
A képernyő kezelése: kiíratások
Érvelés, bizonyítás, következmény, helyesség
Ekvivalenciák nyitott mondatok között Két nyitott mondatot ekvivalensnek mondunk, hha tetszőleges világban ugyanazok az objektumok teszik őket igazzá.
Atomi mondatok FOL-ban Atomi mondat általában: amiben egy vagy több dolgot megnevezünk, és ezekről állítunk valamit. Pl: „Jóska átadta a pikk dámát Pistának”
A prezentációkészítés alapjai
Visual Basic 2008 Express Edition
1. Feladat Hozzunk létre egy olyan programot amely számokat ír ki és a felhasználónak időre be kell gépelni ezeket.
Logikai programozás 6.. Problémafelvetés: diak(jani, 3.3, pecs). diak(laci, 3.7, kaposvar). diak(matyi, 4.1, pecs). diak(kati, 2.3, barcs). diak(jeno,
Logikai programozás 8.. Adatok: ISMÉTLÉS: ADATBÁZISKEZELÉS A külső adatok a hatására bekerülnek a memóriába Lekérdezés: Ahogy eddig – pl.: szereti(jani,
Vírusok eltávolítása. Vírusok eltávolítására két módszert ajánlanak Az első a biztonsági másolatról történő helyreállítás Biztonsági másolat hiányában.
Gazdasági informatikus - Szövegszerkesztés 1 Hosszú dokumentumok kezelése.
Első lépések a szövegszerkesztő használatában
MI 2003/6 - 1 Elsőrendű predikátumkalkulus (elsőrendű logika) - alapvető különbség a kijelentéslogikához képest: alaphalmaz. Objektumok, relációk, tulajdonságok,
Fontos tudnivalók A MATLAB egy fajta objektummal dolgozik (Mátrix)
Programozás, programtervezés
C Programozási alapok.
Fórum használata A fórum főoldala alapállapotban.
Modellek a számítógép megismeréshez Takács Béla
Analóg jel, digitális jel
Számítógépes programok használata
A Mozilla magyar nyelvű szerkesztőjének használata
Táblák létrehozása és feltöltése adatokkal Rendezés Szűrés.
17 ISMERTESSE AZ INTERNETES KERESÉSI MÓDSZEREKET! KONKRÉT GYAKORLATI PÉLDA KERESÉSRE.(KERESÉS, TALÁLATI LISTA ÉRTELMEZÉSE, TALÁLT OLDAL MENTÉSE.) Készítette:
Lekérdezések Adott tulajdonságú adatok listázásának módja a lekérdezés. A lekérdezések segítségével az adatbázisból megjeleníthetjük, módosíthatjuk, törölhetjük.
Programozás alapjai Készítette: Csiszár Nóra Anita
Adatbázis alapú rendszerek
Adatstruktúrák Algoritmusok Objektumok
Logikai programozás 7..
TÖMBÖK – péntek Jordán Sándor.
Analitikus fa készítése Ruzsa programmal
Szakértő redszerek készítése CLIPS-ben
Atomi mondatok Nevek Predikátum
Programozás C# -ban Elágazások.
A CLIPS keretrendszer
Ubuntu – ismerkedés Fájlok és könyvtárak
Programozási nyelvek alapfogalmai
Bankszámlatranzakciók feldolgozása és könyvelése Gyorsan és egyszerűen
Informatikai gyakorlatok 11. évfolyam
Előadás másolata:

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. 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.

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. Ezt támogatja a CLIPS.

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.

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 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ó.

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.)

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

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.

Ú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.

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.

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-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.

„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.

(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.

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.

(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 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) )

Feladatok Autójavítás Rendőrségi nyilvántartás Sör Házasságközvetítő

Források Aszalós László: Mesterséges intelligencia közgazdászoknak https://arato.inf.unideb.hu/aszalos.laszlo/old/diak/mik/mi- prog.php https://arato.inf.unideb.hu/aszalos.laszlo/old/diak/mik/tuzriad o.clp