JUI přednáška Příklad využití Prologu pro tvorbu expertních systémů RNDr. Jiří Dvořák, CSc.
2 Nová syntaxe pravidel a faktů Pravidla: if podmínka then závěr Podmínka může být složena z jednoduchých podmínek spojených pomocí and a or. Zavedení nových operátorů :-op(800,fx,if). :-op(700,xfx,then). :-op(300,xfy,or). :-op(200,xfy,and). Fakta: fact(tvrzení).
3 Interpret pro novou syntaxi is_true(P):-fact(P). is_true(P):-if Podmínka then P, is_true(Podmínka). is_true(P1 and P2):-is_true(P1),is_true(P2). is_true(P1 or P2) :-is_true(P1);is_true(P2). Nevýhodou této jednoduché inferenční procedury je skutečnost, že uživatel musí zadat všechna relevantní fakta ještě před zahájením procesu usuzování. Fakta by se měla zadávat interaktivně v dialogu s expertním systémem v okamžiku, kdy jsou zapotřebí.
4 Mechanismus dopředného řetězení forward:-new_derived_fact(P), , write('Odvozeno:'),write(P),nl, assert(fact(P)),forward; write('Zadna dalsi fakta:'). new_derived_fact(Zaver):- if Podm then Zaver, not fact(Zaver), composed_fact(Podm). composed_fact(Podm):-fact(Podm). composed_fact(Podm1 and Podm2):- composed_fact(Podm1),composed_fact(Podm2). composed_fact(Podm1 or Podm2):- composed_fact(Podm1);composed_fact(Podm2).
5 Vysvětlovací mechanismus :-op(800,xfx,<=). is_explained(P,P):-fact(P). is_explained(P,P <= DukazPodm):- if Podm then P,is_explained(Podm,DukazPodm). is_explained(P1 and P2, Dukaz1 and Dukaz2):- is_explained(P1,Dukaz1),is_explained(P2,Dukaz2). is_explained(P1 or P2,Dukaz):- is_explained(P1,Dukaz);is_explained(P2,Dukaz). Tento mechanismus poskytne vysvětlení, jak se dospělo k výsledku. Jde v podstatě o generování důkazního stromu. is_explained(P,Dukaz) platí, jestliže Dukaz je důkaz, že P platí.
6 Zpracování neurčitosti :-op(900,xfx,::). certainty(P,Jist):-given(P,Jist). certainty(P,Jist):- if Podm then P :: J1, certainty(Podm,J2), Jist is J1*J2. certainty(Podm1 and Podm2,Jist):- certainty(Podm1,Jist1), certainty(Podm2,Jist2), Jist is min(Jist1,Jist2). certainty(Podm1 or Podm2,Jist):- certainty(Podm1,Jist1), certainty(Podm2,Jist2), Jist is max(Jist1,Jist2).