mesterséges intelligencia közgazdászoknak · 3.1.1. nyolcas játék. a közismert 15-ös játék...

59
Aszalós László Mesterséges intelligencia közgazdászoknak mobiDIÁK könyvtár

Upload: others

Post on 05-Jan-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Aszalós László

Mesterséges intelligenciaközgazdászoknak

mobiDIÁK könyvtár

Aszalós László

Mesterséges intelligencia közgazdászoknak

mobiDIÁK könyvtár

SOROZATSZERKESZTO

Fazekas István

Aszalós László

Mesterséges intelligenciaközgazdászoknak

Egyetemi jegyzetközgazdászok részére

elso kiadás

mobiDIÁK könyvtárDebreceni Egyetem

Informatikai Kar

Lektor

Dr. Bognár KatalinDebreceni EgyetemInformatikai Kar

Copyright c© Aszalós László, 2004

Copyright c© elektronikus közlésmobiDIÁK könyvtár, 2004

mobiDIÁK könyvtárDebreceni EgyetemInformatikai Kar4010 Debrecen, Pf. 12http://mobidiak.inf.unideb.hu

A mu egyéni tanulmányozás céljára szabadon letöltheto. Minden egyéb felhasználáscsak a szerzo elozetes írásbeli engedélyével történhet.A mu A mobiDIÁK önszervezo mobil portál (IKTA, OMFB-00373/2003) és aGNU Iterátor, a legújabb generációs portál szoftver (ITEM, 50/2003) projektekkeretében készült.

Tartalomjegyzék

I. El oszó . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9

II. Mesterséges intelligenciáról általában . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .111. Mi az MI? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112. Szakérto rendszer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133. A tudás leírása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

III. Logikai alapok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .231. A logika definíciója . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232. Kijelentéslogika . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243. Elsorendu logika . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254. Gyakorlatok következtetésekre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265. Elore- és visszafele láncolásos következtetések . . . . . . . . . . . . . . . . . . . . . . 27

IV. Prolog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .311. Prolog alapok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312. Egyszeru szakérto rendszerek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

V. CLIPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .411. Ki Csipike? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412. Születésnap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433. Rendezett és nem rendezett tények . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454. Feladatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495. Keretrendszer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

VI. Szakérto rendszerek fejlesztése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .551. A projekt kezdete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552. A rendszer analízise és tervezése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583. Gyors prototípus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584. Rendszerfejlesztés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595. Alkalmazás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

7

8 TARTALOMJEGYZÉK

6. Utómunkálatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

I. fejezet

Eloszó

Ez a jegyzetA mesterséges intelligencia közgazdászoknakeloadás anyagáttartalmazza. Miután a közgazdász hallgatóknak rendszerint nincsenek elozetesismerteik matematikai logikából, mesterséges intelligenciából, és programozásinyelveket sem ismernek, így az alapokkal kezdünk. Röviden ismertetjük a mester-séges intelligencia alapfogalmait, alapveto kérdéseit. Majd ezután a tananyagközponti részét jelento szakérto rendszerek alapjait ismertetjük vázlatosan. Ezutánazt részletezzük, hogyan ábrázolható a tudás. Ennek keretében matematikai es-zközökkel leírunk több szórakoztató rejtvényt.

A harmadik fejezetben szerepelnek a logikai alapfogalmak, s a következményfogalma. Mind a nullad- mind az elsorendu logika jelölésrendszerét áttekintjük,s megvizsgálunk több következtetéssel kapcsolatos feladatot. Ezt az automatikuskövetkeztetési módszerek ismertetése követi.

A negyedik fejezetben Prolog programnyelv alapjait nézzük át. Megismer-jük az egyszerubb definíciókat, majd azt, hogy hogyan ábrázolhatóak ebben anyelvben a szemantikus hálók és a keretek. Végül a visszafele következtetésjellemzo feladatainak lehetséges programjaival ismerkedünk meg.

Az ötödik fejezetben a CLIPS programnyelv vázlatos ismertetése szerepel.Mivel többszáz oldalas a felhasználói leírás, a félév során a nyelv lehetoségeinekcsak töredékét mutathatjuk be. Viszont utalunk azokra az utasításokra, melyekkelakár önállóan is tovább lehet lépni a továbbiakban.

Végül azt vázoljuk fel, hogyan néz ki egy vállalati szakérto rendszer kifej-lesztése és üzembe állítása.

9

II. fejezet

Mesterséges intelligenciáról általában

1. Mi az MI?

A mesterséges intelligencia (röviden MI) kifejezés John McCarthytól szár-mazik, még 1956-ból. Maga a kifejezés nem igazán nem szerencsés, de elterjedt,így ezt fogjuk használni.

1.1. Definíció

Sajnos nem csak az elnevezéssel van baj, a fogalom definíciója is hiányzik. Azegyik elképzelés szerint az MI célja olyan rendszerek létrehozása, amely

Az emberhez hasonlóan gondolkodnak:Ennek megfeleloen felgyorsult akognitív tudomány kutatása. Ez az emberi megismerés, gondolkodásmodelljeivel foglalkozik. Ha sikerülne az emberi gondolkodás egy meg-feleloen pontos elméletét megfogalmazni, elvileg azt számítógépes prog-rammal is lehetne utánozni.

Az emberhez hasonlóan cselekednek:Mikor intelligens egy program? A-lan Turing megfogalmazott egy tesztet, mely szerint egy számítógépesprogram intelligensnek tekintheto, ha a kérdezo, amely egy terminálonkeresztül teszi fel kérdéseit, nem tudja eldönteni, hogy számítógép, vagyember válaszol a kérdéseire. A programnak a következokre van szük-sége:

– természetes nyelvi megértés — „emberi” nyelven kommunikáljon agép,

– tudásreprezentáció — a beszélgetés alatt szerzett ismereteket tárolja,– automatikus következtetés — a tárolt ismeretek felhasználása,– gépi tanulás — alkalmazkodni tudjon a körülményekhez.

Az Eliza (1966) rendszer egyszeru mintaillesztésen alapul, a Turing-tesz-tet talán teljesítené, ám nem intelligens.

Racionálisan gondolkodnak: Kulcskérdés a helyes következtetés. Arisz-totelész már szillogizmusokat (következtetési szabályokat) fogalmazottmeg, de csak kétezer év múlva születtek meg a következtetések formális

11

12 II. MESTERSÉGES INTELLIGENCIÁRÓL ÁLTALÁBAN

axiómarendszerei. A hetvenes években készültek el a megfelelo szintukövetkezteto programok, viszont nehéz az egész világot formális szabá-lyokkal leírni, és idoigényes a következtetés, ezért túlnohet a feladatmegoldása a számítógép határain.

Racionálisan cselekednek:Ágens — érzékelni és cselekedni képes prog-ram vagy szerkezet. Napjaink egyik divatos kutatási területe.

Nézzük, hogy mi valósult meg mindezekbol eddig:

– természetes nyelvi elemzok: játékok, adatbázisok felhasználói felületei,fordítók,

– szakérto rendszerek, ágensek,– önállóan muködo érzékelok, robotok, melyek elore terveznek különféle

feladatokat,– felismero rendszerek (gépelt szöveg, kézírás).

1.2. Határos tudományok

Már az elobbiekbol is látható, hogy az MI nem elkülönült tudomány, sok mástudományterülethez kapcsolódik. Egy nem teljes lista a határos tudományokról akövetkezo:

– kognitív pszichológia, pszicholingvisztika– logika, nyelvfilozófia, gondolkodás filozófiája– számítógépes nyelvészet, pszicho- és szociolingvisztika– robotika– adaptív rendszerek elmélete

1.3. Intelligens rendszerek jellemzoi

Az MI eredeti kutatási célja az volt, hogy bizonyos feladatokat számítógép-pel oldjanak meg. Viszont az MI-ben használatos algoritmusok, módszerek igeneltérnek az ötvenes-hatvanas években a számítógéppel megoldott feladatok algorit-musaitól, amelyek foleg számolásra, adatok rendezésére, kezelésére alapult. Lás-suk melyek az intelligens rendszerek jellemzoi!

– Elsosorban nem numerikus szimbólumokkal dolgoznak.– A feladatokat nem pontos algoritmusok alapján oldják meg, hanem he-

urisztikus módszereket alkalmaznak. Heurisztika: tapasztalaton alapulómódszer (pl. egyszerusíto feltevés), amely korlátozza vagy egyszerusítia megoldás keresését bonyolult, nagyméretu illetve kevésbé megértettproblémák feladatterében. Az algoritmusoktól eltéroen a heurisztikáknem biztosítják az általuk szolgáltatott megoldás hibátlanságát.

2. SZAKÉRTO RENDSZER 13

– Olyan tudáskészlettel rendelkeznek — a valóság adott szeletének mo-delljével —, amely az ember számára értheto, a tudásbázis világosanel van választva a feladat megoldását szolgáltató következteto géptol.A rendszer képes megoldást találni olyan esetekben is, amikor a fela-dat megoldásához szükséges adatok hiányosak, vagy pontatlanok. (Ter-mészetesen ekkor a megoldás, a következtetés pontatlan, vagy akár tévesis lehet.)

– A rendszer képes megoldani olyan feladatokat is, amelyekben az ada-tok egymásnak ellentmondanak. Ilyenkor az emberhez hasonlóan aztválasztja, amely leginkább összhangban van az ismereteivel.

– A rendszernek rendelkeznie kell a tanulás képességeivel.

2. Szakérto rendszer

A sok különféle mesterséges intelligenciához tartozó terület közül mi a sza-kérto rendszerekkel fogunk foglalkozni, ezért nézzük meg, mi is ez valójában! Aszakérto rendszer a tudással, adatokkal, információkkal dolgozik, számunkra eza kövezkezoket jelenti: azadat a feldolgozatlan input (bemeno értékek), ain-formációa feldolgozott adat, atudásaz információ-elemek és a köztük fennállókapcsolat együttesét jelenti. Az információ-elem lehet objektum, fogalom, annakvalamilyen tulajdonsága. A kapcsolat pedig lehet hiearchius, tartalmazás, hason-lóság, stb.

Hogy is néz ki elso közelítésben egy szakérto rendszer? Eloször is a tervezoje(illetve extrém esetben a felhasználó) feltölti a rendszert megfelelo információval.Ezután a felhasználó kérdéseket tehet fel, melyre a rendszer választ ad vagy ta-nácsokkal látja el a felhasználót. Például egy vasúti menetrendet tartalmazó rend-szernél a felhasználó bármely két állomás közti útvonalra kérhet javaslatokat, ame-lyek különféle feltételeknek is eleget tesznek. Természetesen egy ilyen rendszerképessége korlátos, a vasúti menetrend nem tartalmazza a kompok vagy a hajókmenetrendjét.

Az 1. ábrán látható a szakérto rendszer vázlatos felépítése. A rendszer lelke akövetkezteto rendszer, mellyel a következo fejezetben részletesen foglalkozunk.

Az aktuálisan vizsgált világ leírása a memóriában található. A világ leírásaegyszeru formában történik meg, például erre használhatunk(o, t, e) hármasokat,ahol azo az adott objektum neve,t a tulajdonság elnevezése, aze pedig a megfeleloérték. A barátkeselyu esetén felírhatjuk a következoket:

(barátkeselyu, méret, nagy)(barátkeselyu, fej, kopasz)(barátkeselyu, szín, barna)

14 II. MESTERSÉGES INTELLIGENCIÁRÓL ÁLTALÁBAN

Tudásbázis Következteto rendszer Memória)

Magyarázat Információlekérdezés

Felhasználói felület

1. ábra. A szakérto rendszer felépítése

Az egyszeruség kedvéért ezt érdemes a következo formában rövidíteni:

(barátkeselyu(méret, nagy) (fej, kopasz) (szín, barna))

Ezek az állítások, ezek a tények tartalmazzák mindazokat az ismereteket, melyeketa kérdés megválaszolásakor a rendszer felhasználhat.

De azt, hogy hogyan használhatja fel ezeket, azt a tudásbázis határozza meg.A tudásbázisban a tudást különféleképpen reprezentálhatjuk. Például a szabályalapú ismeretreprezentáció esetén az ismeretek leírásának a formája a következo:

Ha feltétel, akkormuvelet.

Például „Hax szorös, akkor töröljük azx-et az adatbázisból!” vagy „Hax repülésx tojást rak, akkor vegyük fel az adatainhoz azt, hogyx madár.

A gyakorlatban használt szakérto rendszerek fontos eleme, hogy a kérdésreadott válasz esetén megtudhassuk, hogy mi úton-módon jutott az adott válaszhoz arendszer, milyen következtetéseket használt fel ehhez. Mi a félév során ezzel nemfoglalkozunk.

3. A tudás leírása

Ebben a részben arról lesz szó, hogy milyen formalizmussal írhatóak le azinformáció-elemek és azok kapcsolatai. Mielott ezt bemutatnánk, soroljuk fel,hogy milyen kérdések merülhetnek fel ezzel a formalizmussal kapcsolatban:

adekvált: a lényeges információ-elemekkel foglalkozunk-e?megértheto: a leírt tudás megértheto-e?átadható: a tudás közölheto-e?összetett:a komponensek összekapcsolhatók-e?hatékony: takarékosan használjuk-e fel a memóriát, illetve könnyedén vég-

rehajthatók-e az egyes muveletek?

