CLIPS (C Language Integrated Production System)



Hasonló dokumentumok
CLIPS áttekintés. Produkciós rendszerek fejlesztése

A F u z z y C L I P S a l a p j a i

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

Interaktív, grafikus környezet. Magasszintû alkalmazási nyelv (KAL) Integrált grafikus interface könyvtár. Intelligens kapcsolat más szoftverekkel

Alapok. tisztán funkcionális nyelv, minden függvény (a konstansok is) nincsenek hagyományos változók, az első értékadás után nem módosíthatók

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Operációs rendszerek gyak.

1. Bevezetés A C++ nem objektumorientált újdonságai 3

Imperatív programozás

Szkriptnyelvek. 1. UNIX shell

Algoritmizálás és adatmodellezés tanítása 1. előadás

Objektumorientált programozás C# nyelven

C programozás. 1 óra Bevezetés

BASH script programozás II. Vezérlési szerkezetek

Java II. I A Java programozási nyelv alapelemei

A C programozási nyelv II. Utasítások. A függvény.

FUNKCIONÁLIS PROGRAMOZÁS

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Algoritmizálás + kódolás C++ nyelven és Pascalban

Imperatív programozás

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Operációs Rendszerek II. labor. 2. alkalom

OOP #14 (referencia-elv)

2018, Funkcionális programozás

Bánsághi Anna 2014 Bánsághi Anna 1 of 31

Programozási nyelvek JAVA EA+GY 1. gyakolat

Python tanfolyam Python bevezető I. rész

Programozási nyelvek (ADA)

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

Számítógéppel segített folyamatmodellezés p. 1/20

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

Bevezetés, a C++ osztályok. Pere László

SZÁMÍTÓGÉPES PROBLÉMAMEGOLDÁS

Java II. I A Java programozási nyelv alapelemei

Programozási nyelvek Python

MYCIN. Szakértői rendszer

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

2019, Funkcionális programozás. 2. el adás. MÁRTON Gyöngyvér

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

SZAKÉRTŐI RENDSZEREK, JOGI TUDÁSALAPÚ RENDSZEREK. Strausz György október 2.

van neve lehetnek bemeneti paraméterei (argumentumai) lehet visszatérési értéke a függvényt úgy használjuk, hogy meghívjuk

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Függvények. Dr. Bécsi Tamás 6. Előadás

Szoftvergyártás: gyártásvezérlés kód-figyeléssel

Komputeralgebra rendszerek

2019, Funkcionális programozás. 5. el adás. MÁRTON Gyöngyvér

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

C#, OOP. Osztályok tervezése C#-ban

1. Egyszerű (primitív) típusok. 2. Referencia típusok

Rekurzió. Dr. Iványi Péter

C programozási nyelv

Szoftvertechnológia alapjai Java előadások

A PROGRAMOZÁS ALAPJAI 3. Készítette: Vénné Meskó Katalin

SZAKÉRTŐI RENDSZEREK, LOGIKAI KÖVETKEZTETÉS ALAPÚ MEGOLDÁSOK. Integrációs és ellenőrzési technikák, 2017

Adatszerkezetek 1. Dr. Iványi Péter

A programozás alapjai

Delphi programozás IV.

2016, Funkcionális programozás

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

Komputeralgebra rendszerek

Cekla. Készítette Doxygen Tue Sep :13:44

Komputeralgebra rendszerek

Matematikai programok

A MATLAB alapjai. Kezdő lépések. Változók. Aktuális mappa Parancs ablak. Előzmények. Részei. Atomerőművek üzemtana

Haladó DBMS ismeretek 1

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

3. Gyakorlat Ismerkedés a Java nyelvvel

S z á m í t ó g é p e s a l a p i s m e r e t e k

Programozás C++ -ban

PHP alapjai, bevezetés. Vincze Dávid Miskolci Egyetem, IIT

A C# programozási nyelv alapjai

Az iskolai rendszerű képzésben az összefüggő szakmai gyakorlat időtartama. 10. évfolyam Adatbázis- és szoftverfejlesztés gyakorlat 50 óra

III. OOP (objektumok, osztályok)

Algoritmusok Tervezése. 4. Előadás Visual Basic 1. Dr. Bécsi Tamás

Objektumorientált Programozás III.

KOMPUTER-ALGEBRA RENDSZEREK VERIFIKÁCIÓJA

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

Az alállomási kezelést támogató szakértői funkciók

Java és web programozás

Pénzügyi algoritmusok

