Cvičenie 7

Vyriešenú úlohu odovzdávajte v moodli.

Vyriešte úlohu o gazdovi, koze, kapuste a vlku pomocu ASP solvera. Každý stabilný model Vášho programu má zodpovedať jednému riešeniu. Riešenie má byť reprezentované predikátom occurs(N,Action), ktorý hovorí, že v kroku N sa má vykonať akcia Action.

V solveroch, ktoré zvládajú funkčné symboly môže byť Action napríklad prevez(koza), prevez(X) a pod. (prevez je vlastne funkčný symbol).

V DLV môže byť Action v skutočnosti viacero parametrov, napríklad dvojica prevez,koza, ie occurs(1,prevez,koza). V tom prípade samozrejme pozor pri generátoroch, porovnávaní rôzností akcií atď.




Niekoľko poznámok, ktoré by mohli pomôct:

Je dobré mať všetky možné fluenty a všetky možné akcie (prípadne aj s ich parametrami) vymenované v predikátoch fluent a action.

objekt(gazda). objekt(kapusta). ...
fluent(vlavo(Kto)) :- objekt(Kto).
action(prevez(Koho)) :- objekt(Kto).

V DLV sa dá buď použiť dvojica pre akciu, alebo v tomto prípade sa to dá obísť aj s tým, že na akcie a fluenty jednoducho použijeme tie isté konštanty (akcia "koza" znamená "prevez kozu"):

objekt(gazda). objekt(kapusta). ...
fluent(vlavo,Kto) :- objekt(Kto).
action(prevez,Koho) :- objekt(Kto).
objekt(gazda). objekt(kapusta). ...
fluent(Kto) :- objekt(Kto).
action(Koho) :- objekt(Kto).

Počet krokov je vopred daný. Pre každý krok N potrebujeme vybrať jednu akciu (resp dvojicu parametrov v prípade toho prvého riešenia pre DLV) do predikátu occurs(N,....).

Potrebujeme pravidlá pre efekty akcií. Tie by mali vyzerať približne takto (pozor na matiku v DLV):

holds(N+1, efekt) :- occurs(N, akcia), holds(N, predpoklad1), ...,
                                       -holds(N, predpoklad2), ...,
                                       state(N)

Potrebujeme pravidlá pre frame problem ("zotrvačnosť" ostatných fluentov, ktoré akcie nemenia). Tie by mali hovoriť zhruba: Ak fluent F platí (neplatí) v kroku N a nevieme o tom, že by v kroku N+1 mal platiť opak (lebo to odvodila nejaká akcia), tak musí platiť (neplatiť) aj v kroku N+1.

Potrebujeme zapísať počiatočný stav a zapísať podmientky (constraints) na cieľový stav

Vim logo FireFox logo CSS XHTML
Jozef Siska @ KAI FMFI UK YoYo @ KSP KAI (DAI) KSP