Cvičenia 9 -- plánovanie

Riešenie úlohy Autobusy odvzajte v moodli do 2.12.2014 18:09:59.

DLV^K

Vyriešte predchádzajúcu úlohu v prostredí DLV^K. Syntax a tak nájdete na stránke DLV^K projektu v článku "Planning under incomplete knowledge" v Introduction je čast Overwiew of K. Príklad syntaxe (blocks_world z DLV^K stránky):

Background knowledge:

blocks_world.dl
location(table).
location(B) :- block(B).

block(a). block(b). block(c).

Popis plánovacieho problému:

blocks_world.plan
fluents: on(B,L) requires block(B), location(L).
         occupied(B) requires location(B).

actions: move(B,L) requires block(B), location(L).

always:  executable move(B,L) if not occupied(B), not occupied(L), B <> L.
         inertial on(B,L).
         caused occupied(B) if on(B1,B), block(B).
         caused on(B,L) after move(B,L).
         caused -on(B,L1) after move(B,L), on(B,L1), L <> L1.

         noConcurrency.


initially: on(a,table). on(b,table). on(c,a).
goal:      on(c,b),on(b,a),on(a,table)? (3)

dlvk-vlk.dlv
o(gazda).
o(vlk). o(koza). o(kapusta).
breh(lavy). breh(pravy).

opacny(lavy,pravy).
opacny(pravy,lavy).


zle(vlk,koza).
zle(koza,kapusta).

dlvk-vlk.plan



fluents:
        at(O,B) requires o(O), breh(B).
        someone_at(B) requires breh(B).

actions:
        cross(O) requires o(O).

always:
        executable cross(O) if at(O,B), at(gazda,B), breh(B).
        inertial at(O,B).
        caused at(O,Opacny)     after cross(O), at(O,Breh),opacny(Breh,Opacny).
        caused at(gazda,Opacny) after cross(O), at(O,Breh),opacny(Breh,Opacny).
        caused -at(O,Breh)      after cross(O), at(O,Breh).
        caused -at(gazda,Breh)  after cross(O), at(O,Breh).

        caused someone_at(B) if at(O,B).

        forbidden at(O1,B),at(O2,B), not at(gazda,B), zle(O1,O2).

noConcurrency.

initially:
        at(gazda,lavy). at(koza,lavy). at(vlk,lavy). at(kapusta,lavy).

%goal:  at(gazda,pravy), at(koza,pravy), at(vlk,pravy), at(kapusta,pravy)? (7)
goal: not someone_at(lavy)? (7)


Autobusy

Vo vstupnom súbore máme údaje o autobusových linkách vo formáte bus(Line,From,To,Time), kde Line je meno linky, From a To sú zástavky a Time je čas, koľko trvá autobusu cesta z From do To. Linky sú "jednosmerné", teda Line(93,zochova,aupark,3) hovorí, že sa vieme dostať za 3 minúty zo Zochovej do Auparku, ale nie naopak.

Vyriešte úlohu plánovací problém v dlv-k s akciami take(Line,Stop) a leave(Stop), kde take hovorí, že na zástavke Stop máme nastúpiť na autobus Line a leave hovorí, že máme z neho vystúpiť na zástavke Stop.

Ak by vstup vyzeral napríklad

bus(93,dvory,aupark,2).
bus(93,aupark,zochova,3).
bus(39,zochova,"chatam sofer",2).
a chceli by sme cestovať zo zastávky dvory na chatam sofer, tak riešenním by bolo take(93,dvory), leave(zochova), take(39,zochova), leave("chatam sofer").

Poznámka: Vo vstupe sú iba jednotlivé úseky, po ktorých daný autobus chodí. Pravdepodobne budete potrebovať ešte pomocný predikát, ktorý bude hovoriť, medzi ktorými všetkými kombináciami zastávok sa dá ktorou linkou dostať (tranzitívny uzáver... :).

Vstup:

bus.dlv
from(f).
to(t).


bus(lj1,f,j1,2).
bus(lj2,j1,j2,2).
bus(lj3,j2,j3,2).
bus(lj4,j3,j4,2).
bus(lj5,j4,j5,2).
bus(lj6,j5,t,2).

bus(ljx,j2,t,10).

bus(lp1,f,pm1,2).
bus(lp1,pm1,p1,2).
bus(lp2,p1,p2,4).
bus(lp3,p2,pm3,3).
bus(lp3,pm3,t,2).

bus(lpx,p1,t,10).

bus(ls1,f,s1,6).
bus(ls1,s1,s2,6).
bus(ls2,s2,s3,6).
bus(ls2,s3,t,6).

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