CLIPS Példatár a
Tudásalapú rendszerek gyakorlatra járók számára
Készítette: Kovács Zita Debreceni Egyetem Informatikai Kar 2017.
Tartalom
I.
Egyszerű tények ............................................................................................................................... 3
II.
Template-ek használata................................................................................................................... 5
III. Megoldások ................................................................................................................................... 14 IV. Felhasznált irodalom...................................................................................................................... 34
I. Egyszerű tények
Első példaként egyetlen tény beszúrását, majd ezen érték alapján egy kiíratást nézünk meg. A tény, amit beszúrunk egy osztályzat, amelyet 1 és 5 között adunk meg. Az érdemjegy szöveges kiíratásához 5 szabályt készítünk, minden osztályzathoz egyet. Milyen az osztályzat?
1 elégtelen
2 elégséges
3
4
közepes
5 jó
(defrule elegtelen (osztalyzat 1) => (printout t "Az osztályzat elégtelen." crlf) ) (defrule elegseges (osztalyzat 2) => (printout t "Az osztályzat elégséges." crlf) ) (defrule kozepes (osztalyzat 3) => (printout t "Az osztályzat közepes." crlf) ) (defrule jo (osztalyzat 4) => (printout t "Az osztályzat jó." crlf) ) (defrule jeles (osztalyzat 5) => (printout t "Az osztályzat jeles." crlf) ) (assert (osztalyzat 3))
jeles
Feladat 1.
Lámpa
Készítsd el a gyalogos átkelőhelyen lévő lámpa működését szimuláló programot (2 szabály)! Vedd figyelembe az alábbiakat: • •
ha a lámpa piros, akkor a gyalogos nem mehet, írd ki neki, hogy ÁLLJ! ha a lámpa zöld, akkor a gyalogos mehet, írd ki neki, hogy MEHET! Milyen színű a lámpa?
piros ÁLLJ!
Feladat 2.
zöld MEHET!
Elköszönés
Az egyetlen tény, amit beszúrunk a mai nap neve. Köszönj el a csoporttársaidtól az alábbiak szerint: • •
ha péntek van, akkor írd ki, hogy KELLEMES HÉTVÉGÉT! ha nem péntek van, írd ki, hogy SZIASZTOK!
II. Template-ek használata
Feladat 3.
Vállalati leépítés
Egy vállalatnál súlyos piaci probléma csökkenteni kell a dolgozók létszámát.
következtében
drasztikusan
Az a személy maradhat, akinek: -
szakmai képzettsége: szakirányú munkabírása: kiváló nyelvtudása: felsőfokú problémamegoldó képessége: jó
Adj meg dolgozókat, többféle jellemzővel! Adj meg olyan szabályt, amely eldönti, hogy a tényben szereplő személy az adott tulajdonságoknak, kritériumoknak megfelel-e! Ha igen, a dolgozó maradhat a vállalatnál, ha nem, a rendszer javaslata szerint elbocsátása történik.
Feladat 4.
Eladó autók – kimenet
Adottak az alábbi eladó autók: (auto (gyartmany Audi) (tipus A5) (evjarat 2008) (hasznalt igen) (ar 6000000) (szin fekete)) (auto (gyartmany Audi) (tipus RS6) (evjarat 2009) (hasznalt nem) (ar 12000000) (szin kek)) (auto (gyartmany Volkswagen) (tipus Passat) (evjarat 2009) (hasznalt nem) (ar 9000000) (szin fekete)) (auto (gyartmany Nissan) (tipus Novara) (evjarat 2002) (hasznalt igen) (ar 2000000) (szinkek)) (auto (gyartmany Renault) (tipus Megane) (evjarat 2010) (hasznalt igen) (ar 5000000) (szin bordo))
Mit ír ki a program a következő szabály lefutása után?
(defrule keres (auto (gyartmany ?gyartmany) (tipus ?tipus) (evjarat ?evjarat) (hasznalt igen) (ar ?ar) (szin ?szin)) (test (> ?evjarat 2008)) => (printout t "Az Önnek megfelelő autó a(z) " ?evjarat "-s évjáratú " ?gyartmany " " ?tipus "." crlf))
És ez mit ír ki?
Feladat 5.
Adottak az alábbi tények és egy szabály. Mit ír ki a szabály lefutása után a program?
(szemely (nev Elemer) (nem ferfi) (kor 15)(szuletesi_hely Debrecen)(hajszin szoke)) (szemely (nev Eszter)(kor 43)(nem no)(szuletesi_hely Eger) (hajszin fekete)) (szemely (nev Katalin)(kor 33)(nem no) (szuletesi_hely Eger)) (szemely (nev Tamas)(nem ferfi)(kor 55)(hajszin szoke)(szuletesi_hely Eger)) (defrule kiir (szemely (nev ?nev)(kor ?kor)(szuletesi_hely no)(hajszin ~szoke)) (test(> ?kor 32)) (test(< ?kor 40)) => (printout t „A keresett szemely: ” ?nev crlf))
Eger)(nem
Filmek
Feladat 6.
Definiálj egy mintát, ami a következő adatokat tartalmazza: filmcím, típusa, korhatáros-e, elkészülés éve, rendező ország. Tölts fel legalább 5 film adatait. •
Listázd ki a filmeket!
• •
Feladat 7.
Listázd ki azokat a magyar vígjátékokat, amelyek nem korhatárosak! Listázd ki a 2000 előtt készült külföldi filmeket!
Tanulmányok
Egy hallgató esetén tároljuk a keresztnevét, továbbá hogy hanyadik félévben nem teljesített egy tárgyat és arra a tárgyra épül-e másik tantárgy. Döntsd el, hogy a 7 féléves képzés esetén a hallgató csúszik-e! Vedd figyelembe a következő szabályokat: • •
Ha utolsó félévben „bukott”, akkor mindig csúszik. Ha nem utolsó félévben „bukott”, akkor o Ha olyan tárgyból „bukott”, amire nem épül semmi, akkor megúszhatja a csúszást. o Ha olyan tárgyból „bukott”, amire épül tantárgy, akkor csúszik.
például: (csuszik_e (nev Laci) (epul igen) (felev 6))
Feladat 8.
Kézilabda méret ajánló
Készíts egy programot, amely a játékosok neme és kora alapján kiírja, hogy hányas kézilabda méret jó nekik az alábbi táblázat alapján! Labdaméret Korosztály 1 8-14 év közötti leányok 8-12 év közötti fiúk 2 14 év feletti nők 12-16 év közötti fiúk 3 16 év feletti férfiak HALADÓ: 1. Használjuk template-t a játékosok adataival (név, nem, kor)! 2. A nemet és a kort olvassuk be!
Feladat 9.
Bevásárlóközpont
Beruházást tervezel, egy új bevásárlóközpontot szeretnél építeni. Adottak az alábbi telkek: (telek (telepules Debrecen) (varosresz belvaros) (meret 1500) (ar 25000000) (beepitett igen)) (telek (telepules Debrecen) (varosresz belvaros) (meret 2300) (ar 32000000) (beepitett nem)) (telek (telepules Debrecen) (varosresz kulvaros) (meret 3000) (ar 22000000) (beepitett igen)) (telek (telepules Szeged) (varosresz belvaros) (meret 800) (ar 24000000) (beepitett nem)) (telek (telepules Szeged) (varosresz belvaros) (meret 1300) (ar 26000000) (beepitett nem))
Írj szabályt, ami kilistázza azokat a belvárosi nem beépített eladó telkeket, amelyeknek az ára legfeljebb 25 millió forint!
Feladat 10.
Focibajnokság
Focibajnokságot szervezel kis- és nagypályára a 13-18 éves korosztálynak. Töltsd fel az adatbázist legalább 10 elemmel a következő mintának megfelelően: • • • •
nev: a csapat neve korosztaly: a csapat korosztálya (13, 14, 15, 16, 17, 18) -> csak egész szám lehet varos: a csapat városa palya: kispálya, vagy nagypálya
Készíts szabályt, ami kilistázza azon Szegedről érkezett, 15-16 éves korosztályt képviselő csapatokat, amelyek a nagypályás bajnokságra neveztek!
Feladat 11.
Időjárás-jelentés
Vedd figyelembe az alábbi szabályokat: az időjárás egy adott napon
• • • • • •
napos, ha a Nap süt borult, ha a Nap nem süt meleg, ha a hőmérséklet legalább 25 fok enyhe, ha a hőmérséklet 15-25 fok közötti hűvös, ha a hőmérséklet 5-15 fok közötti hideg, ha a hőmérséklet 5 fok alatti
Egészítsd ki a feltételeket, a szélre és az esőre vonatkozó információk alapján (esős, szeles)! Készíts szabályt, amely eldönti a tényben szereplő napról, hogy milyen az időjárás aznap (minden információt vegyen figyelembe a szabály)! például: (nap (datum febr23)(Napsut igen)(esoesik igen)(szelfuj igen)(homerseklet 24))
Feladat 12.
Online autókereskedés
Az alábbi adatok kiválasztásával, a vevő megtalálhatja a neki megfelelő járművet. A paraméterek a következőek lehetnek: üzemanyag, hengerűrtartalom, kivitel.
gyártmány,
modell,
ár,
Írd meg az alábbi szabályokat: 1. Keresse meg, a Mercedes-Benz gyártmányú, benzines, Sedan kivitelű járműveket! 2. Keresse meg, a 3 millió forint alatti, kisbusz kivitelű járműveket! 3. Keresse meg, a 2000 cm3 feletti, diesel üzemanyagú járműveket! 4. Keresse meg, az Audi gyártmányú, A4-es modellű, diesel üzemanyagú, 2500 cm3 alatti járműveket! 5. Keresse meg, a Volkswagen gyártmányú, Golf modellű, 2.5 millió forint feletti, diesel üzemanyagú, 2000 cm3 alatti, kombi kivitelű járműveket!
Feladat 13.
Börtön
Készíts egy börtön adatbázist, mely a következő adatokat tartalmazza: • szig: Személyi igazolványszám. A rab azonosítója.
• • • • • • •
nem: A rab neme. //férfi nev: A rab neve. lecsukva: Mikor csukták le a rabot? //2007 //2010 lefoglalt: Mi került lefoglalásra a rab lecsukása során. //kábítószer buntenyek: Milyen bűntényt követett el a rab? borton: Melyik börtönben található a rab? munkak: Milyen munkát végez a rab a börtönben? // Budapesti Javító Intézetben
Készíts szabályt, amely kiszűri azokat a rabokat, akiket 2007-ben csuktak le és a Budapesti Javító Intézetben helyeztek el! Készíts szabályt, amely kiszűri azokat a férfi rabokat, akiknél kábítószert találtak és 2010-ben csukták le!
Feladat 14.
Hűtőszekrény
Készíts egy intelligens hűtőszekrény programot, mely figyelmeztet egy adott tényben megadott információk alapján! Az alábbiakat vedd figyelembe: a. ha a hűtőajtó nyitva van és nincs benne romlandó étel, akkor az ajtót be kell csukni b. ha a hűtőajtó régóta nyitva van és a konyhában meleg van, és a hűtőben van romlandó étel, akkor a romlandó étel megromlott, ki kell dobni, a hűtőt ki kell takarítani és az ajtót be kell csukni c. ha a hűtőajtó még nem olyan régóta van nyitva, a konyhában meleg van és a hűtőben van romlandó étel, akkor a romlandó ételt a kutyának kell adni és a hűtőajtót be kell csukni d. ha a hűtőajtó még nem olyan régóta van nyitva, a konyhában nincs meleg és a hűtőben van romlandó étel, akkor a romlandó ételt meg kell kóstolni és a hűtőajtót be kell csukni e. a konyhában meleg van, ha a hőmérséklet több mint 25 fok f. a hűtőajtó régóta nyitva van, ha ez legalább 30 perc g. ha nincs kutya, akkor ki kell dobni, amit a kutya enne meg Döntsd el, hogy mi a teendő az alábbi tény esetén: (huto (ajtonyitva 45)(kutya van))
20)(romlando
van)(konyha_homerseklet
Feladat 15.
Online ruhabolt
Van egy online ruha boltunk, ahol a regisztrált tagoknak az adottságaik alapján ajánlunk ruhákat. Regisztrációkor az alábbi adatokat kell megadni az egyes tagoknak: azonosító, kor, nem, magasság, súly, alkalom. Írjuk meg az alábbi szabályokat: • • • •
• •
ha férfi, akkor kapjon farmert és inget ha "fiú" (fiatalabb, mint 30), akkor farmert és pólót ha férfi és az alkalom ünnepség, akkor kapjon öltönyt ha a személy nő és az alkata megfelelő, akkor kapjon blúzt és szoknyát (megfelelő alkat: súly/(magasság*magasság) értéke 18 és 25 között van) ellenkező esetben nadrág és blúz ha nő és az alkalom ünnepség, akkor kapjon kosztümöt ha az alkalom sport, akkor ajánljunk neki melegítőt
Feladat 16.
Könyvtári kölcsönzés
Készíts adatbázist, mely a következőket tartalmazza egy kölcsönzés esetén: kölcsönző neve, neme, életkora, kölcsönzött könyv címe, kölcsönzött könyv szerzője, kölcsönzött könyv műfaja, kölcsönzéstől eltelt napok száma! • Készíts szabályt, amely kiírja azokat a kölcsönzőket, akik 30 napnál régebben vették ki a könyvet! • Készíts szabályt, amely a 30 napnál régebben kivett könyvekre kiszámolja a késedelmi díjat, ami naponta 100Ft! Készíts szabályt, amely kiírja azoknak az adatait, akik 11 és 18 év közöttiek és romantikus regényt kölcsönöztek!
Feladat 17.
Pizzafutár
Hozz létre egy mintát, amelyben a megrendelt pizzák adatait tárolod: vevő neve, pizza fajtája, ára, darab, rendelés ideje (pl. 12:35 = 1235) és hogy kiszállították-e már. • Adj meg 10 pizzarendelést! • Listázd ki azokat a rendeléseket, amelyeket még nem szállítottak ki! • Listázd ki azokat a vevőket, amelyek minimum három pizzát rendeltek! • Listázd ki azokat, akik már több mint 1 órája várnak, csak a vevő neve és a pizza fajtáját írassuk ki!
Feladat 18.
Influenza diagnózis
A megadott tény alapján döntse el a program, hogy a páciens influenzás-e, s ha igen, akkor mi a teendő! A program hívja fel a figyelmet a veszélyekre! (forrás:http://www.webbeteg.hu/cikkek/fertozo_betegseg/471/influenza-kikell-pihenni) Az influenza a. kezdeti tünetei: láz, hidegrázás, borzongás, rossz közérzet, fejfájás, izomfájdalom i. kisgyermekek esetén: hasmenés, bágyadtság ii. időseknél: szegycsonttáji fájdalom b. ezeket követi: torokfájás, száraz köhögés c. ezután: hurutos tünetek: orrfolyás, orrdugulás, váladékos köhögés (krónikus betegek, csecsemők, idősek esetén a hurutosság elenyésző lehet) d. kezelése: i. tüneti kezelés, mert vírusfertőzés; ii. lázcsillapítás; iii. ha kell, fájdalomcsillapítás; iv. ágynyugalom (fontos kipihenni!) v. bő folyadékfogyasztás vi. vitamin, sok C-vitamin vii. erősen veszélyeztetett egyének esetén: influenza vírus elleni gyógyszer viii. ha van bakteriális szövődmény: antibiotikum e. szövődmények: i. felnőttek esetében: bakteriális tüdőgyulladás, krónikus hörghurut heveny fellángolása, agyi keringészavar, szívinfarktus, toxikus shock tünetegyüttes, agyhártya- és agyvelőgyulladás, veseelégtelenség, anyagcserebetegségek egyensúlyának felborulása ii. gyerekek esetén: középfülgyulladás, asthma, lázgörcs, vakbélgyulladás gyanúját keltő hasfájás, szív- és vázizom gyulladás, Feladat 19.
Bármilyen egyéb betegség (pl szívinfarktus) diagnózisa
Az alábbi linken található „Fiókát találtam, mit tegyek?” című ábra alapján készíts szakértő rendszert! http://www.mme.hu/fiokattalaltam-mit-tegyek
Feladat 20.
Az alábbi linken található „Lomtalanítás” ábra alapján készíts szakértő rendszert!
Feladat 21.
http://otthonszervezo.blog.hu/2016/05/30/a_lomtalanitas_elonyei_illetve_a _lomtalanitas_soran_felmerulo_kifogasok
III. Megoldások Feladat 1. Lámpa
Első verzió. (defrule piros (lampaszin piros) => printout t „ÁLLJ!” crlf)) (defrule zold (lampaszin zold) => printout t „MEHET!” crlf))
Dialógusablakban: (assert (lampaszin piros))
Második verzió. (defrule lampa (lampaszin ?szin) => (if (eq ?szin piros) then (printout t "ÁLLJ!" crlf) else (printout t "MEHET!" crlf) ) ) (deffacts lampa (lampaszin zold))
Feladat 2. Elköszönés
Első verzió. (defrule pentek (mainap pentek) => (printout t „KELLEMES HÉTVÉGÉT!” crlf) ) (defrule nempentek (mainap ~pentek) => (printout t „SZIASZTOK!” crlf) ) Dialógusablakban: (assert (mainap kedd))
Második verzió. (defrule koszon (mainap ?nap) => (if (eq ?nap pentek) then (printout t "KELLEMES HÉTVÉGÉT!" crlf) else (printout t "SZIASZTOK!" crlf) ) ) (deffacts nap (mainap pentek))
Feladat 3. s Feladat 4. Eladó autók - kimenet
Ez lesz a kimenet: Az Önnek megfelelő autó a(z) 2010-s évjáratú Renault Megane.
Természetesen a teljes programban szükség van egy template és a kiinduló tények definiálására is: (deftemplate auto (slot gyartmany) (slot tipus) (slot evjarat) (slot hasznalt) (slot ar) (slot szin) ) (deffacts autok (auto (gyartmany Audi) (tipus A5) (evjarat 2008) (hasznalt igen) (ar 6000000) (szin fekete)) (auto (gyartmany Audi) (tipus RS6) (evjarat 2009) (hasznalt nem) (ar 12000000) (szin kek)) (auto (gyartmany Volkswagen) (tipus Passat) (evjarat 2009) (hasznalt nem) (ar 9000000) (szin fekete)) (auto (gyartmany Nissan) (tipus Novara) (evjarat 2002) (hasznalt igen) (ar 2000000) (szin kek)) (auto (gyartmany Renault) (tipus Megane) (evjarat 2010) (hasznalt igen) (ar 5000000) (szin bordo)) ) (defrule keres (auto (gyartmany ?gyartmany) (tipus ?tipus) (evjarat ?evjarat) (hasznalt igen) (ar ?ar) (szin ?szin)) (test (> ?evjarat 2008)) => (printout t "Az Önnek megfelelő autó a(z) " ?evjarat "-s évjáratú " ?gyartmany " " ?tipus "." crlf))
Feladat 5. És ez mit ír ki?
Ez lesz a kimenet: A keresett szemely: Katalin
Az előző feladat megoldásához hasonlóan, a teljes programban itt is szükség van egy template és a kiinduló tények definiálására is: (deftemplate szemely (slot nev) (slot nem) (slot kor) (slot szuletesi_hely) (slot hajszin) ) (deffacts szemelyek (szemely (nev Elemer) (nem ferfi) (kor 15)(szuletesi_hely Debrecen)(hajszin szoke)) (szemely (nev Eszter)(kor 43)(nem no)(szuletesi_hely Eger) (hajszin fekete)) (szemely (nev Katalin)(kor 33)(nem no) (szuletesi_hely Eger)) (szemely (nev Tamas)(nem ferfi)(kor 55)(hajszin szoke)(szuletesi_hely Eger)) ) (defrule kiir (szemely (nev ?nev)(kor ?kor)(szuletesi_hely Eger)(nem no)(hajszin ~szoke)) (test(> ?kor 32)) (test(< ?kor 40)) => (printout t "A keresett szemely: " ?nev crlf) )
Feladat 6. Filmek
Feladat 7. Tanulmányok
Feladat 8. Kézilabda méret ajánló
Feladat 9. Bevásárlóközpont
Feladat 10. Focibajnokság
Feladat 11. Időjárás-jelentés
Feladat 12. Online autókereskedés
Feladat 13. Börtön
Feladat 14. Hűtőszekrény
Feladat 15. Online ruhabolt
Feladat 16. Könyvtári kölcsönzés
Feladat 17. Pizzafutár
Feladat 18. Influenza diagnózis
Feladat 19. Diagnózis
Feladat 20. Fiókát találtam, mit tegyek?
Feladat 21. Lomtalanítás
IV. Felhasznált irodalom
1. 2. 3. 4.
hallgatói büntifeladatok Motaz K. Saad, CLIPS: Expert System Shell, (College of IT – CS.Dept.) http://www.mme.hu/fiokat-talaltam-mit-tegyek http://otthonszervezo.blog.hu/2016/05/30/a_lomtalanitas_elonyei_ill etve_a_lomtalanitas_soran_felmerulo_kifogasok 5. http://www.webbeteg.hu/cikkek/fertozo_betegseg/471/influenza-kikell-pihenni 6.