Celem laboratorium jest rozszerzenie wiedzy na temat języka PDDL o tzw. fluenty. Laboratoria opierają się o samodzielną pracę nad planowaniem w kontekście popularnych zagadek logicznych.
Dotychczas nasza reprezentacja problemów planowania opierała się o rachunek predykatów pierwszego rzędu. Standard PDDL 2.1 rozszerza tę reprezentacje o fluenty, które w przypadku PDDL przyjmują postać przypominającą zmienne znane z klasycznych języków programowania. Prócz predykatów w modelu znajdą się funkcje, które zwracają wartości, które będą zmieniać się w czasie.
Proszę ściągnąć kod solvera wspierającego PDDL 2.1 wraz z problemami, które będziemy dzisiaj modelować. Proszę w konsoli przejść do rozpakowanego katalogu i przetestować działanie solvera:
./ff -o ./examples/hanoi/problem.pddl -f ./examples/hanoi/instance.pddl
Jeżeli komenda nie działa, proszę przekompilować solver. Instrukcje nie różnią się od tych przedstawionych na poprzednim laboratorium w sekcji 5.
Nowy solver wspiera kilka nowych konstrukcji. Proszę przyjrzeć się plikom: ./examples/hanoi/problem.pddl
i ./examples/hanoi/instance.pddl
. Do nowości należy zaliczyć:
(:requirements :fluents)
— informuje solver, że nasz model zawiera fluenty:functions (…)
— sekcja zawierająca wszystkie fluenty użyte w modelu<
, >
, =
, etc.(+ arg1 arg2)
, (- …)
, (* …)
, (/ …)
(increase fluent wartość)
, czyli fluent += wartość
, i inne, np.(decrease …
, czyli -=
(assign …
, czyli =
(:metric minimize fluent)
— informuje solver, jakie plany są dla nas interesujące. Solver domyślnie zakłada istnienie tej linijki. Jeżeli jej nie ma (lub chcemy ją zignorować), powinniśmy uruchomić solver z flagą -s 0
, np../ff -o ./examples/hanoi/problem.pddl -f ./examples/hanoi/instance.pddl -s 0
Proszę przeanalizować przykład i wykorzystać jako referencję do rozwiązywania kolejnych problemów.
Proszę obejrzeć fragment Szklanej Pułapki 3. Przedstawiona tam zagadka należy do dość dużej rodziny problemów - katalog ./examples/jugs
zawiera model podobnego problemu przelewania wody.
Proszę uzupełnić plik problem.pddl
, tak, aby rozwiązać instancję instance.pddl
(plan powinien składać się z 16 akcji).
W PDDL 2.1 można formułować efekty warunkowe:
(when (warunek) (efekt) )
Oznacza to, że dana akcja będzie miała określony efekt jedynie, gdy spełniony jest zadany warunek.
Proszę obejrzeć pierwsze dwie minuty filmu ze strony o interesujących problemach. Katalog ./examples/zombie-escape
zawiera pliki związane z przedstawioną tam zagadką.
Proszę uzupełnić pliki problem.pddl
i instance.pddl
tak, aby solver rozwiązał zagadkę z filmiku.