|
|
pl:dydaktyka:planning:pddl_2 [2016/04/20 14:52] msl [4 Zagadka Pierwsza: Przelewanie Wody] |
pl:dydaktyka:planning:pddl_2 [2019/06/27 15:50] |
====== - Planowanie z zastosowaniem Fluentów ====== | |
| |
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. | |
| |
===== - Preliminaria ===== | |
| |
Dotychczas nasza reprezentacja problemów planowania opierała się o rachunek predykatów pierwszego rzędu. Standard PDDL 2.1 rozszerza tę reprezentacje o [[https://en.wikipedia.org/wiki/Fluent_%28artificial_intelligence%29|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. | |
| |
===== - Przygotowania ===== | |
| |
Proszę ściągnąć {{:pl:dydaktyka:planning:metric-ff-lab.zip|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: | |
| |
<code bash> | |
./ff -o ./examples/hanoi/problem.pddl -f ./examples/hanoi/instance.pddl | |
</code> | |
| |
Jeżeli komenda nie działa, proszę przekompilować solver. Instrukcje nie różnią się od tych przedstawionych na [[pddl|poprzednim laboratorium w sekcji 5]]. | |
| |
===== - Przykład: Hanoi ===== | |
| |
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 | |
* warunki arytmetyczne --- ''<'', ''>'', ''='', etc. | |
* wyrażenia arytmetyczne --- ''(+ arg1 arg2)'', ''(- ...)'', ''(* ...)'' , ''(/ ...)'' | |
* zmiana wartości fluentów ''(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. | |
| |
<code bash> | |
./ff -o ./examples/hanoi/problem.pddl -f ./examples/hanoi/instance.pddl -s 0 | |
</code> | |
| |
Proszę przeanalizować przykład i wykorzystać jako referencję do rozwiązywania kolejnych problemów. | |
| |
===== - Zagadka Pierwsza: Problem Bruce'a Willisa ===== | |
| |
Proszę obejrzeć fragment [[https://www.youtube.com/watch?v=BVtQNK_ZUJg|Szklanej Pułapki 3]]. Przedstawiona tam zagadka należy do dość dużej rodziny problemów - katalog ''./examples/jugs'' zawiera model podobnego problemu [[http://www.riddleministry.com/riddles/water-puzzle-19-13-7/1246/|przelewania wody]]. | |
| |
==== Zadania obowiązkowe ==== | |
| |
Proszę uzupełnić plik ''problem.pddl'', tak, aby rozwiązać instancję ''instance.pddl'' (plan powinien składać się z 16 akcji). | |
| |
==== Zadania na plus ==== | |
| |
<WRAP center round tip 60%> | |
W PDDL 2.1 można formułować efekty warunkowe: | |
<code lisp> | |
(when (warunek) | |
(efekt) | |
) | |
</code> | |
Oznacza to, że dana akcja będzie miała określony efekt jedynie, gdy spełniony jest zadany warunek. | |
| |
</WRAP> | |
| |
| |
- Czy jesteś w stanie zamodelować problem używając tylko jednej akcji? | |
- Czy jesteś w stanie zmodyfikować problem tak, żeby uwzględniał on fontannę? Jeżeli tak, rozwiąż Problem Bruce'a Willisa. | |
- Czy jesteś w stanie zamodelować ten problem w MiniZincu? | |
| |
===== - Zagadka Druga: Ucieczka Przed Zombie ===== | |
| |
Proszę obejrzeć pierwsze dwie minuty filmu ze [[http://interestingengineering.com/can-solve-impossible-bridge-riddle/|strony o interesujących problemach]]. Katalog ''./examples/zombie-escape'' zawiera pliki związane z przedstawioną tam zagadką. | |
| |
==== Zadania obowiązkowe ==== | |
| |
Proszę uzupełnić pliki ''problem.pddl'' i ''instance.pddl'' tak, aby solver rozwiązał zagadkę z filmiku. | |
| |
==== Zadania na plus ==== | |
| |
- Czy jesteś w stanie zamodelować problem używając tylko jednej akcji? | |
- Czy jesteś w stanie w podobny sposób zamodelować [[http://www.learn4good.com/games/puzzle/boat.htm|problem misjonarzy i kanibali]]? | |
- Czy jesteś w stanie zamodelować ten problem w MiniZincu? | |
| |