# 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.

```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).

```