3. A TUDÁS LEÍRÁSA 15

3.1. Állapottér leírás

A világ minden pillanatban valamilyen állapotban van. Ezt az állapotot ter-mészetesen valamilyen egyszerusített formában ábrázolhatjuk. A világ valamelyállapotát célállapotnak nevezzük, ezt szeretnénk elérni. Ha a világ már ebben azállapotban van, akkor nem kell az állapotot megváltoztatni. Ha nem ebben azállapotban van, akkor valamilyen változtatások, lépések, muveletek sorozatávallehet az állapotát megváltoztatni. Ám ez még nem garantálja, hogy ilyen lépés-sorozattal a célállapot elérheto.

Formálisan a probléma a következo négyessel írható le:P = 〈S, O, s0, C〉,ahol S az állapotok halmaza (állapottér),O az S → S típusú operátorok hal-maza,s0 a kezdoállapot ésC a célállapotok halmaza. Azs állapotból at állapotközvetlenül elérheto, ha van egy olyano ∈ O, hogyo(s) = t. Az s állapotból atállapotelérheto, ha létezik olyans1,. . .sn sorozat, hogys = s1, t = sn éssi-bolsi+1 közvetlenül elérheto. Egy P problémamegoldásaegy olyan〈o1, . . . , on〉,aholoi ∈ O, ok(ok−1(. . . o1(s0) . . .)) = t ést ∈ C.

A soron következo példákban az alábbi kérdésekre keressük a választ:

– Miképp ábrázolunk egy állapotot?– Milyen muveletek segítségével tudunk egy állapotból egy másikba eljut-

ni?– Mi a kezdoállapot?– Mi a terminális feltétel?

3.1.1.Nyolcas játék.A közismert 15-ös játék egyszerusített változata. Egy3 × 3-as táblára tesszük fel a8 darab számozott figurát. Egy-egy lépésben egyfigurát lehet a vele szomszédos mezore tolni. Az állapotot a3× 3-as táblázatba írt8 szám ad meg. Az operátorok: üres mezo fel, üres mezo le, üres mezo balra, üresmezo jobbra. Ennek megfeleloen legfeljebb négy, legalább két lépés lehetséges.Kiinduló állapot:

7

4

1

5

6

2

8

3

Célállapot:

7

4

1

8

5

2

6

3

16 II. MESTERSÉGES INTELLIGENCIÁRÓL ÁLTALÁBAN

3.1.2.n királyno. Az n × n-es táblára sorban egymás utánn vezért teszünkfel, hogy azok ne üssék egymást. (Két vezér akkor üti egymást, ha azonos sorban,azonos oszlopban, vagy azonos átlóban találhatóak.) Egy állopot ábrázolható lenneazn× n-es táblázattal is, de mivel egy oszlopban csak egy vezér állhat, elegendoegy n méreto vektor, s a vektor elemei azt adják meg, hogy az adott oszlopbantalálható vezér hanyadik sorban áll. Egy-egy operátor egy-egy vezér hozzáadásátjelenti. Célállapotn = 4 esetén:

?

?

?

?

Ennek a végállapotnak a 2, 4, 1, 3 vektor felel meg.3.1.3.Három kancsó.Adott három kancsó, egy8, egy5 és egy3 literes. A

nyolcliteres tele van borral, a másik ketto üres. Hogyan tudunk négy liter bortkimérni? Ebben az esetben egy állapotot egy számhármassal adhatunk meg, aszámok sorra azt jelentik, hogy hány liter bor található a8, az5, a3 literes kanc-sóban. Természetesen a8 literes kancsóban minimum0, s maximum8 liter borlehet, s hasonló állítások igazak a többi kancsóra is. Mivel bor nem vész el,s nem is teremtodik, a három szám összegének nyolcat kell adnia. Ezeknek afeltételeknek még végtelen sok állapot megfelelne, de az operátoroknak megfele-loen nem lesz olyan sok. Mivel a három kancsó mindegyikébol elvileg lehet öntenia másik kettobe, hat operátorral számolhatunk. Ha a kiinduló kancsóban kevesebbbor van, mint a célkancsóban üres hely, akkor az egész tartalmat átöntjük. El-lenkezo esetben a célkancsót teletöltjük a kiinduló kancsóból. A 3.1.3 táblázatbanlátható, hogy a kiinduló állapotból mely állapotokba juthatunk el. Ugyanez másmódszerrel is ábrázolható. Mivel bor nem vész el, ha tudjuk, hogy mennyi vanbelole az5 literes és a3 literes kancsókban, akkor kiszámolható a8 literes kancsótartalma is. Ennek megfeleloen készítünk egy rajzot, melyen a vízszintes irány aháromliteres kancsó, a ferde irány pedig az ötliteres kancsó tartalmának felel meg.Így a zöld nyilak azt jelzik, amikor a nyolcliteres és háromliteres között öntjük abort, a piros az öt- és nyolcliteresnek, a kék pedig a három- és ötliteresnek. A raj-zon elegendo elindulni az egyik irányban, elkerülni a sarkokat, s hamarosan adotta megoldás.

3.2. Logikai leírás

Az elsorendu predikátumkalkulus (klasszikus logika) függvények és prediká-tumok (tulajdonságok és relációk) alkalmazásával írja le egyedek kapcsolatait:

3. A TUDÁS LEÍRÁSA 17

db állapot 8→ 5 8→ 3 5→ 8 5→ 3 3→ 8 3→ 51 800 2 3 - - - -2 350 - 4 1 5 - -3 503 4 - - - 1 64 053 - - 3 - 2 -5 323 4 - 3 - 7 26 530 2 8 1 3 - -7 620 2 5 1 9 - -8 233 4 - 3 - 6 109 602 11 3 - - 1 7

10 251 - 4 12 8 2 -11 152 - 4 9 13 2 -12 701 10 3 - - 1 1413 143 4 - 3 - 15 1114 710 2 16 1 12 - -15 440 2 13 1 16 - -16 413 4 - 3 - 14 15

1. táblázat.Áttöltögetések eredménye

rr

rr

rr

r r r

r r rr

rr

r-

-

-

-

�J

JJ]JJJ J

JJ

JJ

J]JJ

JJ

JJ J

JJ

JJ

JJ

JJJ]J

JJ

JJ

JJ

JJJ

JJ

JJ

JJ

JJ

JJ]JJ

JJ

JJ

JJ

JJ

JJ

JJ

JJ

JJ

JJ]JJ

JJ

JJ

JJ

JJ

JJ

JJ

JJ]J

JJ

JJJ

JJJ]JJJ

��� ---

��� ---

1 12 9 3

14

7

6

15

2 10 11 4

13

8

5

16

2. ábra. Boröntögetés grafikus ábrázolása

testvér(anyja(Péter),Lajos), azaz Péter anyja és Lajos testvérek. Általános eset-ben egy nagyobb rendszernél rengeteg predikátumra van szükségünk. Hátrányatovábbá még ennek a módszernek az, hogy hiányos vagy gyorsan változó ada-tokat nehezen kezel (erre megoldás a default logic) és akkor is problematikus ahasználata, ha az állításaink igazságértéke különbözik azigaz éshamis értékektol(erre a fuzzy logika szolgál megoldással). Ez utóbbira jellemzo példa következo:Ha vasárnap elég meleg lesz, és nem fúj nagyon a szél, nagyot fogok sétálni.

18 II. MESTERSÉGES INTELLIGENCIÁRÓL ÁLTALÁBAN

3.3. Szabályalapú leírás

Szabályalapú leírás eseténHa . . . akkor . . . alakú szabályok segítségével ír-hatjuk le az ismereteket. AHa mögött egy feltétel, azakkor mögött egy muveletszerepel. A hétköznapi nyelvben a szabályokat rendszerint a következo formábanfogalmazzuk meg:Minden veréb madár. Ezt a szabályt úgy fogalmazhatjuk át,hogy ha egy élolény veréb, akkor az az élolény madár is. Legyenek adottak akövetkezo tények (1-3.) és szabályok (4-9):

1. Ká kígyó.2. Szilvia elefánt.3. Csipike veréb.4. Minden veréb madár.5. Minden hüllo állat.6. Minden madár állat.7. Minden pingvin madár.8. Minden madár tojással szaporodik.9. Minden kígyó hüllo.

A felsorolt szabályokat és tényeket két módon is felhasználhatjuk. Elso esetben azitt megadott tényekbol indulunk ki, és a szabályokat felhasználva újabb és újabbtényeket generálunk. Ezt a módszert eloreláncolásos következtetésnek nevezzük.

Lássuk, hogyan muködik ez a módszer az itt megadott tényekkel és szabá-lyokkal! A Minden veréb madár.érvényes Csipikére is, azazHa Csipike verébakkor Csipike madár is.Mivel Csipike veréb, így Csipike madár. AMinden madárállat. érvényes Csipikére is, azazHa Csipike madár akkor Csipike állat is.MivelCsipike madár az elozoek alapján, így Csipike állat.

A másik módszer esetén egy kérdést teszünk fel, s azt szeretnénk megválas-zolni. A szabályok segítségévél újabb, gyakran egyszerubb kérdéseket teszünkfel, s ezt folytatjuk mindaddig, amíg a olyan kérdésekhez nem jutunk, amelyeket amegadott tények megválaszolnak. Ennek megfeleloen mivel a kérdéstol visszafelehaladunk a tények felé, a módszer a visszafele láncolás nevet kapta.

Be tudjuk-e látni azt, hogy Csipike állat? Találjuk meg a hipotézist megalapozótényeket, szabályokat! A feltételeink alapján ahhoz, hogy Csipike állat legyen aztkell belátni, hogy Csipike hüllo, vagy azt, hogy Csipike madár. Ez utóbbihoz ele-gendo azt belátni, hogy Csipike veréb. Ez a tény szerepel a feltételek között, ígykész vagyunk.

Az elorelá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övetkezo alkalmazandó szabályt, így a módszeradattal irányított. A visszafele láncolásos következtetés esetén a kérdéshez, azaz

3. A TUDÁS LEÍRÁSA 19

Elek

hóember hó

víz

puha

fehér

átlátszó

hideg

kemény

6

egy

-anyaga

-anyaga

-állaga

-színe

-homérséklete

�állaga

�homérséklete

�színe

�anyaga

jég

3. ábra. Elek szematikai hálója

a következményhez keressük meg a megfelelo feltételeket. Ennek megfeleloen akérdések, azaz a cél irányítja a keresés folyamatát.

Míg az eloreláncolásos következtetés módszerét tervezésre, kontrollra , a visz-szafele láncolás módszerét diagnózisra érdemes használni.

3.4. Szemantikus háló

A Quillian által 1967-ben bevezetett szemantikus háló egy gráfot jelent. Afogalmak, objektumok a gráf csúcsai, a relációk pedig a köztük lévo élek. A 3ábrán a hó csúcsból a homérséklet elnevezésu él a hideg csúcshoz vezet, s ez aztjelenti, hogy a hó (objektum) homérséklete (tulajdonság) hideg (érték). A szeman-tikus hálókról nem csak ez az egyszeru kapcsolat olvasható le, hanem bizonyostulajdonságok öröklodhetnek is. A 4 ábráról a kanári tulajdonságát olvashatjukle. Például azt, hogy a kanári sárga, a kanári tud repülni, a kanárinak van bore.A Quillian és Collins kisérletei azt mutatták, minél messzebb helyezkedik el akét csomópont a gráfban, a kísérleti alanyok annál lassabban válaszolták meg akérdést.

A szemantikus hálóban lehetoség van kivételkezelésre, magyarán a tagadáskifejezésére is, például a pingvinnem tud repülni. Ezek után a pingvin hiábamadár, a madarakra jellemzo tud repülnitulajdonság már nem öröklodik a pingvi-nekre.

20 II. MESTERSÉGES INTELLIGENCIÁRÓL ÁLTALÁBAN

kanári

sárga énekelni?

színe

?

tud

madár

egy

egy

tolla

szárnya

repülni

6

-

-

-

-

van

van

tud

mozogni

bore

lélegezni

állat -

-

-tud

van

tudhalegy -

4. ábra. Kanári szemantikus hálója

A kanári szemantikus hálója kiegészítheto lenne a Csorike csúccsal, ami egykanári. Viszont itt azegyszót két különbözo értelemben használjuk. A két jelentéstélesen el kell választani! Az ábrán szereplo alakok matematikában a részhalmaz-nak feleltethetoek meg, például a kanárik halmaza részhalmaza a madarak hal-mazának, vagy a halak halmaza részhalmaza az állatok halmazának. A Csorikepedig eleme a kanárik halmazának. Ez utóbbi relációra a késobbiekben azegyed,az elobbire pedig afajta elnevezéssel hivatkozunk.

A szemantikus hálós megközelítésnek természetesen vannak elonyei és hát-rányai is. Elonyt jelent az átlátható grafikus megjelenítés, az explicit reláció afogalmak, objektumok között, és az ábrázolás rugalmassága. Hátrány jelent vi-szont a szuk kifejezoképesség, a heurisztikus keresés (nem hatékony), a relációktulajdonságának (tranzitív, szimmetria) követése, a relációk különféle értelmezése,a relációk típusának nagy száma (a szemantikus hálók egyik továbbfejlesztésénél— conceptual dependency relationship— tucatnyi különféle relációt vezettek be,melyekre különféle módosító jelzok alkalmazhatóak), negatív keresés esetén kom-binatorikus robbanás történik a keresésnél.