A modell-ellenőrzés gyakorlata UPPAAL

Programozási nyelvek Java

Komputeralgebra Rendszerek

Járműfedélzeti rendszerek II. 4. előadás Dr. Bécsi Tamás

Python bevezető foglalkozás Python bevezető foglalkozás

JAVA PROGRAMOZÁS 2.ELŐADÁS

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

Ismerkedés a Python programnyelvvel. és annak micropython változatával

Bevezetés. Dr. Iványi Péter

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Programozás BMEKOKAA146. Dr. Bécsi Tamás 3. előadás

ködös határ (félreértés, hiba)

Komputeralgebra Rendszerek

Debreceni Egyetem Matematikai és Informatikai Intézet. 13. Védelem

Tartalomjegyzék. Általános Információ! 2. Felhasználói dokumentáció! 3. Feladat! 3. Környezet! 3. Használat! 3. Bemenet! 3. Példa!

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

Átírás:

CLIPS (C Language Integrated Production System) I. ALAPVETŐ TULAJDONSÁGAI szakértői rendszer fejlesztő eszköz (shell) 80-as évek közepe, NASA 1. prototípus 1985-ben (~ 2 hónap alatt), fejlesztések, bővítések tudásreprezentáció o szabály-alapú rendszer szabály: szituáció akció, heurisztikák, ökölszabályok produkciós rendszer, előrefelé haladó következtetés, RETE algoritmus o procedurális elemek függvények, generikus függvények integrálás más rendszerekkel, nyelvekkel (C, Java, Fortran, Ada, ) o objektum-orientált programozás komplex rendszerek modellezése, moduláris elemek CLIPS Object Oriented Language (COOL) hordozhatóság (C alapú, számos operációs rendszeren tesztelték: Windows, Macintosh, Unix) interaktív fejlesztés o interaktív szöveg-orientált fejlesztői környezet o nyomkövetési lehetőségek o on-line help o integrált editor verifikálás, validálás o moduláris tervezés o TB particionálása o függvény argumentumok, tulajdonság-értékek statikus/dinamikus ellenőrzése (megszorítások) o szabályok szemantikai ellenőrzése dokumentáció (user s guide, manual, : szabadon letölthető) alacsony ár

II. SZAKÉRTŐ RENDSZEREK ALAPVETŐ ELEMEI / CLIPS tudásbázis / szabálybázis következtető gép / szabályok alkalmazása, végrehajtása munkamemória / tények (facts), objektum példányok (instances), globális változók CLISP: adatvezérelt következtetést tartalmaz (adatok szükségesek a szabályok tüzeléséhez) CLIPS> CLIPS prompt-ja (parancs bevitelére vár) top-level (közvetlen parancs bevitele, kiértékelés/végrehajtás, visszatérési érték kiírása) CLIPS>(+ 3 4) 7 parancs lehet: függvényhívás függvény értékének meghatározása TB-hoz komponens hozzáadása új elem létrehozása globális változó értékének kiírása konstans konstans kiírása III. CLIPS ALAPVETŐ ELEMEI 1. egyszerű adattípusok 2. függvények 3. konstruktorok (constructs) 1. Egyszerű adattípusok float, integer numerikus információ symbol, string szimbolikus információ external-address függvény által visszaadott külső adatszerkezet címe <Pointer-XXX> fact-address tény címe <Fact-XXX> instance-name példány neve [p-1] instance-address példány címe <Instance-XXX> egy egyszerű adattípus tárolása mező (field) single-field value 0 vagy több single-field value sorozata multifield value (), (x), (1 2 a b) 2. Függvények prefix jelölés (függvény-név + argumentumok) (+ (* 2 3) (- 5 2)) argumentumok: egyszerű adattípusok, változók, egyéb függvényhívások visszatérési érték (mellékhatások) beépített függvények felhasználó által definiált függvények (deffunction, defgeneric konstruktorral)

3. Konstruktorok TB komponenseinek létrehozásához nincs visszatérési értékük hatás: TB bővítése defmodule defrule deffacts deftemplate defglobal defclass definstances defmessage-handler defgeneric defmethod ; komment (új sorig) közvetlenül a konstruktorba (a konstruktor-név után) is lehet komment IV. INFORMÁCIÓ REPREZENTÁLÁSA CLIPS-BEN (MUNKAMEMÓRIA) 1. tények (facts) csak ezekkel foglalkozunk 2. globális változók 3. objektumok 1. Tények Tény: információ-darab tények listájára (fact list) helyezve szabályok által használt alapvető információ-egység tények hozzáadása a tény listához: (assert <tény>) CLIPS>(assert (kutya)) <Fact-1> tény-cím (egyszerű adattípus) automatikus számozás 1,2, tény-index tények megtekintése (facts) CLIPS>(facts) f-0 (initial-fact) f-1 (kutya) For a total of 2 facts. f-0 tény azonosító ( f- tény-index)

