Cvičenie 8 -- plánovanie

V moodli odovzdajte riešenie úlohy Autobusy (pozor, odovzdávate dva súbory: .dl a .plan).

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)

Autobusy

Vo vstupnom súbore máme údaje o autobusových linkách vo formáte bus(Line,From,To,Time) a dva predikáty from(From) a to(To). Line je meno linky, From a To sú zástavky a Time je čas, koľko trvá autobusu cesta z From do To (ten v tejto úlohe ignorujeme). Linky sú "jednosmerné", teda bus(93,zochova,aupark,3) hovorí, že sa vieme dostať za 3 minúty zo Zochovej do Auparku, ale nie naopak. Vo vstupe budú from a to platit každé práve pre jednu zastávku (začiatok a cieľ cesty, ktorú máte naplánovať).

Vyriešte úlohu ako 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).
from(dvory).
to("chatam sofer").
tak chceme cestovať zo zastávky dvory na chatam sofer a 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... len nezabúdajte, že linky sú jednosmerné).

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