3.5. Keretalapú ismeretábrázolás

A keretalapú ismeretábrázolás Minsky nevéhez fuzodik (1975). Ez nem más,mint a szemantikus háló továbbfejlesztése. Itt egy csúcsnak saját strukturája lehet,

3. A TUDÁS LEÍRÁSA 21

ezt nevezzük keretnek. Mint az a 5. ábrán látszik egy csúcs egy objektumot ábrá-zol, és az objektum tulajdonságainak és azok értékenek párjai alkotják a csúcsot.(Emlékezzünk vissza az objektum, tulajdonság és érték hármasára!) A rendszerhierarchikus felépítésu, ennek megfeleloen az adott tulajdonságok öröklodnek. E-setünkben a nyúlról nem kell leírni azt, hogy szor fedi, mert ez következik abból,hogy emlos. A kereteknél a szematikai hálóhoz hasonlóan meg kell különböztetniazegyed-éstípuskereteket. Ez utóbbi objektumok egy csoportjának általános tu-lajdonságait írja le (prototipus), míg az elobbi egy speciális objektum egyedi tula-jdonságait tartalmazza, s természetesen örökli a típusa tulajdonságait is.

A keretalapú ismeretábrázolás kifejezoképességét növelendo a kerethez, vagyegyes tulajdonságaihoz különféle muveleteket lehet rendelni. Ezzel például fi-gyelni lehet, hogy az adott tulajdonság értéke megfelel-e bizonyos feltételeknek,más tulajdonság értékét egyéb értékekbol lehet származtatni, stb. (Ebbol fejlodöttki a napjaink programozási módszere: az objektumorientált programozás.)

A keretrendszer sok jó tulajdonsággal rendelkezik, ezért is alkalmazza nap-jaink legtöbb szakérto rendszere ezt a módszert. Lássunk pár elonyös tulajdonsá-got: nagyon rugalmas, jó kifejezoképesség, az ok-okozati kapcsolatok könnyedénmegfogalmazhatóak, rendezetten írható le a tudás, tartalmazza a hierarchiát ésöröklodést, szabály alapú komponensekkel könnyen bovítheto. Természetesen ahátrányokat sem felejthetjük el: nehezen kezelhetok a speciális esetek, a módosítá-soknak elore nehezen látható következményei lehetnek más keretekben.

láb 4mozgás ugrálfül hosszútípus emlosnyúl

farok nincsláb 2típus emlosember

fedi szorvér melegemlos

6

5. ábra. Egyszeru keretek

III. fejezet

Logikai alapok

1. A logika definíciója

Logikán a logikai nyelv és szemantika párosát értjük, ahol a

Nyelv: Olyan jól formált kifejezések gyujteménye, amelyhez jelentés ren-delheto. A klasszikus logikában ezeket a kifejezéseket nevezzük for-muláknak.

Szemantika: Ez adja meg, hogy az elobbi kifejezéseket hogyan értelmez-zükvalamirolszóló állításokként. Ez a valami lehet valamilyen matema-tikai objektum, mint például a természetes számok, csoportok; de lehet-nek hétköznapi dolgok, mint például kocsik, idojárás. A nyelv állítá-sai ezen objektumok tulajdonságairól, kapcsolatáról szólnak. A modellmegadása azt jelenti, hogy minden egyes ilyen tulajdonság illetve relációesetén megadjuk, hogy az mely esetekben igaz.

EgyM modell megadása esetén a következo definíciókat szokás használni: Le-gyenΓ formulák egy halmaza!

M |= A: (M modell modellje azA formulának), haA igazM-ben.|= A: (A érvényes), haA igaz minden modellben.M |= Γ: (M modelljeΓ-nak), haM |= A mindenA ∈ Γ formulára.Γ |= A: (A logikai következményeΓ-nak), haA igazΓ minden modelljé-

ben.

Ez szép elméleti definíció, de mivel általában végtelen sok modell létezik, nemtudjuk mindegyiket végigvizsgálni. Mivel kézzelfogható eredményekre is kivánc-siak vagyunk, például tudni szeretnénk, hogy egy kifejezés logikai törvény-e vagyegy kifejezés logikai következménye más kifejezéseknek, a definícióban szereploszemantikai megközelítés pedig nem automatizálható, szükségünk van egy másikmódszerre is, ez pedig a levezetési rendszer. Alevezetési rendszerszabályok egyolyan gyujteménye, amellyel érdekes tényeket vezethetünk le tisztán mechanikusúton a szemantikai objektumok tulajdonságairól és kapcsolatairól.

23

24 III. LOGIKAI ALAPOK

2. Kijelentéslogika

A kijelentéslogikában egyszeru kijelentéseink (állításaink, ítéleteink) vannak,melyek mindegyike vagy igaz, vagy hamis. Ilyen állítás például aKetto párosszám. vagy Éva szoke.A bonyolultabb állításokat a kijelentésekbol állíthatjukössze összekötojelek segítségével. A következo összekötojeleket használjuk:

∧ konjunkció (és)∨ diszjunkció (vagy)¬ negáció (nem)⊃ implikáció (ha . . . , akkor)

Az összetett állítások igazságértékét a kijelentések értékébol számíthatjuk ki:

P Q ¬P P ∨Q P ∧ P P ⊃ QI I H I I II H I H HH I I I H IH H H H I

Egy állítás érvényes (tautológia), ha a kijelentésváltozók tetszoleges értékelésénél(másnéven minden interpretációban) igaz. Egy állítás kielégítheto, ha van olyaninterpretáció, melyben a formula igaz. Egy formula ellentmondásos, ha mindeninterpretációban hamis. Mivel az érvényesség és logikai következmény szorosankapcsolódik, fontos eldöntetnünk egy formuláról, hogy az érvényes, vagy sem. Azösszes eset vizsgálata hatásos, de nem hatékony. Egy becsületesebb rendszer többmint ezer tényt (kijelentést) ismer, s így21000 esetet kellene megvizsgálni, amilehetetlen!

A legegyszerubb levezetési rendszer egy levezetési szabályt alkalmaz, mely-nek a neveModus Ponens. Ennek a szabálynak az alakja a következo:

A, A ⊃ BB

A következoképp értelmezzük: ha igaz azA és igaz azA ⊃ B premissza akkorigaz aB konklúzió is. HaA jelöli az Esik. ésB az Az utak vizesek. mondatot,akkor azHa esik, akkor az utak vizesek.ésEsik. feltételekbol következik azAzutak vizesek.következmény.

A hétköznapi életben sokszor lehet találkozni az alábbi hibás következtetéssel:Ha esik, akkor az utak vizesek.ésAz utak vizesek.feltételekbol következtetnek azEsik.következményre. Ennek a

A, B ⊃ AB

3. ELSORENDU LOGIKA 25

szabály felelne meg, de ilyen levezetési szabály nem látezik! (Ennek igazolásárakészítse el aA ∧ (B ⊃ A) ⊃ B formula igazságtábláját!) Gondoljunk csak arra,ha ott járt a locsolókocsi, akkor is vizesek az utak!

3. Elsorendu logika

Ha tudnánk, hogy Alíz Béla testvére (P ) és Béla Csaba testvére (Q), akkormindenki számára nyilvánvaló, hogy Alíz Csaba testvére (R), de a kijelentés-logikában(P∧Q) ⊃ R formula nem érvényes. A kijelentéslogika nem képes ilyenkapcsolatok, relációk kifejezésére. Ezért egy ennél kicsit bonyolultabb logikát fo-gunk használni, a klasszikus elsorendu logikát. Erre a logikára, pontosabban ennekegy részére alapul a Prolog is.

Akárcsak az elobbi példában szükségünk van arra, hogy objektumokra (em-berekre, állatokra, tárgyakra, gépekre) hivatkozhassunk. Ha az objektumnak vanneve, akkor egyszeru dolgunk van. Néha nem tudjuk a nevet, de valahogy utal-hatunk rá, például Péter anyja. S vannak esetek, amikor egy változót kell használ-nunk.

Az elsorendu logikában a legegyszerubb állítások különféle objektumok tulaj-donságait, relációit írják le. Példáulsz oke(anyja(Péter)) , azaz Péter anyjaszoke, vagymagasabb(anyja(Péter),apja(Pál)) , azaz Péter anyja ma-gasabb mint Pál apja. A logikai összekötojelekkel ezekbol az állításokból a koráb-biakhoz hasonlóan összetett állítások készíthetoek.További lehetoség összetett állítások készítésére a kvantorok használata. Két kvan-tort használhatunk: az univerzálist (∀, bármely, minden) és az egzisztenciálist (∃,van, létezik.) AMinden leány csalfa, azaz a∀xC(x) állítás azt fejezi ki, hogy atárgyalási univerzum minden elemére (magyarul minden lányra) az adott állítás —azaz hogy a szóban forgó lány csalfa– igaz. Egy ilyen állítás pontosan akkor igaz,hogy ha tetszoleges elemet kiválasztva, s az állításban szereplo változó helyéreírva igaz állítást kapunk. AVan becsületes politikus, azaz a∃xB(x) állítás ehhezhasonlóan akkor lesz igaz, ha a politikusok halmazában találunk olyan személyt,aki becsületes.

Elsorendu logikában általános esetben az érvényesség eldöntése közel expo-nenciális bonyolultságú, azaz nagyon nehéz. Viszont Horn-formulák esetén ez abonyolultság polinomiális, azaz jól használható a gyakorlatban. A Horn-formulákalakja:

∀ . . . (A1 ∧ . . . An ⊃ B),aholA1,. . .An a feltételek,B a következmény, és minden a formulában elofordulóváltozóhoz tartozik egy univerzális kvantor. A Prolog nyelvben majd ezt úgy ír-juk le: B :- A1,..., An. A Horn-formulák azt fejezik ki, haA1,. . . ,An

26 III. LOGIKAI ALAPOK

feltételek igazak, akkorB kövekezmény is. Illetve hogy aB formula igaz legyen,ahhoz az kell hogy azA1,. . . ,An formulák igazak legyenek.

4. Gyakorlatok következtetésekre

(1) 1. Ha autót veszek, akkor minden pénzem ráköltöm, és nem veszek újTV-t.

2. Ha eladom a régi TV-t, és nem veszek újat, akkor nem nézhetemotthon az olimpiát.

K. Ha eladom a régi TV-t, és autót veszek, akkor nem nézhetem otthonaz olimpiát.Következménye-e az 1 és 2 állításoknak a K?

(2) 1. Vannak Beatles-fizurás huligánok.2. Minden huligánnak nyegle a modora.A. Van olyan nyegle modorú huligán, akinek Beatles-fizurája van.B. Minden nyegle modorú huligánnak Beatles-fizurája van.

Következménye-e az 1 és 2 állításoknak az A? És a B?(3) 1. Minden nem dohányzó kollégista bélyeggyujto.

2. Minden szemüveges bélyeggyujto dohányzik, vagy nincs olyan nemdohányzó bélyeggyujto, aki nem szemüveges.

3. Kis Béla, mióta nem visel szemüveget, leszokott a dohányzásról ésnagy szenvedélye a bélyeggyujtés.

K. Minden szemüveges kollégista dohányzik.Következménye-e az 1, 2 és 3 állításoknak a K?

(4) 1. Egyik foiskolai hallgató sem kapott jegyet.2. Aki nem klubtag, az vendég.3. Minden klubtag fizetett.4. Minden vendég ebédelt.5. Aki fizetett, az jegyet kapott.K. Minden foiskolai hallgató ebédelt.

Következménye-e az 1, 2, 3, 4 és 5 állításoknak a K?(5) 1. Ebben a házban macskán kívül más állat nincs.

2. Minden olyan állatot szívesen dédelgetünk, amelyik szeret a holdrabámulni.

3. Amelyik állatot utálom, azt elkerülöm.4. Nincsen olyan húsevo állat, amelyik ne üvöltene éjjel.5. Nincsen olyan macska, amely ne fogna egeret.6. Azokon kívül, amelyek ebben a házban vannak, egyetlen állat sem

barátkozik velem.

5. ELORE- ÉS VISSZAFELE LÁNCOLÁSOS KÖVETKEZTETÉSEK 27

7. A kengurukat nem szívesen dédelgetjük.8. Csak húsevo állat fog egeret.9. Utálom az olyan állatokat, amelyek nem barátkoznak velem.

10. Az olyan állatok, amelyek éjjel üvöltenek, szeretnek a holdra bá-mulni.

K. Elkerülöm a kengurukat.Következménye-e az elso tíz állításnak a K?

(6) 1. Egyes matematikusok szeretik a zenét.2. Vannak, akik szeretik a zenét és értenek a geometriához.A. Minden matematikus ért a geometriához.B. Egyes matematikusok értenek a geometriához.C. Egyes emberek értenek a geometriához, és nagyon szeretik a zenét.

Következménye-e az 1 és 2 állításoknak az A? És a B vagy a C?

5. Elore- és visszafele láncolásos következtetések

Korábban már megismerkedtünk az eloreláncolásos és visszafele láncolásoskövetkeztetési módszerrel. Lássuk, hogyan fejezhetoek ki elsorendu logikában atények és szabályok!

