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