slajdy v pdf

Transkript

slajdy v pdf
Úvod do umělé inteligence –
T7: CLIPS
Úvod do umělé inteligence –
CLIPS
T7: CLIPS
Syntaxe jazyka
C Language Integrated Production System Clips
je programovací jazyk (prostředí), které
podporuje pravidlové, objektově orientované i
procedurální programování.
vyvinut v NASA/Johnson Space Center, USA
ke stažení na webu na
http://www.ghg.net/clips/CLIPS.html
Data:
•
•
•
•
atomy – číselné, nečíselné, TRUE, FALSE, nil
čísla – čísla
řetězce – uzavřeny do úvozovek
seznamy (atomů, čísel, řetězců, seznamů)
proměnné začínají znakem ?
Funkce:
• funkční volání s využitím prefixové notace (jako
LISP)
(+ (+ 2 3) (* 3 3))
• definování funkcí
(deffunction max (?a ?b)
(if (> ?a ?b) then
(return ?a)
else (return ?b)))
P. Berka, 2007
Úvod do umělé inteligence –
1/15
T7: CLIPS
P. Berka, 2007
2/15
Úvod do umělé inteligence –
CLIPS pro expertní systémy
T7: CLIPS
Reprezentace znalostí
1. Fakta (rámce a jejich instance)- každý
Reprezentace znalostí:
fakt je tvořen jménem relace a (žádnou nebo
více) položkami:
• rámce
• procedurální pravidla
(adept (jmeno "Hloupý Honza")
(velikost_nohy 45)
(krev cervena)
(majetek zadny)
(dobra_rodina ne)
(princ ne))
Inferenční mechanismus:
• přímé řetězení
• bez neurčitosti (tedy nekompozicionální)
1.1 Definování faktů
(deftemplate <relation-name> [<optional-comment>]
<slot-definition>*)
Tedy CLIPS vhodný pro generativní expertní
systémy
kde <slot-definition> je:
(slot <slot-name>) | (multislot <slot-name>)
např:
(deftemplate adept "example"
(slot jmeno)
(slot velikost_nohy)
(slot krev)
(multislot majetek)
(slot dobra_rodina)
(slot princ))
slot: obsah je jedna hodnota
P. Berka, 2007
3/15
P. Berka, 2007
multislot: obsah je seznam hodnot
4/15
Úvod do umělé inteligence –
T7: CLIPS
Úvod do umělé inteligence –
2. Pravidla v procedurálním chápaní
1.2 Přidávání faktů
(if LHS then RHS)
(assert <fact>+)
např.
T7: CLIPS
(assert (adept (jmeno "Hloupý Honza")
(velikost_nohy 45)
(krev cervena)
(majetek zadny)
(princ nil))
2.1 Definování pravidel
(defrule <rule-name> [<optional-comment>]
<patterns>* => <actions>*)
např.
(defrule princ1
(noha mala)
(dobra_rodina ano)
=>
(assert (princ ano))
(printout t “je to princ” crlf))
1.3 Rušení faktů
(retract <fact-index>+)
např.
(retract 0)
1.4 Modifikování faktů
(pravidlo bez rámců)
(defrule princ2
(adept (noha mala)
(dobra_rodina ano))
=>
(assert (adept (princ ano)))
(printout t “je to princ” crlf))
(pravidlo s rámci)?
(modify <fact-index> (<slot-name> <slot-value>)+)
např. (modify 0 (velikost_nohy 42))
Použití proměnných pro uložení hodnot. Proměnné se
(duplicate <fact-index> (<slot-name> <slot-value>)+)
používají pro vázání LHS a RHS nějakého pravidla:
např. (duplicate 1 (name "Chytrý Honza"))
(defrule princ_tisk
(adept (jmeno ?jmeno)
(princ ano))
=>
(printout t ?jmeno “ je princ.” crlf))
1.5 Výpis faktů
výpis rámců
(list-deftemplates)
výpis instancí
(list-deffacts)
P. Berka, 2007
P. Berka, 2007
6/15
5/15
Úvod do umělé inteligence –
T7: CLIPS
Vázání proměnných na fakta pomocí operátoru <-.
Příslušný fakt je pak možno např. odstranit příkazem
retract:
Úvod do umělé inteligence –
T7: CLIPS
Inferenční mechanismus
1. Prohledávání báze pravidel (hledání
(defrule odstran_neprince
?f1 <- (adept (jmeno ?jmeno)
(princ ne))
=>
(printout t ?jmeno “ neni princ.” crlf)
(retract ?f1))
prvního aplikovatelného pravidla)
Pro řízení inference se používá agenda, což je
seznam pravidel, která se mají aktivovat. Agenda je
zásobník (poslední přidané pravidlo se aktivuje jako
první), pořadí vyhodnocování lze ale změnit:
nebo modifikovat příkazem modify:
(defrule princ
?f1 <- (adept (noha mala) (jmeno ?jmeno)
(dobra_rodina ano))
=>
(modify ?f1 (princ ano))
(printout t ?jmeno “ princ: ” ?princ crlf)
• Salience (priorita explicitně přiřazená
k pravidlu)
(defrule fire-rule
(declare salience 30))
(emergency (type fire))
=>
(printout t "Fire emergency" crlf))
• Rozčleněním báze znalostí (faktů i pravidel) na
2.2 Výpis pravidel
jednotlivé moduly, které se zpracovávají
samostatně
• všech
(list-defrules)
(defmodule <module-name> [<comment>])
• jednoho konkrétního
při definování faktů a pravidel se musí uvádět i název
modulu:
(ppdefrule <defrule-name>)
P. Berka, 2007
(deftemplate MODUL1::sensor (slot name))
7/15
P. Berka, 2007
8/15
Úvod do umělé inteligence –
T7: CLIPS
2. Aplikace pravidel (je-li splněn
předpoklad v LHS, provedou se akce z RHS)
Úvod do umělé inteligence –
T7: CLIPS
2.2 Možné akce
• vytváření nových faktů
2.1 Test splnění předpokladu
(assert)
• zjišťování, zda proměnná odpovídá faktům
(pattern matching)
o standardně shoda hodnot: (hair black)
• odebrání faktů
(retract)
• vstup
o negace: (hair ~black)
(bind)
o disjunkce: (hair brown | black)
• výstup
(printout)
• aritmetický test (prefixová notace)
(test (< ?velikost_nohy 40))
• logické operátory
. . .
o standardně konjunkce
o disjunkce: (or (majetek peníze) (majetek pozemky))
o negace: (not (princ ano))
o existuje fakt: (exists (adept (noha mala)))
o všechna fakta vyhovují: (forall (adept (noha ~mala)))
o logické vyplývání = přestane-li v důsledku
odstranění nějakého faktu platit LHS, odstraní se
i fakta která byla přidána RHS: (logical (…))
P. Berka, 2007
9/15
Úvod do umělé inteligence –
T7: CLIPS
P. Berka, 2007
10/15
Úvod do umělé inteligence –
T7: CLIPS
Příklad
Konzultace
Princ 1
Spuštění programu
(defrule princ
(noha mala) (slechticka_rodina ano)
=>
(assert (princ ano)))
(run [<limit>]
(defrule slechticka_rodina
(modra_krev ano) (bohata_rodina ano)
=>
(assert (slechticka_rodina ano)))
Dávkový režim
(deffacts <deffacts-name> <facts>*)
(defrule bohata_rodina1
(penize ano) => (assert (bohata_rodina ano)))
Dialogový režim
(defrule bohata_rodina2
(pozemky ano) => (assert (bohata_rodina ano)))
(bind ?string (read))
;;; Vypis vysledku
(defrule vypis_vysledku
(princ ?x) => (printout t "Princ: " ?x crlf))
Výpis výsledků
(printout t "Princ: " ?x crlf))
;;; Negativni pravidla
(defrule velka_noha
(noha velka) => (assert (princ ne)))
(defrule slechticka_rodina_ne
(slechticka_rodina ne) => (assert (princ ne)))
(defrule modra_krev_ne
(modra_krev ne) => (assert (slechticka_rodina ne)))
P. Berka, 2007
11/15
P. Berka, 2007
12/15
Úvod do umělé inteligence –
T7: CLIPS
(defrule bohata_rodina_ne
(bohata_rodina ne) => (assert (slechticka_rodina ne)))
; definice ramcu
;
(deftemplate adept
(slot jmeno) (slot velikost_nohy) (slot krev) (multislot majetek)
(slot dobra_rodina) (slot princ))
;;; Nacitani
(defrule Nacteni_nohy
(initial-fact)
=>
(printout t "Jakou ma adept velikost nohy? (mala, velka)" crlf)
(bind ?string (read))
(assert (noha ?string)))
; pravidla
;
(defrule princ
?a <- (adept (velikost_nohy ?velikost_nohy)
(dobra_rodina ano) (jmeno ?jmeno) (princ nil))
(test (< ?velikost_nohy 40))
=>
(modify ?a (princ ano))
(printout t ?jmeno " je princ" crlf))
(defrule Nacteni_krve
(initial-fact)
=>
(printout t "Ma rodina adepta modrou krev? (ano, ne)" crlf)
(bind ?string (read))
(assert (modra_krev ?string)))
(defrule ne-princ-1
?a <- (adept (velikost_nohy ?velikost_nohy)
(jmeno ?jmeno) (princ nil))
(test (>= ?velikost_nohy 40))
=>
(modify ?a (princ ne))
(printout t ?jmeno " neni princ" crlf))
(defrule Nacteni_penez
(initial-fact)
=>
(printout t "Ma rodina adepta penize? (ano, ne)" crlf)
(bind ?string (read))
(assert (penize ?string)))
(defrule ne-princ-2
?a <- (adept (dobra_rodina ne)
(jmeno ?jmeno) (princ nil))
=>
(modify ?a (princ ne))
(printout t ?jmeno " neni princ" crlf))
(defrule Nacteni_pozemku
(initial-fact)
=>
(printout t "Ma rodina adepta pozemky? (ano, ne)" crlf)
(bind ?string (read))
(assert (pozemky ?string)))
P. Berka, 2007
13/15
T7: CLIPS
(defrule dobra-rodina
?a <- (adept (jmeno ?jmeno) (krev modra)
(dobra_rodina nil) (majetek penize | pozemky))
=>
(modify ?a (dobra_rodina ano)))
(defrule spatna-rodina-krev
?a <- (adept (jmeno ?jmeno) (krev cervena)
(dobra_rodina nil))
=>
(modify ?a (dobra_rodina ne)))
(defrule spatna-rodina-bohatstvi
?a <- (adept (jmeno ?jmeno) (dobra_rodina nil)
(majetek ~penize & ~pozemky))
=>
(modify ?a (dobra_rodina ne)))
; fakta
;
(deffacts adepts
(adept (jmeno Honza) (velikost_nohy 45) (krev cervena)
(majetek zadny))
(adept (jmeno Wilibald) (velikost_nohy 39) (krev modra)
(majetek pozemky))
)
P. Berka, 2007
T7: CLIPS
Princ 2 (s využitím rámců)
(defrule bohata_rodina2_ne
(penize ne) (pozemky ne)
=>
(assert (bohata_rodina ne)))
Úvod do umělé inteligence –
Úvod do umělé inteligence –
15/15
P. Berka, 2007
14/15

Podobné dokumenty

slajdy v pdf

slajdy v pdf IF předpoklad THEN závěr A akce kde předpoklad je disjunktivní forma (disjunkce konjunkcí) literálů, závěr je seznam literálů a akce je seznam akcí (externích programů).

Více

Úvod do expertních systémů - Ústav automatizace a informatiky

Úvod do expertních systémů - Ústav automatizace a informatiky V literatuře se můžeme setkat také s pojmem znalostní systém (knowledge-based system), který je podle staršího pojetí obecnější než pojem expertní systém. Expertní systém tedy lze chápat jako zvláš...

Více

VY_12_INOVACE_5.ČJ.07

VY_12_INOVACE_5.ČJ.07 Není krásnějších pohádek než ty, které píše život sám. (Andersen) VY_12_INOVACE_5.ČJ.07

Více

Program v Clipsu

Program v Clipsu pak hledana osoba nejspis neni evidovana v databazi." crlf "Pokud nebudete rozumet nektere z nabizenych hodnot, staci zadat 'help' a pripade nazev teto hodnoty." crlf "Zadavani hodnot muzete kdykol...

Více

upravená 2006

upravená 2006 - původně navrženy pro radiovou síť, nevyužívá kontroly obsazenosti kanálu – vyšle rámec a pak řeší případné kolize - Prostá ALOHA – využití kanálu 18% - pakety každý vysílá jak se mu zachce, pokud...

Více

Ikigai- život stojí za to

Ikigai- život stojí za to výzkumů smyslu života a ikigai. Hned několik prospektivních studií v Japonsku totiž svědčí o tom, že lidé, kteří nemají své vlastní ikigai podléhají razantně vyššímu riziku mortality. Například Tan...

Více

Kódová klávesnice Alarm_keypad

Kódová klávesnice Alarm_keypad ➢ K procesoru kódové klávesnice lze připojit 2 typy klávesnic: ➢ klávesy připojené přímo každá zvlášť, lze přímo připojit 9 tlačítek, 8 tlačítek na port PB, 1 tlačítko na PD6, další lze připojit př...

Více

(Microsoft PowerPoint - 07-JavaScript.ppt [Re\236im kompatibility])

(Microsoft PowerPoint - 07-JavaScript.ppt [Re\236im kompatibility]) Základní charakteristiky • Syntaxe na základě C/Java • Netypový jazyk – implicitní deklarace proměnných – základní typy: number (float), boolean, string – funkce

Více

Domácí práce a ne/spravedlnost

Domácí práce a ne/spravedlnost orientaci v tématu nám byly pomocí texty založené kvantitativně. Jelikož se ale publikací a článků věnujících se problematice domácích prací vyskytuje velké množství, orientovaly jsme náš výběr v k...

Více