1. Ká kígyó –k(K).2. Szilvia elefánt –e(Sz).3. Csipike veréb –v(Cs).4. Minden veréb madár –∀x(v(x) ⊃ m(x)).5. Minden hüllo állat –∀x(h(x) ⊃ a(x)).6. Minden madár állat –∀x(m(x) ⊃ a(x)).7. Minden pingvin madár –∀x(p(x) ⊃ m(x)).8. Minden madár tojással szaporodik –∀x(m(x) ⊃ t(x)).9. Minden kígyó hüllo –∀k(v(x) ⊃ h(x)).

5.1. Eloreláncolásos következtetés.

A Csipikére vonatkozó eloreláncolásos következtetés a 1. ábrán látható.

5.2. Visszafele következtetés.

A keresés a következoképpen történik: rakjuk az összes kérdést (feltételezettkövetkezményt, célt) egy verembe, majd válasszunk ki egy célt, s határozzuk megaz összes olyan szabályt, melynek ez következménye lehet. Minden egyes ilyenszabályra hajtsuk végre a következoket:

28 III. LOGIKAI ALAPOK

v(Cs)

m(Cs)

∀x(v(x) ⊃ m(x))

v(Cs) ⊃ m(Cs)

∀x(m(x) ⊃ a(x))

m(Cs) ⊃ a(Cs)

a(Cs)

@@

@@

@R

? ?

��

����

������

������

@@

@@@R

1. ábra. Csipike állat levezetése

– ha a szabály minden premisszája (feltétele) teljesül (tény), akkor a sza-bály alkalmazható, így a konklúzió (következmény), azaz a cél teljesül(ezt a célt töröljük a verembol).

– ha valamely premissza nem teljesül, és van olyan szabály, melynek e-setleg konklúziója lehet ez a premissza, akkor ezt a premisszát mint céltrakjuk a verembe.

– ha nincs ilyen szabály, de a felhasználó a premisszát ténynek nyilvánítja,akkor a következo premisszára kell ugrani, egyébként próbálkozzunk akövetkezo szabállyal.

ha teljesen kiürül a verem, akkor kész vagyunk.Be tudjuk-e látni azt, hogy Csipike állat? Találjuk meg a hipotézist megalapozó

tényeket, szabályokat! A feltételeink alapján ahhoz, hogy Csipike állat legyen aztkell belátni, hogy Csipike hüllo, vagy azt, hogy Csipike madár. Ez utóbbihoz ele-gendo azt belátni, hogy Csipike veréb. Ez a tény szerepel a feltételek között, ígykész vagyunk.

5.3. Házi feladat.

Legyenek a feltételeink a következok:

(1) ha tanul, akkor jó oszályzatot kap(2) ha nem tanul, akkor rossz oszályzatot kap(3) ha süt a nap, akkor elmegy otthonról(4) ha rossz az ido, akkor otthon marad

5. ELORE- ÉS VISSZAFELE LÁNCOLÁSOS KÖVETKEZTETÉSEK 29

(5) ha elmegy otthonról, akkor nem tanul(6) ha otthon marad, akkor tanul

Válaszolja meg a következo kérdéseket!

– Mi az oka, hogy a diák rossz osztályzatot kapott?– Mi kell ahhoz, hogy a diák jó osztályzatot kapjon?

IV. fejezet

Prolog

A visszafele következtetésre mi a Prolog programnyelvet alkalmazzuk. Eza nyelv a hetvenes évekbeli logikai kutatásoknak az eredménye, s a nyolcvanasévekben Magyarország a Prolog kutatásának, alkalmazásának élvonalához tarto-zott. Az akkori felfokozott érdeklodés a programnyelv iránt mára lecsengett, dejelenleg is sok helyen, sok célra használják.

Sok fizetos és ingyenes implementáció létezik. Az órán mi az SWI-Prologothasználjuk, melyet ingyen le lehet tölteni különféle operációs rendszerekre.

1. Prolog alapok

Tekintsük az alábbi családfát!

Amy

Joan

Albert MayLydiaAlbertus

Alberta

Wayne Neal

John Cleo

Debbie

Nate BethanyIan

Elizabeth

Kyle Daniel

Sean KathyMartha

Ralph

Ezt a családfát a következo adatokkal kódoljuk: megadjuk, hogy ki férfi (male),ki no (female), ki kinek a szüloje (parent), és kik házasok (married). A Prolog-ban amit nagybetuvel írunk, az változónak számít. Ezért a családfában szereploneveket kisbetukkel kell írnunk. (Más megoldásként írhatnánk a neveket idézo-jelek között is.) Ezért ha azt akarjuk megadni, hogy Albertus férfi és Lydia no,akkor azt amale(albertus) és female(Lydia) formában tehetjük meg.Továbbá azt, hogy Albertus Ralph szüloje, a következoképpen írjuk:

31

32 IV. PROLOG

parent(albertus, ralph)

tehát az elso helyen a szülo neve áll. Végül azt, hogy Albertus és Lydia háza-sok úgy írjuk, hogymarried(albertus, lydia). Ne felejtsünk el mindenegyes tényt ponttal lezárni! Ezek alapján a férfiakról szóló tények a következok:

male(albertus). male(albert). male(ralph).male(neal). male(wayne). male(nate). male(ian).male(john). male(sean). male(kyle). male(daniel).male(shane).

A nokrol szólók pedig:

female(lydia). female(may). female(alberta).female(joan). female(amy). female(bethany).female(debbie). female(cleo).female(elizabeth). female(kathy). female(martha).

A szüloi kapcsolatokat az alábbi tények írják le:

parent(albertus, ralph). parent(albert, alberta).parent(ralph, neal). parent(ralph, wayne).parent(ralph, martha). parent(wayne, amy).parent(neal, nate). parent(neal, ian).parent(neal, bethany). parent(john, debbie).parent(john, sean). parent(john, elizabeth).parent(sean, kyle). parent(sean, daniel).parent(lydia, ralph). parent(may, alberta).parent(alberta, neal). parent(alberta, wayne).parent(alberta, martha). parent(debbie, nate).parent(debbie, ian). parent(debbie, bethany).parent(cleo, debbie). parent(cleo, sean).parent(cleo, elizabeth). parent(kathy, kyle).parent(kathy, daniel). parent(joan, amy).

A házaspárok listája meg eképp adható meg:

married(neal, debbie). married(ralph, alberta).married(albertus, lydia). married(albert, may).married(sean, kathy). married(john, cleo).married(debbie,neal). married(alberta, ralph).married(lydia, albertus). married(may, albert).married(kathy, sean). married(cleo, john).

Ezek a tények a honlapon acsalad.pro állományban találhatóak meg.Letöltés után az SWI-Prologot elindítva File menüpont Consult alpontját választvatöltheto be. (Ha megfeleloképpen lett telepítve az SWI, Windows alatt elegendo

1. PROLOG ALAPOK 33

duplán kattintani a megfelelo Prolog forrásra. Unix alatt pedig a program indításaután aconsult("csalad.pro") parancsot kell kiadni.) Ezután már felte-hetjük a kérdéseinket a rendszernek. Például azt, hogyRalph férfi?a

?- male(ralph)

azt hogyMilyen férfiak vannak az adatbázisban?a

?- male(X)

Prolog-kérdéssel tudhatjuk meg. Az eldöntendo kérdésre természetesenyes vagyno lesz a válasz, míg a kiegészítendo kérdés esetén megadja a kérdezett (nagykezdzobetuvel írt) változók értékét. Ha több ilyen is létezik, akkot a pontosvesszomegnyomására kapjuk a soron következot. (Enter lenyomására átugorhatjuk atovábbi megoldásokat.) Ha már nincs több megoldás, vagy egyáltalán nem is volt,a válaszno lesz.

Eddig a családról szóló adatbázisunk csak tényeket tartalmazott. Minden ro-konsági kapcsolatot felesleges felsorolni, elég ha megadjuk, hogy ez a kapcsolat amár meglévoekbol hogyan származtatható. Például azY apja azY férfi szüloje.Tehát hogy azX személyY apja legyen, ahhoz az kell (pontosabban az már ele-gendo), hogyX férfi legyen, sX azY szüloje legyen. Az ilyen definícióknál adefiniálandó reláció szerepel elol, ezt követi a:- jel, majd pedig a definiáló relá-ciók vesszovel elválasztva. ermészetesen itt is szükség van a lezáró pontra. Teháta definíció a következo lesz:

father(X, Y) :- male(X), parent(X, Y).Feladat. Definiáljuk hasonlóképpen azanyja , fia , lánya , unokája , nagy-apja , nagyanyja , testvére , bátyja , novére , nagybátyja , nagy-nénje , apósa , anyósa , veje , menye, sógora és sógorn oje prediká-tumokat! PéldáulX akkor lesz azY apósa, haX férfi, valamint van egyZ, akiY házastársa, ésX gyereke: Mivel a házastárs szimmetrikus reláció (haX-nekYházastársa, akkorY -nak is házastársaX), az alábbi definícióban mindkét iránytfel kell használni, tehát két részbol fog állni a definíció:

fatherInLaw(X, Y) :-male(X), parent(X, Z), married(Z,Y).

fatherInLaw(X, Y) :-male(X), parent(X, Z), married(Z,Y).

Miután senki sem testvére saját magának, valahogy ki kellene fejezni, hogy azXés azY két különbözo személy. Ezt a Prologban azX\ == Y formában tehetjükmeg.Megjegyzés.A Horn formuláknál arról volt szó, hogy minden változó univerzáliskvantorhoz kapcsolódik, míg az após definíciójában aZ egzisztenciális kvnatorral

34 IV. PROLOG

szerepel. Nincs itt ellentmondás? Nincs, mivel a