tények törlése (retract <tény-index>*) (retract *) CLIPS>(retract 1) CLIPS>(facts) f-0 (initial-fact) For a total of 1 fact. több tény egyidejű definiálása: CLIPS>(assert (macska) (lo) (nyul)) Tény: 1 vagy több mező (field) zárójelek között, space-szel elválasztva mezőn: egyszerű adattípusok (float, integer, symbol, string) (kutya Bodri) (szamok 15 13 12.5) tények egymásba ágyazása nem lehetséges! általában: tény 1. mezőjén relációnév ha egy mezőnek nincs értéke : nil (üres mező) CLIPS> (assert (macska nil)) Tények lehetnek: rendezett tények (mezők sorrendje adja a rendezést) (kutya Bodri) (Bodri kutya) 2 különböző tény! nem-rendezett tények (rekordokhoz hasonlítanak, a mezőknek nevük van) deftemplate konstruktorral létrehozott tények Nem-rendezett tények definiálása (deftemplate [<modul név>] <név> [ <megjegyzés> ] <rés definíció>*) CLIPS>(deftemplate kutya CLIPS>(deftemplate MAIN:: kutya kutya (slot nev) (slot nev) (multislot gazdi)) (multislot gazdi)) [CSTRCPSR4] Cannot redefine deftemplate kutya while it is in use TB elemeinek törlése (clear) konstruktorok, tények, példányok törlése CLIPS>(clear) törlés + (initial-fact) + INITIAL-OBJECT CLIPS>(deftemplate kutya (slot nev) (multislot gazdi))

CLIPS> (assert (kutya) <Fact-1> CLIPS> (facts) f-0 (initial-fact) f-1 (kutya (nev nil) (gazdi)) For a total of 2 facts default érték definiálása: (default?none) az értéket ki kell jelölni a tény létrehozásakor (default?derive ) a lehetséges értékek közül az első vagy nil (default <konkrét érték/kifejezés>) érték/kifejezés értéke megszorítások definiálása: (allowed-values ) (type INTEGER/SYMBOL/STRING/FLOAT/..) CLIPS>(clear) CLIPS>(deftemplate kutya (slot nev (default?none)) (slot kor (type INTEGER)) (multislot gazdi (default Kis Pista))) CLIPS>(assert (kutya)) [TMPLTRHS1] Slot nev requires a value because of its (default?none) attribute. CLIPS>(assert (kutya (nev Bodri))) <Fact-1> CLIPS>(facts) f-0 (initial-fact) f-1 (kutya (nev Bodri) (kor 0) (gazdi Kis Pista)) For a total of 2 fact A deffacts konstruktor (deffacts [<modul név>] <név> [ <megjegyzés> ] <RHS pattern>*) a tények a (reset) paranccsal jönnek létre, használatuk azonos a korábbi tényekkel (reset) tudáselemek törlése + konstruktorok által definiált tudáselemek létrehozása CLIPS>(deffacts kutyak "falka" (kutya (nev Bodri)) (kutya (nev Foltos) (gazdi Kis Janos))) CLIPS>(reset) CLIPS>(facts) CLIPS> (facts) f-0 (initial-fact) f-1 (kutya (nev Bodri) (kor 0) (gazdi Kis Pista)) f-2 (kutya (nev Foltos) (kor 0) (gazdi Kis Janos)) For a total of 3 facts.

tények módosítása (csak deftemplate tények) (modify <tény címe vagy tény címét tartalmazó változó> <RHS-slot>*) <változó> <- <tény> CLIPS>(modify 1 (kor 1)) <Fact-3> pl. szabályban:?f <- (kutya (nev Bodri) (kor 0)) (modify?f (kor 1)) V. TUDÁSREPREZENTÁCIÓ (TUDÁSBÁZIS) 1. heurisztikus ismeretek (szabályok) csak ezekkel foglalkozunk 2. procedurális ismeretek (függvények, modulok) 3. objektum-orientált programozás 1. Heurisztikus ismeretek (szabályok) feltételi rész / következmény rész if / then LHS / RHS szabály definiálása (defrule [<modul név>] <név> [ <megjegyzés> ] [<deklaráció>] <feltétel>* } LHS, implicit and a feltételek között <következmény>*) } RHS, implicit and az akciók között CLIPS>(defrule pelda (reaktor homerseklet magas) (assert (hutoviz betaplalas nagy))) CLIPS>(assert (reaktor homerseklet magas)) Agenda: szabály-példány (tüzelőképes) szabályok működtetése (következtetés) (run)

