1 / 21

CLIPS – ljuska ekspertnog sustava

CLIPS – ljuska ekspertnog sustava. NASA, 1984 Temeljne značajke: LISP  C, potpora za Objektno usmjerenje, moguća ugradnja u C programe, RETE algoritam, postoje nadogradnje (CORBA, FuzzyCLIPS, …) CLIPS: http://clipsrules.sourceforge.net/ Najpopularnija knjiga:

valin
Download Presentation

CLIPS – ljuska ekspertnog sustava

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CLIPS – ljuska ekspertnog sustava NASA, 1984 Temeljne značajke: LISP  C, potpora za Objektno usmjerenje, moguća ugradnja u C programe, RETE algoritam, postoje nadogradnje (CORBA, FuzzyCLIPS, …) CLIPS: http://clipsrules.sourceforge.net/ Najpopularnija knjiga: J. C. Giarratano, G. D. Riley, Expert Systems: Principles and Programming, Course Technology; 3 edition (1998).

  2. CLIPS Struktura: Data memory: činjenice (Facts, Objects) Rule-base: pravila Inference Engine: Data driven - forward chaining Case-sensitive !!! Izvođenje: CLIPS> (naredba) Facts: (assert (field1 field2 … fieldN)) - upis činj. s više polja Upisom činjenica CLIPS pridružuje id: Fact-0, Fact-1, … . GSP (good software practice): field1 = relacijski ili predikatni simbol. field - tip podataka (int, float, symbol string, varijabla, …) CLIPS> (assert (kosara sir kruh mlijeko)) <Fact-0>

  3. CLIPS Tipične naredbe (upisi u zagradama), ; komentar (assert …) ; upis pojedinog fact (facts) ; ispis cijele WM (clear) ; brisanje cijele WM (reset) ; ostaje inicijalni fact koji se koristi za ; poklapanje s pravilom koje nema ; specificiranu AKO stranu (retract 0 … N) ; briše specificirani fact (watch facts) ; ==> <== , t.j. ulazi i izlazi iz WM (watch … ) ; praćenje raznih objekata (unwatch … ) ; prestanak praćenja (deffacts … ) ; upis više facts, drže se u posebnoj datoteci, ; a upisuju sa (reset)

  4. CLIPS Pravila: (defrule rule-name "opt. comment" (uzorak_1) ; početak IF dijela, (uzorak_2) ; konjunkcijom povezani … ; uzorci, (uzorak-M) ; završetak IF dijela => (akcija_1) ; početak THEN dijela (akcija_2) … (akcija_P)) ; završetakj THEN dijela

  5. CLIPS Aktiviranje ulančavanja: CLIPS> (run <int>) ; <int> opcija, broj ciklusa Ukoliko postoji slaganje činjenica s IF stranom bilo kojeg pravila, pravilo ide na listu: AGENDA. Razrješavanje konflikata u AGENDI: Def. eksplicitan prioritet - SALIENCE (-10000 do +10000). Ako salience nije definiran, pridružuje se prioritet = 0. Pravila s jednakim prioritetom: novo pravilo upisuje se u agendu ISPRED starog (postupak LIFO – “last in first out” ). Temeljna strategija: Izvodi se pravilo s najvećim prioritetom i izbriše iz AGENDA liste (postoje i druge ugrađene strategije). Ponovno aktiviranje s istom činjenicom se ne izvodi - trivijalna petlja. Izvođenje dok se ne iscrpi AGENDA ili opcija <int> broj izvođenja.

  6. CLIPS Neke uobičajene naredbe za pravila: (declare (salience 10)) ; na početku IF dijela pravila (ppdefrule rule_name) ; ispis pravila (pretty print) (clear) ; briši sve Varijable: ?<var_simbol> Npr.: ?ventil_21 ?zadatak Slaganje s činjenicama povezuje varijablu na IF strani, a povezivanje se prenosi na cijelo pravilo (THEN stranu).

  7. CLIPS “Wild-card” varijabla: Ne povezuje se vrijednost nego se samo detektira jedno ili više polja kako bi se pravilo moglo aktivirati Npr. postoji činjenica: (lijecnik srce <ime> <prezime>) Ako nas ne zanima ime i prezime, već samo tražimo slaganje, s IF stranom pravila, stavljamo ? na mjesta dvaju polja: (liječnik srce ? ?) Još jednostavnije: $? - sva polja (multifield match) Npr. za činjenicu: (djeca ivan ana marko) postoji slaganje s: (djeca $?djeca)

  8. CLIPS Činjenice kao relacijske strukture podataka: (deftemplate <t_name> "<comment>" ; relacija (slot-1) (slot-2) … (slot-N)) __________________________________ za svaki slot: (slot <ime_slota> (type <type>) (default <value>)) Polja (fields) u slotu: ime_slota: atribut u relacijskoj tablici type: NUMBER, STRING, SYMBOL, … value: vrijednost atributa u relacijskoj tablici Slot može imati i više polja: (multislot <ime_slota> <> <> …) ; više tip-vrijednost polja U memoriju se struktura upisuje kao činjenica s: (assert (<t_name>))

  9. CLIPS Jednostavan primjer: (samo jedna činjenica i jedno pravilo) CLIPS> (reset) ; priprema CLIPS> (assert (patka se glasa kvak)) ; upis činjenice CLIPS> (defrule patka "" ; upis pravila (patka se glasa ?kako) ; IF strana => (printf t "Patka se glasa " ?kako crlf)) ; THEN strana CLIPS> (run) ; pokretanje Patka se glasa kvak ; rezultat supstitucije u varijablu?kako CLIPS> (reset): briše postojeće činjenice iz liste postavlja početnu (initial-fact) činjenicu kreira instancije u objektno usmjerenom dijelu

  10. CLIPS Funkcije: Ugrađene funkcije +,-, /, * (prefiks notacija), i mnoge druge. Definiranje novih funkcija: (deffunction <f-name> [opt.comment] (?arg1 … ?argM) (<action1>) … (actionK)) CLIPS> (deffunction hypotenuse (?a ?b) (sqrt (+ (* ?a ?a) (* ?b ?b)))) CLIPS> (defrule calc-hyp "" (stranice ?jedna ?druga) => (printout t "Hypot = " (hypotenuse ?jedna ?druga) crlf)) CLIPS> (assert (stranice 3 4)) <Fact-0> CLIPS> (run) Hypot = 5.0

  11. CLIPS Upis sa terminala (read): CLIPS> (defrule upisi"" : pravilo “upisi” (initial-fact) ; bezuvjetno izvedi ; THEN stranu => (printout t "Upisi nesto !" crlf) ; poruka (assert (upis (read)))) ; čekaj na upis i ; pohrani kao fact (upis …) CLIPS> (defrule ispisi "" (upis ?nesto) ; ako postoji fact (upis …) => (printout t "Upisao si: " ?nesto crlf)) ; ispiši

  12. CLIPS Dinamičko povlačenje (retract) činjenice pravilom: Potrebno zbog promjene stanja svijeta i održanja konzistencije. Povlačenje preko ID činjenice ili Adresa pohranjene činjenice upisuje se u pomoćnu varijablu preko koje se dohvaća činjenica. Nije potrebno znati ID. CLIPS> (assert (cin_1)) ; činjenica cin_1 upisana <Fact-0> CLIPS>(retract 0) ; povlačenje preko ID-a CLIPS>(defrule r1 "“ ; povlačenje varijablom ?var1 <- (cin_1) ; nađi adresu činjenice i stavi u varijablu => (retract ?var1)) ; sad se može povući činjenica cin_1

  13. CLIPS – Objektno usmjereni dodaci Razred (Class) i podrazred: “is-a” značenje (ne dio nečega nego pripadnost). (defclass <class> (is-a <direct_superclass>) Npr.: (defclass UPPIE (is-a USER)) Svaki razred ima svoje “slots”, koji se nasljeđuju (moguće je imati i multislots). Jednako tako se nasljeđuju procedure (“message handlers”) pridružene pojedinim slotovima. Razredi i podrazredi navode se velikim slovima (USER, UPPIE, …)

  14. CLIPS – Objektno usmjereni dodaci

  15. CLIPS – Objektno usmjereni dodaci Neke ugrađene funkcije za manipulaciju razredima: ppdefclass ; ispiši internu strukturu undefclass ; eliminiraj razred describe-class ; ispiši dodatna obilježja class-abstractp ; Booleova funkcija, vraća TRUE ako je razred ; apstraktan (t.j. još nema instancija) Iz razreda nastaju instancije (objekti koje žive u memoriji): (make-instance [<instance-name>] of <class> <slot-override>) Dvije funkcije omogućuju konverziju između simbola i instancije razreda kako bi se mogle primijeniti funkcije iz standardnog dijela CLIPS-a (iz ne objektnog usmjerenja): (symbol-to-instance-name … ) (instance-name-to-symbol … )

  16. CLIPS – Objektno usmjereni dodaci Komunikacija u objektno usmjerenom okruženju: Instancijama se mogu poslati poruke. Instancije mogu slati poruke drugim instancijama i samoj sebi.. (send [<instance-name>] <message>) Procedura za rukovanje porukama se definira s: (defmessage-handler) CLIPS> (instances); nabroji kreirane instancije [initial-object] of INITIAL-OBJECT; uvijek postoji [Dorky] of DUCK; još dvije instancije od [Dorky_Duck] of DUCK; klase DUCK For a total of 3 instances. CLIPS> (send [Dorky_Duck] delete); pošalji poruku, t.j. TRUE; izbriši instanciju CLIPS> (instances) [initial-object] of INITIAL-OBJECT [Dorky] of DUCK For a total of 2 instances.; nema izbrisane

  17. CLIPS – Objektno usmjereni dodaci Primjer: CLIPS> (clear) CLIPS> (defclass DUCK (is-a USER) (role concrete) ; razred DUCK (slot sound (create-accessor read-write)) ; dva slota s (slot age (create-accessor read-write))) ; funkcijama pristupa CLIPS> (make-instances [Dorky_Duck] of DUCK)) ; stvori instanciju [Dorky_Duck] CLIPS> (reset) CLIPS> (send [Dorky_Duck] print) ; opiši instanciju [Dorky_Duck] of DUCK (sound nil) (age nil) CLIPS> (send [Dorky_Duck] put-sound quack) ; upiši u slot quack CLIPS> (send [Dorky_Duck] print) ; opiši instanciju [Dorky_Duck] of DUCK (sound quack) (age nil) CLIPS>

  18. CLIPS – Ekspertni sustav za dijagnostiku auta CLIPS (V6.10 07/01/98) CLIPS> (LOAD AUTO.TXT) Defining function: ask-question . . . Defining defrule: normal-engine-state-conclusions . . . TRUE CLIPS> (reset) CLIPS> (run) The Engine Diagnosis Expert System Does the engine start (yes/no)? yes Does the engine run normally (yes/no)? no Is the engine sluggish (yes/no)? no Does the engine misfire (yes/no)? no Does the engine knock (yes/no) no Is the output of the engine low (yes/no)? no Suggested Repair: Take your car to a mechanic. CLIPS> (exit)

  19. CLIPS – Ekspertni sustav za dijagnostiku auta ;;;**************************** ;;;* STARTUP AND REPAIR RULES * ;;;**************************** (defrule system-banner "“; nema uvjeta, izvodi se (declare (salience 10)) => (printout t crlf crlf) (printout t "The Engine Diagnosis Expert System") (printout t crlf crlf)) (defrule print-repair "“; Pravilo se u počrtku (declare (salience 10)); ne aktivira (repair ?item) ; jer još nema uvjeta, t.j. =>; činjenice (repair ?). (printout t crlf crlf); Odgovori korisnika će dovesti (printout t "Suggested Repair:"); do upisa te činjenice i (printout t crlf crlf); aktivaciju, te ispis (format t " %s%n%n%n" ?item)); preporučenog popravka

  20. CLIPS – Ekspertni sustav za dijagnostiku auta ; jedno pravilo za popravak (defrule determine-sluggishness "“; Ako je stanje auta - činjenica (working-state engine unsatisfactory); nezadovoljvajuće (not (repair ?)) ; i (repair ?) ne postoji => ; pozovi funkciju yes-or-no-p s upitom i ako je TRUE (if (yes-or-no-p "Is the engine sluggish (yes/no)? ") then (assert (repair "Clean the fuel line.")))); upiši (repair … ) ; ako FALSE idi na drugo pravilo ;; pomoćna funkcija yes-or-no-pkoja dalje poziva funkciju ask-question (deffunction yes-or-no-p (?question) (bind ?response (ask-question ?question yes no y n)) (if (or (eq ?response yes) (eq ?response y)) then TRUE ; mogući odziv funkcije else FALSE)); mogući odziv funkcije Allowed: yes no y n

  21. CLIPS – Ekspertni sustav za dijagnostiku auta Allowed: yes no y n Funkcija ask-question: (deffunction ask-question (?question $?allowed-values) (printout t ?question) (bind ?answer (read)); poveži ?answer s odgovorom (if (lexemep ?answer) then (bind ?answer (lowcase ?answer))); preslikaj u mala slova (while (not (member ?answer ?allowed-values)) do (printout t ?question); ako odgovor nije u skupu dozvoljenih (bind ?answer (read)); ponavljaj pitanje (if (lexemep ?answer) then (bind ?answer (lowcase ?answer)))) ?answer)

More Related