∀x∀y(∃z

((M(x) ∧ P (x, z) ∧M(z, y)

)⊃ F (x, y)

)formula ekvivalens a

∀x∀y∀z((

M(x) ∧ P (x, z) ∧M(z, y))⊃ F (x, y)

)formulával. Azaz ha egy változó a Prolog definícóban csak a jobb oldalon szerepel,akkor ahhoz gondolatban egy egzisztenciális kvantort kapcsoljunk!

2. Egyszeru szakérto rendszerek

2.1. Ragadozó madarak

Minden egyes madárról leírjuk azokat a jellemzo információkat (tulajdonság-érték párokat), melyek az azonosításhoz kellenek.

madar(baratkeselyu) :-meret(nagy), fej(kopasz), szin(barna).

madar(szirtiSas) :-meret(nagy), fej(rozsda), szin(barna).

madar(kanya) :-meret(kozepes), szin(rozsda).

madar(olyv) :-meret(kozepes), szin(barna).

madar(heja) :-meret(kozepes), hat(palaszurke), has(csikos).

madar(karvaly) :-meret(kicsi), hat(kekesszurke), has(csikos).

madar(kaba) :-meret(kicsi), hat(palaszurke), has(foltos).

madar(vercse) :-meret(kicsi), hat(agyagvoros), has(vilagos).

madar(kekvercse) :-meret(kicsi), hat(kekesszurke), szin(rozsda).

madar(retiHeja) :-meret(kozepes), fej(vilagos), szin(barna).

Eddig tartott a tudásbázis megadása. Ha megadjuk az aktuális madárra jellemzoadatokat:

meret(nagy).

2. EGYSZERU SZAKÉRTO RENDSZEREK 35

fej(rozsda).szin(barna).

akkor a?- madar(X). kérdéssel megkapjuk a megoldást.

2.2. Szemantikus háló

Tekintsünk egy igen egyszeru rendszert, ahol az ismert objektumnév, tulajdon-ság és érték hármasávaltulajdonság(objektumnév,érték) formájábanadjuk meg a tényeket! (A példában azisaazegyhelyett szerepel, pl. A madár egyállat.)

isa(madar, allat). mozog(madar,repul).aktiv(madar,nappal).

isa(albatrosz, madar). szine(albatrosz,fekete_feher).isa(pingvin, madar). mozog(pingvin,uszik).

szine(pingvin,fekete_feher).isa(kuvik,madar). aktiv(kuvik,ejjel).

szine(kuvik,barna).isa(albert,albatrosz).isa(kristof,albatrosz).isa(kelemen,kuvik).isa(tux,pingvin).

Egészítsük ki a programot az öröklodés lehetoségével. (Természetesen sok mássalfel lehetne ruházni a rendszert, de nem célunk sem a programozás, sem a szeman-tikus hálók mélységeibe elmerülni.) Az öröklodés implementálása egy egyszerupredikátum esetén a következoképpen történik:

mozog(X,M):-isa(X,Os), mozog(Os,M).Ha ezen szabály nélkül feltennénk a rendszernek amozog(tux,X) kérdést, ak-kor a válaszno lenne, mert tényeket a rendszer nem kapcsolná össze. Miután ezt aszabályt az elozo tények után beszúrjuk a forrásba, és a rendszernek újra feltesszüka kérdést, eloször a tények között keres, s mivel ott sikertelenül próbálkozik, a sza-bályoknál folytatja a keresést. A szabály alapján az egyed helyett az osztályában,illetve osztály esetén aososztályában folytatja a keresést. Ennek megfeleloen mi-után a Tux egy pingvin, a pingvin mozgási formája után keres. Ekkor megtaláljaaz úszást. A pontosvesszovel újabb megoldásokra késztetve a rendszert, a pingvinososztályában, a madarak között keres, s ott természetesen megtalálja a repülést.Eme utóbbi válasz nem szerencsés, s minden egyes tulajdonság esetén egy ilyenplusz sort, kellene a tényeinkhez írni. Ehelyett írjunk egy kicsit hosszabb progra-mot.

teny(Teny) :- call(Teny),!.

36 IV. PROLOG

teny(Teny) :-Teny =.. [Relacio, Obj, Arg],isa(Obj,OsObj),OsTeny =.. [Relacio,OsObj, Arg],teny(OsTeny).

Ha a tény predikátum argumentumaként egy kérdést adunk meg, akkor a rend-szer eloször megpróbálja megválaszolni a kérdést (call). Ha ez sikerült, akkorkész vagyunk, s nincs szükségünk több megoldásra. (A további megoldások ki-hagyására szolgál a felkiáltójel.) Ha ebben a formában nem volt megoldás, akkora kérdést részekre tördeljük, a kérdésben szereplo egyedet vagy osztályt azosévelhelyettesítjük, s feltesszük az így készített kérdést. Az új kérdésre adott válaszlesz válasz az eredeti kérdésre is. Ezt a predikátumot használva csak az elsoválaszt kapjuk meg ateny(mozog(tux,X)) kérdésre. Ezzel elkészítettünkegy egyszeru szemantikus hálót kezelo rendszert.

2.3. Minimális keretrendszer

Ha az elobbi hármasok formájában tároljuk a tényeket, akkor az ugyanazonobjektumhoz tartozó tények alkotják az egyes kereteket. (Az elobbi felsorolásbanegy-egy bekezdés felel meg egy-egy keretnek.)

ertek(Keret,Tulajdonsag, Ertek):-Kerdez =.. [Tulajdonsag,Keret,Ertek], call(Kerdez),!.ertek(Keret,Tulajdonsag,Ertek):-szulo(Keret,OsKeret),ertek(OsKeret,Tulajdonsag,Ertek).szulo(Keret,OsKeret):-ertek(Keret,isa,OsKeret).

A korábbi kérdés aertek(tux,mozog,X) formában teheto fel. Természetesenlehetoség van a keretrendszerhez jobban illeszkedo formában megadni az adatokat:

keret(madar,[isa-allat,mozog-repul,aktiv-nappal]).

keret(albatrosz,[isa-madar,szine-fekete_feher]).

keret(pingvin,[isa-madar,mozog-uszik,szine-fekete_feher]).

keret(kuvik,[isa-madar,aktiv-ejjel,szine-barna]).

keret(albert,[isa-albatrosz]).

keret(kristof,[isa-albatrosz]).

2. EGYSZERU SZAKÉRTO RENDSZEREK 37

keret(kelemen,[isa-kuvik]).

keret(tux,[isa-pingvin]).

Itt egy listában szerepelnek a tulajdonság és érték párok. Az adatok megvál-tozásához illoen a lekérdezéshez használt predikátumok is megváltoznak egy ki-csit:

ertek(Keret,Tulajdonsag, Ertek):-keret(Keret,L), member(Tulajdonsag-Ertek,L),!.ertek(Keret,Tulajdonsag,Ertek):-szulo(Keret,OsKeret),ertek(OsKeret,Tulajdonsag,Ertek).szulo(Keret,OsKeret):-keret(Keret,L), member(isa-OsKeret,L).

2.4. Diagnosztika

Tekintsük a következo szabályokat:

1. Ha a motor kap benzint, és motor forog, akkor a gyújtással van probléma.2. Ha a motor nem forog, és a lámpák nem világítanak, akkor az akkumulá-

torral, vagy a kábelekkel van probléma.3. Ha a motor nem forog, de a lámpák világítanak, akkor az önindítóval van

baj.4. Ha a tartályban van benzin, és a karburátorban is, akkor a motor is kap

benzint.

Miért nem indul a kocsink? A szabályokat Prologban a következoképpen fogal-mazhatjuk meg:

problema(gyujtas) :-motor_benzint_kap, motor_forog.

problema(akku_vezetek) :-\+ motor_forog, \+ lampa_vilagit.

problema(onindito) :-\+ motor_forog, lampa_vilagit.

motor_benzint_kap :-tartalyban_benzin, karburatorban_benzin.

A Prologban a\+ a tagadást fejezi ki. (Érdemes óvatosan bánni a tagadással, mertnem teljesen fedi a valódi tagadást!) Ha a ragadozó madarak adatbázisához hason-lóan megadnánk, hogy mi igaz, s mi nem, aproblema(X) kérdésre megkapnaka választ. (Pontosabban aset_prolog_flag(unknown,fail) beállítást

38 IV. PROLOG

még el kellene végezni a kérdés feltevése elott.) Egy méretesebb adatbázis eseténkényelmetlen minden feltételt elore tesztelni. Hagyjuk a munkát a felhasználóra, scsak a szükséges kérdéseket tegyük fel! Ezzel az elobbi programrészlet is megvál-tozik.

problema(gyujtas) :-motor_benzint_kap,kerdez(’Forog a motor’, igen).

problema(akku_vezetek) :-kerdez(’Forog a motor’, nem),kerdez(’Vilagit a lampa’, nem).

problema(onindito) :-kerdez(’Forog a motor’, nem),kerdez(’Vilagit a lampa’, igen).

motor_benzint_kap :-kerdez(’Van a tartályban benzin’, igen),kerdez(’Van a karburátorban benzin’, igen).

A kerdez predikátum hozzáadásával az elozo program a Prolog tagadása megk-erülheto. Ha csak simán bekérnénk a választ a billentyuzetrol, akkor újra és újrameg kellene válaszolni ugyanazokat a kérdéseket. Épp ezért bevezetjük azismerpredikátumot, amely tárolja a kérdésekhez tartozó válaszokat. Ezután ha egyúj kerdést felteszünk, eloször azt vizsgáljuk meg, hogy a rendszer ismeri már aválaszt vagy sem. Ha igen, akkor már csak az a kérdés, hogy a válasz, és vártválasz megegyezik-e. Ha nem, akkor ki kell irni a kérdést (write), és be kell kérnia választ (read).

kerdez(Mondat,Kerdes):-ismer(Mondat,Valasz),!,Kerdes=Valasz.

kerdez(Mondat,Kerdes):-write(Mondat),write(’? ’),read(Valasz),asserta(ismer(Mondat, Valasz)), Kerdes=Valasz.

A program használata elott ne felejtsük el beállítani azunknown jelzot!

2.5. Osztályozás

Az elozo feladatnál kicsit bonyolultabb példát vizsgálunk meg. Állatokat osz-tályozunk a tulajdonságaik szerint. A feltett kérdésekre adott válaszokat itt istároljuk.

kezd :-feltetel(Allat),write(’Ugy vélem, hogy a keresett állat ’),

2. EGYSZERU SZAKÉRTO RENDSZEREK 39

write(Allat), nl, torol.

A program indítása akezd predikátummal történik. Ez a predikátum kiválasztegy állatot, s próbál megbizonyosodni, hogy valóban arról az állatról van szó. Haez sikeres volt, akkor kész vagyunk, felesleges más állattal foglalkozni, s kiírhatjuka tippet.

feltetel(gepard) :- gepard, !.feltetel(tigris) :- tigris, !.feltetel(zsiraf) :- zsiraf, !.feltetel(zebra) :- zebra, !.feltetel(strucc) :- strucc, !.feltetel(pingvin) :- pingvin, !.feltetel(albatrosz) :- albatrosz, !.feltetel(’nem is létezik’).

Ha egyik állatra sem illenek a válaszok, akkor az utolsó, feltétel nélküli esetrolvan szó. A továbbiakban felsoroljuk, hogy az adott állatoknak melyek a jellemzovonásai.

gepard :-emlos, ragadozo, ellenoriz(’homokszínu a sz ore’),ellenoriz(’sötét pöttyei vannak’).

tigris :-emlos, ragadozo, ellenoriz(’homokszínu a sz ore’),ellenoriz(’fekete csíkos’).

zsiraf :- patas, ellenoriz(’hosszú nyaka van’),ellenoriz(’hosszú lábai vannak’).

zebra :- patas, ellenoriz(’fekete csíkos’).strucc :-

madar, ellenoriz(’nem repül’),ellenoriz(’hosszú nyaka van’).

pingvin :-madar, ellenoriz(’nem repül’),ellenoriz(’úszik’),ellenoriz(’fekete-fehér színu’).

albatrosz :- madar,ellenoriz(’fekete-fehér színu’),ellenoriz(’jól repül’).

Viszont nem részleteztük a nagyobb rendszertani egységeket. Ezeket felesleges lettvolna felsorolni minden egyes állatnál, egy helyen írjuk le ezeket. Az itt felsorolttulajdonságok elegendok, s nem szükségesek. Ezért ha valamely állatot szor borít,

40 IV. PROLOG

az már elegendo ahhoz, hogy emlos legyen, de ez nem szükséges feltétel (lásdbálna, denevér). Ezért szerepeltetünk további elégséges feltételeket is:emlos :- ellenoriz(’sz or borítja’), !.emlos :- ellenoriz(’tejet ad’).madar :- ellenoriz(’tolla van’), !.madar :-

ellenoriz(’repül’),ellenoriz(’tojással szaporodik’).

ragadozo :- ellenoriz(’húst eszik’), !.ragadozo :- ellenoriz(’hegyes fogai vannak’),

ellenoriz(’karmai vannak’),ellenoriz(’el ore néznek a szemei’).

patas :- emlos, ellenoriz(’patái vannak’), !.patas :- emlos, ellenoriz(’rágófoai vannak’).

A hátralevo programrész már tisztán technikai részlet. Két predikátum tárolja,hogy mely kérdésekre adtunk igen, illetve nem válaszokat. Ha az adott kérdésmég sehol nem szerepel, akkor a gép rákérdez a felhasználóra, s tárolja a válaszát.A töröl predikátum meg törölni fogja a kérdések végén a válaszokat.

kerdez(Kerdes) :-write(’Igaz az állatra az, hogy ’),write(Kerdes), write(’? ’),read(Valasz), nl,( (Valasz == igen ; Valasz == i) ->

assert(igaz(Kerdes)) ;assert(hamis(Kerdes)), fail).

:- dynamic igaz/1,hamis/1.ellenoriz(S) :-

(igaz(S) -> true ;(hamis(S) -> fail ;kerdez(S))).

torol :- retract(igaz(_)),fail.torol :- retract(hamis(_)),fail.torol.

V. fejezet

CLIPS

A CLIPS rendszer a nevét aC Language Integrated Production Systemkife-jezés rövidítéseként kapta. Már a névbol is több dologra következtethetünk: aproduction system utal a ha-akkor szabályokra, tehát ez a rendszer nem más mintegy szabályokon alapuló szakérto rendszer; a C nyelv pedig arra utal, hogy a rend-szert a NASA valamikor C-ben kezdte el fejleszteni, s jelenleg többek között ebbena formában is hozzáférhetünk a programhoz. Ennek megfeleloen ezt az ingyenesrendszert szinte minden operációs rendszeren futtathatjuk. Épp ezért ez az ál-talános program a mai Windowsos programokhoz képest kicsit fapadosnak tunik,de azért igen jól használható.

1. Ki Csipike?

Ugorjunk egybol mindennek a közepébe! A korábban már szereplo felada-tot oldassuk meg ezzel a rendszerrel. Természetesen ehhez a feladatot át kellalakítani a program szájíze szerint. Nem véletlenül rímel a CLIPS a LISP-re:a LISP-re jellemzo írásmódban kell a tényeinket, szabályainkat megfogalmazni.Ez azt is jelenti, hogy rengeteg zárójelet kell használnunk. Azt hogyCsipikeverébazt úgy is írhatjuk, hogy(Csipike vereb) , (vereb Csipike) vagyakár(Csipike egy vereb) . (A program szövegében nem érdemes ékezetesbetuket használni.) 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 egytulajdonságot kell leírni, akkor a reláció vagy tulajdonság elnevezése kerül azelso helyre, s ezt követik az objektumok elnevezései.) Ezt a tényt a rendszer tu-domására kell hozni. A Prologhoz hasonlóan a rendszer adatbázisához azassertutasítással tudunk új dolgokat hozzáadni, s aretract utasítással tudunk on-nan valamit törölni. Tehát a CLIPS programját elindítva az(assert (verebCsipike)) hatására veszi tudomásul ezt a tényt a rendszer. Miután több ilyentényt is a rendszer tudomására hoztunk, a(facts) utasítással tudjuk lekérdeznia rendszer által ismert tényeket. A tények elott álló számok azért lényegesek, mert

41

42 V. CLIPS

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 elsoként megadott tényt.

A program mukö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 agép által generált tényeket. Több száz tény esetén reménytelen feladat egyenkéntkitörölni ezeket a tényeket. Épp ezért létrehozhatjuk a kiinduló tények csoportjáta deffacts kulcsszóval, melyet a tények elnevezése követ, s majd a tényekmaguk. Ezek a csoportok begépelhetok az elobbi módon, vagy akár egy külsofájlból is beolvashatóak. (Ez utóbbi természetesen sokkal kényelmesebb.) ACsipikére és a többiekre jellemzo tények acsipike.clp fáljban találhatóak,ezeket a(load "csipike.clp") paranccsal lehet betölteni. Ha valaki arendszeren belül definiálja a kiinduló tényeket vagy szabályokat, akkor asaveparanccsal mentheti ki. Ez nem menti a generált tényeket. Azokat asave-factssegítségével menthetjük, és aload-facts segítségével tölthetjük vissza.