CLIPS>(deftemplate kutya (slot nev (default?none)) (slot kor (type INTEGER)) (multislot gazdi (default Kis Pista))) CLIPS>(deffacts kutyak "falka" (kutya (nev Bodri)) (kutya (nev Foltos) (gazdi Kis Janos))) CLIPS>(reset) CLIPS>(defrule pelda2 (kutya (nev?x) (kor 0)) (printout t "Nev: "?x crlf)) CLIPS>(run) FIRE 1 pelda2: f-2 Nev: Foltos FIRE 2 pelda2: f-1 Nev: Bodri szabály feltételi része tartalmazhat: minta CE (CE: conditional elements) (reaktor homerseklet magas) (kutya (nev Bodri) (kor 0)) (kutya (nev?x) (kor?))?.. egy mező tetszőleges értékkel (single-field-wildcard) $?.. 0 vagy több mező tetszőleges értékkel (multifield-wildcard) CLIPS>(assert (adat) (adat x) (adat 1 x) (adat 1 2) (adat 1 2 x) (adat 1 2 x y) (x)) CLIPS>(defrule pelda3 (adat $? x $?) ) CLIPS>(defrule pelda4 (adat?x?y?z) (printout t?x " "?y " "?z crlf)) CLIPS>(defrule pelda5 (adat?x $?y) (printout t?x " "?y crlf))

CLIPS>(defrule pelda6 (adat $?x $?y) (printout t?x " "?y crlf)) CLIPS>(defrule pelda7 (adat ~1&~2 $?) ) CLIPS>(defrule pelda8 (adat 1 2 $?) ) CLIPS>(defrule pelda9 (adat?x&:(numberp?x) $?) (printout t?x crlf)) CLIPS>(defrule pelda10 (adat $?x&:(> (length$?x) 2)) (printout t?x crlf)) CLIPS>(defrule pelda11 (adat?x?y&=(* 2?x)) (printout t?x " "?y crlf)) (defrule pelda16?f <- (adat $?) ;tény címe (retract?f)) ;tény törlése teszt CE (test <függvényhívás>) CLIPS>(defrule pelda18 (adat?x?y) (test (numberp?x)) (test (numberp?y)) (printout t (+?x?y) crlf))

or CE (or (homerseklet magas) (szelep zarva)) ;több szabállyal helyettesíthető and CE implicit and a CE-k között, az and CE az AND/OR/NOT kombinálására szolgál (or (and (homerseklet magas) (szelep zarva)) (and (homerseklet alacsony) (szelep nyitva))) not CE CLIPS>(defrule pelda19 (not (adat $? 3 $?)) ) CLIPS>(defrule pelda20 (not (adat $? 2 $?)) ) szabály LHS CE nélkül (defrule ures (defrule ures (initial-fact) ) ) szabály következmény része tartalmazhat: új tény létrehozása (assert ) tény törlése, módosítása (retract ) (modify ) CLIPS>(deftemplate kutya (slot nev (default?none)) (slot kor (type INTEGER)) (multislot gazdi (default Kis Pista))) CLIPS>(deffacts kutyak "falka" (kutya (nev Bodri)) (kutya (nev Foltos) (gazdi Kis Janos))) CLIPS>(defrule pelda21?f <- (kutya (kor 0)) (modify?f (kor 1)))

változó megkötése CLIPS>(defrule pelda22 (kutya (nev?x)) (bind?nev?x) (printout t?nev crlf)) input/ output (read) (printout ) CLIPS>(defrule pelda23 (bind?x (read)) (printout t?x crlf)) függvények CLIPS>(defrule pelda24 (if (< (read) 10) then (assert (kis_szam)) else (assert (nagy_szam)))) deklaráció: (declare <szabály-tulajdonság>+) (salience <integer kifejezés>) ;-10.000 +10.000, alapértelmezés: 0 (auto-focus <boole kifejezés>) ;TRUE/FALSE, modul-váltás