====== - 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: ./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 [[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. ./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. ===== - Zagadka Pierwsza: Problem Bruce'a Willisa ===== {{ :pl:dydaktyka:planning:die-hard-3.jpg?200|}} 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 ==== 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. - 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?