A szabályok betöltése még nem elegendo ahhoz, hogy egybol használatba ve-gyük a tényeket. Ehhez elobb ki kell adni a(reset) parancsot, amely aktivizáljaa kiinduló tényeinket, illetve még létrehoz egy(initial-fact) tényt is. Ez utóbbitényt felhasználva bemutatjuk aHello world! programot, mellyel sok program-nyelv ismertetése elkezdodik. Ez a program a CLIPS-ben a következoképpen nézki:

(defrule hello "Hello world"(initial-fact)=>(printout t "Hello" crlf)

)

Ez a program nem más mint egy szabály. Elso látásra csak a nyíl tunik ismeros-nek. Az elotte és a mögötte álló sor alkotja a magát a szabályt. Elottük a sza-bályt definiáló kulcsszó, a szabály elnevezése (hello), s idézojelek között egyrövidebb megjegyzés található, amely emlékeztetni hivatott a program íróját, vagyfelhasználóját arra, hogy mi is volt a szabály célja. A nyíl elott a feltétel, vagy afeltételek szerepelnek. Ha ez vagy ezek mind igazak lesznek, akkor végrehajtódika nyíl mögötti muveletlista. Ez most egyetlen muveletbol áll, s abban pedig egykiírás szerepel. At arra szolgál, hogy a képernyore írjon a rendszer, acrlf pediga soremelésrol gondoskodik.

A szabályok a Prologban sem tartalmazták kiírva a kvantorokat, de oda kellettvolna gondolni azokat. Itt szintén ugyanaz a helyzet. AMinden veréb madár.szabály formalizáltja a

∀x(v(x) ⊃ m(x))

2. SZÜLETÉSNAP 43

volt. Innen elso lépésben el kell hagyni a kvantort, a másodikban a⊃ jel helyetta=> jeleket kell írni. Harmadikként a változók a CLIPS-ben kérdojellel kezdod-nek. Ezzel eljutottunk a(vereb ?x) => (madar ?x) alakhoz, ami mármajdnem jó, csak meg kell mondani, hogy mit szeretnénk csinálni a következ-ményben szereplo ténnyel. Esetünkben a rendszer tudomására hozni, azaz alkal-mazni rá az assert parancsot. 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övetkezoképpen néz ki:

(defrule vereb-madar "Minden veréb madár"(vereb ?x)=>(assert (madar ?x))

)

Az eredeti feladatban szereplo összes szabály hasonlóképpen írható fel.Érdemes ezt a tagozást megtartani, mert így a késobbiekben is jól olvashatóak

lesznek a szabályaink. Ha egy másik szabály is ugyanezt a nevet kapja, akkor azmajd felülírja ezt.

Ha már adott az összes szabály meg a tények, akkor a(run) paranccsal in-dítható el a következtetés. (Ha nem akarjuk indítani, csak látni, hogy hogyanindulna el az egész, akkor azagenda parancsot kell használni.) Mindebbolpersze nem látunk semmit. Afactsparancs kiadásával láthatjuk, hogy mirol bi-zonyíthatjuk be a tények és szabályok alapján, hogy valóban állat. Persze eztis lehet automatizálni. Készíthetünk egy olyan szabályt, amely kiírja az állatokneveit.

(defrule allathirdetes "Kiirjuk az állatok neveit"(allat ?x)=>(printout t ?x " állat." crlf)

)

2. Születésnap

Készítsünk egy kisebb adatbázist, melyben személyek nevei és életkoruk sze-repelnek, például a következo alakú tényekként:(szemely Elek 5) . Eztérdemes egy külön fájlba menteni. Lesz még egy más formájú tényünk is, a-mely azt jelzi, hogy az adott személynek ma születésnapja van:(szuletesnapElek) . Az ilyen adatokat majd a futtatáskor visszük be a rendszerbe a már ismert

44 V. CLIPS

assertparanccsal. Természetesen ha valakinek születésnapja van, akkorot fel kellköszönteni. Ezt egy szabállyal oldjuk meg.

(defrule szulinap "szulinapi koszonto"(szemely ?ki ?ev)(szuletesnap ?ki)=>(printout t "Boldog szuletesnapot " ?ki "!" crlf)

)

Itt két feltétel szerepel, s akárcsak a Prologban, itt iséskapcsolatot értünk köztük.Azaz ha találunk egy személy, akinek a nevét a?ki elnevezésu, a korát a?evel-nevezésu változóban tároljuk, s pont ennek a személynek ma születésnapja van,akkor kiírjuk a köszöntést a képernyore. Hiába is indítjuk el többször a programot,a kiírás csak egyszer történik meg. Ez azért van, mert egy szabályt adott tényekrea rendszer csak egyszer hajt végre.

Azt tudjuk, hogy a születésnappal mindenki egy évvel öregebb lesz. Lássuk,ezt hogyan oldhatjuk meg!

(defrule szulinap "Valaki egy evvel oregebb lett"(szemely ?ki ?ev)(szuletesnap ?ki)=>(printout t ?ki " "(+ 1 ?ev) " eves." crlf)

)

Az elozo szabályt cseréljük le ezzel! Ami újdonság a(+ 1 ?ev) kifejezés.Részeiben mindenki érti, hogy mirol is van szó. Ismert az összeadás jele, a egyesis, és a kort tároló változó is. A Lispben, s ezért itt is az aritmetikai kifejezéseknél amuveleti jel (esetünkben az összedás) kerül elore, s ezt követik az argumentumok,s nem fogunk kiírni mást, mint a személy korábbi életkoránál eggyel nagyobb szá-mot. Persze ennek a tényekben semmi eredménye nem lesz, ott még mindig akorábbi életkor fog szerepelni. Jó lenne ezt átírni! A tény módosítását egyszeruenoldjuk meg, töröljük a régit, s egy újat adunk meg helyette.

(defrule szulinap "Valaki egy evvel oregebb lett"?teny1 <- (szemely ?ki ?ev)?teny2 <- (szuletesnap ?ki)=>(retract ?teny1)(retract ?teny2)(printout t "Boldog szuletesnapot " ?ki "!" crlf)(assert (szemely ?ki (+ ?ev 1)) )

)

3. RENDEZETT ÉS NEM RENDEZETT TÉNYEK 45

Korábban az már szerepelt, hogy ha egy tényt törölni szeretnénk, akkor az azonosí-tóját meg kell adnunk. Itt a visszafele mutató nyíl pont ezt az azonosító számot írjabe a?teny1és?teny2változókba. Ezek után már törölhetjük a tényeket, kiírhatjukaz üdvözletet, s rögzíthetjük az új életkort.

3. Rendezett és nem rendezett tények

Az eddig használt tényeinknél a sorrendnek szerepe volt. Ha azt, hogy Vil-mos lott egy fácánt,(lott Vilmos facan) formában írjuk, akkor a(lottfacan Vilmos) jelentése csak az lehet, hogy egy fácán lelotte Vilmost. Néhanehézkes ezt a sorrendet megtartani, foleg akkor, ha egyes tulajdonságok hiány-oznak. Éppen ezért minden értéket a tulajdonság elnevezésével kell szerepeltetni.Azaz az adatok megadása hasonló a II.3.3 fejezetben szerepeltetett keretrendsze-réhez, csupán az osztályok hiányoznak. Az ott szereplo nyulat a következoképpenírhatnánk le itt:

(nyul (tipus emlos) (ful hosszu)(mozgas ugral) (lab 4))

De ugyanezt értjük a

(nyul (mozgas ugral) (lab 4)(ful hosszu) (tipus emlos))

tényen is. Az egyes tulajdonságok sorrendje nem számít.Persze a rendszernek valamit tudnia kell az ilyen tények szerkezetérol is, mert

mint az elobb is utaltam rá, nem mindig szerepel minden tulajdonság. A rend-szernek adeftemplatesegítségével adhatjuk meg a tények típusait. Például azelobbi születésnapi példában két tulajdonság, a név és az életkor szerepelt. Ezta következoképpen definiáljuk:

(deftemplate szemely(slot nev)(slot kor)

)

Ezek után tények például a(szemely (nev Elek)(kor 5)) , (szemely(kor 18) (nev Eva)) , és a(szemely (nev Bela)) is. A tényeketkilistázva láthatjuk, hogy az általunk nem szerepeltetett tulajdonság is megjelenik,de az értékenil lesz. Méretesebb tényhalmaznál nehéz észrevenni, ha valamelyténnyel probléma van, el lett gépelve, stb. Épp ezért a hibás tényeket kiszurhetjük,ha típusokat vezetünk be. Például a név az egy szöveg, míg az életkor min-denképpen egy szám, ami rendszerint egész. Ezt szintén adeftemplaterészbenkell megadni.

46 V. CLIPS

(deftemplate szemely(slot nev (type STRING))(slot kor (type INTEGER))

)

Megadhatjuk továbbá, hogy milyen értékeket fogadunk el:

(slot neme (allowed-symbols ferfi no))

vagy hogy milyen értékhatárokon belül fogadunk el értékeket:

(slot osztalyzat (range 1 5))

Továbbá adefault kulcsszó után szerepeltethetjük az alapértelemezett értéke-ket, melyet az adott tulajdonság felvesz, ha nem adjuk meg konkrétan az értékét.

A CLIPS kézikönyvében teljes részletességben szerepel, hogy mi mindenthasználhatunk itt. Egyelore nekünk ennyi elég. (Lehetoség van arra is, hogy egytulajdonságnak ne csak egy értéke lehessen, hanem több is. Ekkor amultislotelnevezést kell használni, s minden értékre külön változót lehet bevezetni, vagy adollár-kérdojellel kezdodo változó illeszkedik mindre.)

Miután a születésnapi tényeket megváltoztattuk, a szabályoknak is módosul-niuk kell:

(defrule szulinap "Valaki egy evvel oregebb lett"?teny1 <- (szemely (nev ?ki) (kor ?ev))?teny2 <- (szuletesnap ?ki)=>(retract ?teny1)(retract ?teny2)(printout t "Boldog szuletesnapot " ?ki "!" crlf)(assert (szemely (nev ?ki) (kor (+ ?ev 1))) )

)

Készítse el azt a szabályt, mely születésnap esetén például azt írja ki, hogyÉva ma18 éves lett!

A nem rendezett adatoknál nincs szükség a töröl-újraír párosra, használható amódosítás is:

(defrule szulinap "Valaki egy evvel oregebb lett"?teny1 <- (szemely (nev ?ki) (kor ?ev))?teny2 <- (szuletesnap ?ki)=>(retract ?teny2)(printout t "Boldog szuletesnapot " ?ki "!" crlf)(modify ?teny2 (kor (+ ?ev 1)) )

)

3. RENDEZETT ÉS NEM RENDEZETT TÉNYEK 47

Ez a módosítás akkor hasznos, ha a tényeink szerkezete ennél jóval bonyolultabb.Ugyanebben az esetben aduplicate segítségével készíthetünk egy másolatot, smegadhatjuk, hogy mely tulajdonságoknak lesz más értéke, mint az eredeti.

Speciális eseteket nem olyan egyszeru leírni, de sokat segíthetnek a különfélefeltételek. Ha valamiért a 30 éveseket nem kívánjuk felköszönteni (emlékeztetniaz öregedésre), akkor a szabály a következoképpen néz ki:

(defrule szulinap(szemely (nev ?ki) (kor ~30))?teny <- (szuletesnap ?ki)=>(retract ?teny)(printout t "Boldog szuletesnapot "

?ki "!" crlf) )

A hullámvonal ( ) a tagadást jelzi. Hasonlóképpen a függoleges vonal avagykapcsolatnak felel meg, azaz a felsorolt nevezetes életkorokban speciális üdvözlésjár.

(defrule szulinap(szemely (nev ?ki) (kor 50|60|70|75|80))?teny <- (szuletesnap ?ki)=>(retract ?teny)(printout t "Nagyon boldog szuletesnapot "

?ki "!" crlf) )

Ha nem csak arra vagyunk kíváncsiak, hogy valamely objektum adott tulajdon-ságának az értéke megegyezik-e valamilyen általunk megadott konkrét értékkel,vagy éppen az általunk megadott értéktol különbözik, akkor az objektum adottértékét egy változóba menthetjük. Például nem elég nekünk az, hogy a személynem30 éves, hanem arra is kiváncsiak vagyunk, hogy pontosan hány éves, akkora (kor ?ev&˜30) feltételt használva az életkor a?ev változóba kerül, feltéveha az nem pont30, mert akkor nem illeszkedik. (A& jel azéskapcsolatnak felelmeg.)

Természetesen a változók értékét már a feltételben vizsgálni lehet:

(defrule szulinap(szemely (nev ?ki) (kor ?ev))?teny <- (szuletesnap ?ki)(test (< ?ev 18) )=>(retract ?teny)(printout t "Boldog szuletesnapot " ?ki "!" crlf)

48 V. CLIPS

)

Most azt vizsgáltuk meg, hogy fiatalkorú-e az szóban forgó személy. Ez a vizs-gálat elhelyezheto lenne a kettovel korábbi sorban egy és kapcsolat segítségével(?es&:(< ?kor 18) ), de talán így jobban értheto. Itt is, és egyéb tesztekbenlehet a logikai összekötojeleket használni, természetesen a CLIPS szájíze szerint(or , and , not , exists és forall ). Ha tuz-vagybombariadó van az adottépületben, akkor azt ki kell üríteni:

(defrule veszhelyzet-kiurites(or (riado (tipusa tuz) (helye ?epulet))

(riado (tipusa bomba) (helye ?epulet)) )=>(printout t "Uritse ki a " ?epulet "epuletet!" crlf)

Ha valahol vészhelyzet van, ki kell hívni a tuzoltókat:

(defrule veszhelyzet-tuzolto(exists (riado (tipusa tuz|bomba) ) )=>(printout t "Hivja a tuzoltokat!" crlf)

Ha minden olyan épület ki lett ürítve, ahol vészhelyzet van, akkor ezt nyugtázzuk:

(defrule veszhelyzet-kiurites-vege(forall (riado (tipusa tuz|bomba) (helye ?epulet))

(kiuritve ?epulet) )=>(printout t "Kiurites befelyezve!" crlf)

Egyre több és több szabályunk van. Arules parancs kiadásával megkaphat-juk ezek listáját. Pontosabban ez csak a szabályok neveinek listáját adja meg, adottszabályt appdefrule paranccsal irathatunk ki:(ppdefrule szulinap) .

A read , readline és abind segítségével külso inputot is felhasznál-hatunk szabályainkban, ám erre eloreláthatólag nekünk nem lesz szükségünk afélév során.

Vannak esetek, amikor mi szeretnénk megadni, hogy a sok lehetséges sza-bály közül melyikkel kezdjünk. Ha például találkozunk valakivel, akkor rend-szerint köszönünk neki. Ha születésnapja van, akkor viszont felköszöntjük. Asalience kulcsszó s utána egy érték megadásával rangsorolhatjuk a szabályainkvégrehajtását (ennek az értéknek−10000 és10000 közé kell esnie):

(defrule koszon(declare (salience 10))(szemely (nev ?nev))=>

4. FELADATOK 49

(printout t "Jó napot, ", ?nev "!" crlf))(defrule felkoszont

(declare (salience 20))(szemely (nev ?nev))(szuletesnap ?nev)=>(printout t "Boldog szuletesnapot, ", ?nev "!" crlf)

)

Ha a programunk nem úgy muködik, ahogy mi szeretnénk, akkor a következ-tetés folyamata megszakítható aset-break utasítással. Ehhez azt a szabálytkell megadni argumentumként, amelyet már nem kívánunk végrehajtani. Ekkorkiirathatjuk az aktuális tényeket, szabályokat.

4. Feladatok

4.1. Autójavítás

A következoket kell tudnunk:

– Ha rossz az akkumulátor, vagy a kipufogó, akkor az csak egy kisebbprobléma.

– Ha rossz a sebességváltó, vagy maga a motor, az már egy komoly prob-léma.

– Ha már öreg az autónk, s komoly a probléma, akkor el kell adni.– Ha az autó fiatal, s komoly a probléma, meg kell javíttatni.– Ha öreg az autó, s csak egy kisebb probléma van vele, meg kell javíttatni.

Írjon egy CLIPS programot, amely tartalmazza a megfelelo szabályokat! Pró-bálja ki több esetben is. Jól muködik a program? Nem hiányzik valamilyen sza-bály az eredeti kiírásból? Próbálja a programban a szabályok számát csökkenteni alogikai összekötojelek segítségével! Próbálja ki a szabályait egy olyan öreg kocsiesetén, melynek rossz az akkumulátora és a motorja! Használja a szabályok rang-sorolását, hogy életszeru legyen a megoldás.

4.2. Rendorségi nyilvántartás

Készítsen egy nyilvántartást személyekrol külso jegyei alapján (név, életkor,nem, magasság, testsúly, haj szine és formája, szemszín, különös ismertetojel).Definiáljon hozzájuk megfelelo típust! (Például szoke, vörös, barna és fekete ha-jszín.) Készítsen két szabályt mely csak a férfiakat, és csak a noket sorolja fel.

50 V. CLIPS

Készítse el ezeket a szabályokat két különbözo módon is! Írjon olyan szabályt,mely a rendorség által keresett 35-40 éves, magas, vékony testalkatú, sötéthajúelkövetohöz kiírja az adatbázisban szereplo ilyen tulajdonságú személyeket!

4.3. Sör

Vegye figyelembe a következo szabályokat: kiszolgálható a személy az

– Egyesült Államokban, ha elmúlt 21,– Kanadában, ha elmúlt 18,– Németországban, ha elmúlt 16, és– Írországban, (születésétol kezdve) ha Guinnesst iszik.

Adjon meg olyan szabályt, amely eldönti, hogy a tényben szereplo személy azadott államban megihatja-e az adott fajtájú sört! Például

(inna (nev Alfonz) (kor 22)(hely Kanada) (fajta Kobanyai) )

4.4. Házasságközvetíto

Definiáljon egy mintát, mely tartalmazza a becenevet, kort, nemet, magassá-got, hajszínt, jövedelmi viszonyt, s töltse fel legalább tíz személy adataival. Írjonolyan szabályokat, melyek kikeresik a szoke hölgyeket és a gazdag urakat. Ad-jon meg feltételeket a leendo házastárssal kapcsolatban, s keresse meg az olyanpárokat, melyeknél a feltételek az adottságokkal megegyeznek.

5. Keretrendszer

Egy osztály a CLIPS-ben egy minta, amely leírja az ide tartozó elemek/ob-jektumok jellemzo tulajdonságait. Minden egyes osztály a valódi világ, vagy azáltalunk modellezni kívánt világ egy részének absztrakciója. Absztrakt módon ír-juk le a valódi világ dolgait, és modellezendo világot osztályok rendszerekéntkéntfogjunk fel. Az elobbiekben láthattuk, hogy a CLIPS lehetoséget teremt arra, hogyvédjük adatainkat a hibáktól, például arange, allowed-numbers, stb. segítégével.Hasonló védelem létezik az osztályok esetén is, melyeket méretesebb programokesetén érdemes használni,

5.1. Osztályok definiálása

Lássunk egy példát osztályokra, s egyben adataink védelmére is! Definiáljukaz emberek (PERSON) osztályt, melynek alosztálya lesz a férfiak (MALE) és nok

5. KERETRENDSZER 51

(FEMALE) osztálya. A nok osztályának alosztálya lesz a lányok (GIRL) és a höl-gyek (WOMAN) osztálya. Hasonlóképpen a férfiak osztály alosztályai lesznek afiúk (BOY) és az urak (MAN) osztályok. Miután olyan ember, aki nem is férfiés nem is no, nem létezik, így az emberek osztálynak nem lesz, sot nem is lehetegyede. Ezt majd arole abstract jelzi. Hasonlóképpen minden no vagylány vagy hölgy, ezért a no osztálynak sem lesznek egyedei, és a férfi osztály-nak sem. A lány, hölgy, fiú és úr osztálynak már lehetnek egyedei, ezt aroleconcrete jelzi. Az adott személy neme nem változik meg, ezért asex tulajdon-ságnál aaccess read-only szerepel, azaz ez az érték csak olvasható, nemváltoztatható meg. Asource composite segítségével ezt tovább örökítjükaz alosztályok felé. A no és férfi osztálynál már megadjuk a konkrét értéküketis, melyet felvesznek akkor is, ha semmi ilyen információt nem adunk meg azegyedek definíciójakor. Az emberek életkorára jellemzo tulajdonság természete-sen egy számot jelöl, s hogy ne kelljen minden osztály esetén ugyanazt definiálni,hanem egy közös definíciót használhassunk, lesz szükségünk avisibilitypublic megadására, a legbovebb, azaz az ember osztály definiálásánál. Ezeketa tulajdonságokat öröklik az alosztályok, melyekben beállítjuk majd az alapértel-mezett értékeket, s a határokat. Lássuk a definíciókat:

(defclass PERSON (is-a USER)(role abstract)(slot sex (access read-only) (storage shared))(slot age (type NUMBER) (visibility public)) )

(defclass FEMALE (is-a PERSON)(role abstract)(slot sex (source composite) (default female)) )

(defclass MALE (is-a PERSON)(role abstract)(slot sex (source composite) (default male)) )

(defclass GIRL (is-a FEMALE)(role concrete)(slot age (source composite)

(default 4) (range 0.0 17.9)) )(defclass WOMAN (is-a FEMALE)

(role concrete)(slot age (source composite)

(default 25) (range 18.0 120.0)) )(defclass BOY (is-a MALE)

(role concrete)(slot age (source composite)

52 V. CLIPS

(default 4) (range 0.0 17.9)) )(defclass MAN (is-a MALE)

(role concrete)(slot age (source composite)

(default 25) (range 18.0 120.0)) )

(definstances PEOPLE(Peter of MAN (age 19))(Ferenc of MAN (age 83))(Katalin of WOMAN (age 19)) (Eva of WOMAN)(Jani of BOY (age 6)) (Feri of BOY)(Csilla of GIRL (age 6)) (Dia of GIRL)

)

Ahogy látjuk az osztálydefiníció adefclass paranccsal történik, ahol az osz-tály (a hagyományokat követve nagybetus) elnevezése után, azis-a kulcsszótkövetoen találjuk annak az osztálynak az nevét, melynek leszármazottja.

Majd a különbözo most nem részletezett opciók beállítása után az egyes tulaj-donságokat lehet megadni. Az egyedek definiálása történhetne a(makeinstancePeter of MAN (age 19) ) ,. . . formában is, de inkább a példában szereplomódszert javaslom.

5.2. Üzenetek

Az objektumorientáltság egyik jellemzoje az, hogy a különféle objektumoküzenetek útján érhetoek el. Üzenetek segítségével olvashatunk le bizonyos érté-keket, pontosabban megkérhetjük az objektumot, hogy küldje vissza az értéket.Hasonlóképpen megkérhetjük, hogy állítsa be valamely tulajdonságot az általunkmegadott értékre.

Miután az általunk definiált osztályok a USER osztály alosztályai, s a USERosztály ismeri aprint üzenetet, kérjük meg Ferit, hogy mutatkozzon be:(send[Feri] print) .

[Feri] of BOY(sex male)(age 4)

Hasonlóképpen megkérhetnénk Ferit, hogy törölje ki magát az adatbázisunkból:

(send [Feri] delete)

Mint láttuk a makeinstancesegítségével hozhatunk létre új egyedeket. Ha olyannevet választunk, amely már szerepelt, akkor a régi egyed törlodik, s a helyételfoglalja az újonnan megadott.

5. KERETRENDSZER 53

Ha másképp nem rendelkezünk, minden egyes tulajdonsághoz generálódik egyget- ésput- üzenet. Az elsovel a tulajdonság értéke olvasható le, a másikkalpedig beállíthatjuk, például(send [Feri] get-age) és (send [Feri]put-age female) . Ahogy várható volt, a második utasításra hibaüzenetet ka-punk, mert csak olvasható tulajdonságként definiáltuk. (Természetesen, ha valami-ért nem tetszik a gép által definiált tulajdonság, akkor magunk is írhatunk másikathelyette, s azoverride-message segítségével a vezérlést erre adhatjuk.) Azüzenetek helyett magunk is megváltoztathatjuk az egyes tulajdonságok értékét amodify-instance utasítás segítségével.

5.3. Egyedek kezelése

Lekérdezhetjük, hogy szerepelnek-e egyedeink között valamilyen tulajdon-ságúak. Például keressünk egy30 évesnél idosebb férfit:

(find-instance ( (?ferfi MAN) ) ( > ?ferfi:age 30) )

Kereshetünk olyan emberpárokat is, melyek ugyanolyan idosek:

(find-instance ( (?ferfi MAN) (?no WOMAN) )(= ?ferfi:age ?no:age) )

Az elobbi példákban afind-instance lecserélheto find-all-instances -re is, s ekkor az összes párost megkapjuk.

A do-for-instance és ado-for-all-instances utasítással az a-dott feltételeknek megfelelo egyedekre az általunk megadott utasításokat hajthat-juk végre.

Természetesen a korábban megismert szabályok egy kis módosítással a tényekhelyett az objektumokra is alkalmazhatóak:

(defrule kicsi-vagy-meg?valaki <- (object (is-a GIRL)(age ?kor))(test (< ?kor 6))=>(printout t (instance-name ?valaki)

" meg nem mehet iskolaba!" crlf) )

Mint látható, itt egy adott típusú objektumot kell keresni, s ha az objektum nevétszeretnénk használni, akkor azinstance-name függvényt kell alkalmazni.

5.4. Üzenetkezelo függvények

Elofordulnak olyan esetek, amikor egy tulajdonság más tulajdonságokból kö-vetkezik, onnan származtatható. Egy téglalap területe például az oldalai hosszábólkiszámítható. Épp ezért nem érdemes a területet tulajdonságként tárolni, hanem

54 V. CLIPS

ha épp szükség van az értékére, a két oldal hossza alapján kell kiszámolni. Ekkorha valamiért változik az oldalhossz, nem lesznek ellentmondó adataink. Habárkiindulhatnánk egyenesen a téglalapból, gyakoroljuk egy kicsit az osztályokat:

(defclass SOKSZOG (is-a USER)(role abstract)(slot oldal (default 4)) )

(defclass HAROMSZOG (is-a SOKSZOG)(role concrete)(slot oldal (default 3)) )

(defclass TEGLALAP (is-a SOKSZOG)(role concrete)(slot a (type NUMBER) (default 2))(slot b (type NUMBER) (default 3))(message-handler terulet) )

(definstances ALAKZAT(t1 of TEGLALAP (a 3) (b 4))(h1 of HAROMSZOG) )

Az szerepel a programban, hogy egy függvény számolja ki a területet. Hogyanmuködik ez? Szorozni kell, megpedig a szóban forgó téglalap két oldalhosszát.Objektum-orientált programozásban a szóban forgó egyedre rendszerint aselfelnevezésu változóval hivatkoznak. Nekünk is így kell tennünk, de nem a tégla-lapra, hanem az oldalára hivatkozunk, így lesz belole?self:a .

(defmessage-handler TEGLALAP terulet ()(* ?self:a ?self:b) )

(defmessage-handler TEGLALAP kiiras ()(printout t "A teglalap terulete "

(send ?self terulet) crlf) )(defmessage-handler USER mi-vagy ()

(printout t "En egy " (class ?self)" vagyok." crlf) )

Amint látható, készítettünk még egy másik függvényt is, amely nem a konkrétszámot adja vissza, hanem szövegesen válaszol. A harmadik függvény pedig akkorlesz érdekes, ha valaki kibovíti ezt a szakérto rendszert a többi síkidom leírásával,s arra vagyunk kiváncsiak, hogy egy adott egyed éppen milyen típusú.

A hagyományos muveletek mellé definiálhatunk újabb függvényeket, melyeka fo muvelet elott, vagy után hajtódnak végre.

VI. fejezet

Szakérto rendszerek fejlesztése

Ebben a fejezetben áttekintjük, egy adott szakérto rendszer kifejlesztéséneklépéseit. Maga a folyamat hat szakaszból áll, melyek a következok:

(1) a projekt kezdete,(2) a rendszer analízise és tervezése,(3) gyors prototípus,(4) rendszerfejlesztés,(5) alkalmazás és(6) utómunkálatok.

1. A projekt kezdete

Valakinek a fejében felmerül, hogy egy adott területen milyen jó lenne a szá-mítógép segítségét igénybe venni. Ha ez egy nagyobb lélegzetvételu projekt, akkora költségek is tekintélyesek lesznek, ezért alaposan meg kell tervezni mindent.

1.1. Probléma megfogalmazása, igények felmérése

A számítógéppel segítendo problémáról egy világos, értheto beszámolót kellírni, amely minden segíto információt tartalmaz. Készíteni kell egy hivatalos listátaz igényekrol, hogy a probléma értheto legyen.

1.2. Alternatív megoldások vizsgálata

Fel kell mérni azt is, hogy egy saját rendszer kifejlesztése helyett megfelelo-eegy kereskedelemben kapható szoftvercsomag. Ehhez igénybe kell venni az adottterület szakértojét, aki megállapíthatja, hogy a szoftver szolgáltatásai elegendoek-e. Számolni kell ezen szoftver honosítási (testreszabási) költségeivel, a felhaszná-lók oktatásával, betanításával.

55

56 VI. SZAKÉRTO RENDSZEREK FEJLESZTÉSE

1.3. Szakérto rendszer megközelítés értékelése

Ahhoz hogy szakérto rendszert lehessen használni az adott területen, az aláb-bak mindegyikének teljesülnie kell:

– A feladat elméleti, s nem gyakorlati tapasztalatokat igényel.– Van legalább egy szakérto, aki vállalkozik a közös munkára.– Ez a szakérto képes mindenki számára érthetoen megfogalmazni a meg-

oldási módszereket.– Ha több szakérto van, akkor meg tudnak egyezni az ismereteiken és a

megoldási módszereiken.– A feladat nem túl bonyolult, jól értheto, világosan definiált, nem változik

gyakran, algoritmussal leírható megoldási módszer nem ismert.– A nem optimális vagy esetleg rossz megoldásai a szakérto rendszernek

korrigálhatóak.– Adatok és példák (esetek) már ismertek.– A feladat megfogalmazásához maximum pár száz fogalom szükséges.

Ha ez mind stimmel, akkor az alábbi pontok alapján dönthetünk a szakérto rend-szer kifejlesztésérol. (Gyakran többször is meg kell vizsgálni az újabb tények,ismeretek alapján, hogy ezek pontok valóban teljesülnek-e)

– A feladat megoldásanagy haszonnaljár. (Ne felejtsük el, hogy a rend-szerfejlesztés sokba kerül, csak akkor érdemes rá költeni, ha visszahozzaaz árát.)

– A szakérto rendszer képes megorizni a szakértok megszerzett tudását, aznem vész el.

– A szakértokre egyszerre több helyen is szükség van. (Ha nincs, feleslegesgéppel helyettesíteni az embert.)

– A szakértore veszélyes környezetben van szükség. (Nem kockáztatjukazt az embert, amelyre már annyit költöttünk.)

– A szakérto használata javítja a termelékenységet, vagy a minoséget. (Hanincs szükség szakértore, akkor szakérto rendszerre sem.)

– A szakérto rendszer használható képzésre.– A szakérto rendszer gyorsabban válaszol, mint szakérto, vagy pontosabb,

következetesebb válaszokat ad.

Ne felejtsük el, a haszonnak meg kell haladnia a kiadásokat!Nézzük mely esetekben javalt a szakérto rendszer!

– A probléma természete szimbólikus (nem számolási probléma) és heu-risztikára épít.

– A feladat nem túl egyszeru és nem is túl bonyolult egy szakérto számára.– A problémának kezelheto a mérete és praktikus értéke van.

1. A PROJEKT KEZDETE 57

1.4. Tanulmányterv

Közgazdasági:Képesek vagyunk elkészíteni?Technikai: Képesek vagyunk elkészíteni?Szervezeti: Ha elkészül, képesek vagyunk bevezetni?

1.5. Költséghatékonysági vizsgálat

Meg kell határozni a projekt életképességét, ami gyakran nagyon bonyolult.Nehéz megjósolni a költségeket és a hasznot, mert itt több minoségi összetevo islehet. A szakérto rendszer meg folyamatosan fejlodik, ezért ezeket a vizsgálatokatújra és újra el kell végezni (elso és második szakasz vége, prototípus elkészülte,kész rendszer beüzemelése, fopróba, azaz az éles alkalmazás elott, használat alattrendszeres idoközönként).

A fejlesztési költségek becsléséhez fel kell mérni (és majd átvizsgálni) a rend-szer lehetoségeit, s meg becsülni az egyes szakaszok idotartamát. A haszon becs-lésénél bizonyos összetevok nem számszerusíthetok, mások nem csak a szakértorendszerhez kapcsolódnak, bizonyos összetevoknek csak hosszú távon ható ered-ményük van, s a szerteágazó következményeket (vevokör, kényelmetlenség, vára-kozási ido, stb) nehéz összesíteni.

1.6. Kérdések a vezetoség számára

– El lehet-e adni az elkészült rendszer más cégek számára is?– Támogatja-e valamilyen információval a vállalatvezetést?– Mennyire zavarja a végfelhasználókat a rendszer, mennyi is milyen kép-

zésre van szükség számukra?– Finanszírozható?– Rendelkezésre állnak a többi eroforrások is?– Vannak-e jogi vagy egyéb korlátozások? (Például nem megengedett adat-

kezelés.)– Ki lesz a fejlesztés vezetoje?

1.7. Fejlesztocsapat megszervezése

Ha a vállalat vezetése is a szakérto rendszer mellett teszi le a voksát, megkell alakítani a fejlesztocsapatot. Ez viszont a folyamatok elorehaladtával változnifog. A szokásos fejlesztokön kívül természetesen mindenképpen szükség van aszakérto(k)re és egy tudásmérnökre. Jó, ha jó kapcsolatot ápolunk a felhasználtprogramok terjesztoivel, és érdemes a leendo felhasználókkal is rendszeres kap-csolatot tartani.

58 VI. SZAKÉRTO RENDSZEREK FEJLESZTÉSE

2. A rendszer analízise és tervezése

Ha megszületett a döntés, itt az ido alaposabban megtervezni a rendszert! Megkell határozni a rendszer lehetoségeit, kapcsolódásait más számítógépes rendsze-rekhez. Meg kell adni a kockázati területeket, a felhasználni kívánt eroforrá-sokat, azok ütemezését, a fejlesztocsoport összetételét, s minden olyan informá-ciót, amely szükséges lehet egy részletesebb tervhez.

Miután ez elkészült, dönteni kell a fejlesztési stratégiáról. A szakérto rendszera felhasználók gépein fog futni, vagy egy központi gépen? Mindenhonnan elérhetoa rendszer, vagy csak speciális helyeken használható? Hogy történjen a fejlesz-tés? Lehet bérelni egy tanácsadó céget, társulni egy egyetemmel, csatlakozni egyágazati konzorciumhoz, de akár fel is lehet vásárolni egy fejlesztocéget.

A szaktudás gyakorlattal szerezheto meg, s szakértokbol ez csak részlegesennyerheto ki. De ki fogja kiválasztani a fejlesztésbe bevont szakértoket, mi alapjánlehet valakit szakértonek tekinteni, mi a helyzet, ha több szakértore is szükség van,és hogyan lehet szakértoket motiválni?

Noha a hagyományos programozási nyelveken is írhatunk szakérto rendsze-reket, sokkal kényelmesebb és egyszerubb egy fejlesztést segíto programmal dol-goznunk. Itt be kell tölteni a szakértobol kinyert tudásbázist jelento szabályokat,s a következteto rendszert futtatni kell a példaproblémákon. Hiba, eltérés eseténjavítani kell a szabályokon, s újra kezdeni elorol. Ha nincs hiba, akkor a fejlesztorendszer megfelelo programjával már használható a is a szakérto rendszer.

A CLIPS-hez hasonló keretprogramok (shell) esetén hasonlóan a mi dolgunk atudásbázis (szabályok) megfogalmazása, míg a keretrendszer tartalmazza az adat-gyujto alrendszert, következteto részt, magyarázó részt, felhasználói felületet, és atudásbázis kezelo (szerkeszto, hibakereso) részt.

Hogy melyiket érdemes választani a sok kereskedelmi illetve ingyenes rend-szer közül? Nehéz a válasz, mert a technológia nagyon gyorsan változik, sokkritériumnak kell megfelelnie a kiválasztott keretrendszernek. Az internet mintmindig, most is segíthet a döntésben.

3. Gyors prototípus

A szakérto rendszerek fejlesztésénél ez egy kritikus pont. Létre kell hozni egyaprócska, de muködo rendszert, amit már lehet tesztelni, finomítani, bovíteni. Aszabályok száma itt még töredéke a teljes rendszerének, de a tudás ábrázolása márvalódi formájában szerepel. Ez a kis rendszer igazolhatja, demonstrálhatja, hogyaz elgondolás helyes volt. Most már ki lehet dolgozni a teljes rendszert.

6. UTÓMUNKÁLATOK 59

4. Rendszerfejlesztés

A rendszerfejlesztésnek megvan a kidolgozott elmélete (életciklus megköze-lítés), a fejlesztok sajnos ettol gyakran eltérnek, inkább a prototípust fejlesztiktovább. A dolog természetétol függoen a legfontosabb most a tudásbázis kifej-lesztése. Ehhez meg kell határozni a példákhoz a bemeno tényeket, a potenciálismegoldásokat, készíteni kell egy vázlatot, döntési fát, és mindezek alapján végüla tudásbázist. Majd ezt tesztelni kell a példákra, az eredményeket értékelni, atudásbázist ez alapján fejleszteni. A laboratoriumi teszteket valódi adokkal végzetttesztek követik, és egy szimulált környezetben kell kipróbálni.

El lehet végezni a Turing-tesztet: a rendszer eredményét össze kell vetni egyszakérto válaszával. Újabb példákra kell futtatni, s fejleszteni a tudásbázist. El kelldönteni, hogy a rendszer azt csinálja-e ami a tervekben rögzített volt, s azt az elvártpontossággal teszi-e! Meg kell vizsgálni, hogy a rendszer a specifikációinknakmegfelel-e vagy sem.

5. Alkalmazás

Miután a fejlesztés során a felhasználók egy csoportja már találkozott a rend-szer korábbi változataival, s azo igényüknek is megfeleloen fejlodött a rend-szer, nagy ellenállásba nem ütközhet a rendszer bevezetése. Megfeleloképpen kelltelepíteni, demonstrálni és betanítani a használatát. Ha az adatok olyanok, akkorkülön figyelmet kell fordítani a biztonsági kérdésekre is. A felhasználókat segítenikell a rendszer részletes és könnyen értheto dokumentációjával is.

6. Utómunkálatok

A környezet változik, így a rendszernek is együtt kell haladnia a változásokkal.Elofordulhatnak bonyolultabb esetek is, ezeket is fel kell venni a tudásbázisba.

Rendszeresen értékelni kell a rendszert. Ekkor a következo kérdések merülnekfel:

– A karbantartás költsége milyen arányban áll a haszonnal?– A tudásbázis naprakész?– A rendszer elérheto minden felhasználó számára?– Az elfogadottsága a felhasználók körében javul?– Az új ismeretek nem ütköznek a régiekkel?