Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:dydaktyka:krr:lab_pddl [2015/06/10 01:26] msl [Automatyczne rozwiązywanie problemów zapisanych w PDDL] |
pl:dydaktyka:krr:lab_pddl [2019/06/27 15:50] (aktualna) |
| |
<code lisp> | <code lisp> |
| |
(define (domain blocksworld) | (define (domain blocksworld) |
(:requirements :strips) ; wymagany STRIPS | (:requirements :strips) ; wymagany STRIPS |
===== - Automatyczne rozwiązywanie problemów zapisanych w PDDL ===== | ===== - Automatyczne rozwiązywanie problemów zapisanych w PDDL ===== |
| |
- Proszę pobrać solver {{:pl:dydaktyka:krr:ff.zip|Fast Forward}} (więcej o solverze i jego wynikach na [[https://fai.cs.uni-saarland.de/hoffmann/ff.html|jego stronie domowej]]). Archiwum ''FF.zip'' zawiera katalog z plikami źródłowymi oraz plik binarny skompilowany na Ubunty 64bit (powinno działać na serwerze uczelnianym). W razie potrzeby kompilacja przebiega poprzez wykonanie kolejno:) | - Proszę pobrać solver {{:pl:dydaktyka:krr:ff.zip|Fast Forward}} (więcej o solverze i jego wynikach na [[https://fai.cs.uni-saarland.de/hoffmann/ff.html|jego stronie domowej]]). Archiwum ''FF.zip'' zawiera katalog z plikami źródłowymi oraz plik binarny skompilowany na Ubunty 64bit (powinno działać na serwerze uczelnianym). W razie potrzeby kompilacja wymaga zainstalowania narzędzi [[http://dinosaur.compilertools.net/|''flex'' oraz ''bison'']] i przebiega poprzez wykonanie kolejno: |
- ''make very clean'' | - ''make very clean'' |
- make | - ''make'' |
- Proszę uruchomić wyniki prac z poprzednich ćwiczeń. Solver jest wywoływany poprzez komendę: | - Proszę uruchomić wyniki prac z poprzednich ćwiczeń. Solver jest wywoływany poprzez komendę: |
* ''./ff -o <sciezka do pliku z domena> -f <sciezka do pliku z instancja problemu>'' | * ''./ff -o <sciezka do pliku z domena> -f <sciezka do pliku z instancja problemu>'' |
- Proszę porównać wydajność solvera w porównaniu do rozwiązania Prologowego z laborki "przeszukowanie grafów") | - Proszę porównać wydajność solvera do rozwiązania Prologowego z laborki "przeszukowanie grafów") |
| |
| ===== - Typowanie ===== |
| |
| Poprzez dopisanie '':typing'' w sekcji '':requirements'' można rozszerzyć możliwości języka PDDL o dodanie typów do istniejących obiektów, czy też parametrów akcji. Można w ten sposób małym kosztem wyeliminować dużą liczbę nielegalnych akcji. |
| |
| Typy definiowane są po sekcji '':requirements'' poprzez dopisanie: ''(:types nazwa1 nazwa2 ...)'' dla typów o nazwach ''nazwa1'', ''nazwa2'', etc. Następnie każdy parametr predykatu i akcji musi zostać opatrzony odpowiednią adnotacją określającą jego typ, np. ''?x - typ'' oznacza, że parametr ''?x'' musi być typu ''typ'' w danej akcji lub predykacie. |
| |
| Podobnie w definicji instancji problemu należy wszystkie obiekty opatrzyć odpowiednimi adnotacjami (''- typ'' określającymi ich typ. |
| |
| ==== - Ćwiczenie ==== |
| |
| Proszę uzupełnić pliki świata klocków o adnotacje i przetestować, czy nadal wszystko działa. |
| |
| <WRAP center round tip 60%> |
| Czy jesteś w stanie zasymulować typowanie bez dodawania konstrukcji '':typing''? Jak można byłoby tego dokonać w Prologu? |
| </WRAP> |
| |
| ==== - Wieże Hanoi ==== |
| |
| Mając już przetestowaną reprezentację problemu świata klocków, proszę zgeneralizować problem dodając do niego dwa dodatkowe elementy: |
| - na stole jest ograniczona liczba miejsc, na których można położyć klocek |
| - żeby położyć klocek A na klocku B, wymagane jest, aby klocek B był większy od klocka A |
| Uwagi: |
| |
| * nie jest wymagane, aby w problemie istniał tylko jeden klocek danego rozmiaru |
| * na początku można przyjąć, ze liczba miejsc na stole jest stała i wynosi, np. 3. |
| * można również założyć, że istnieje określona liczba klocków |
| * następnie należy jednak zgeneralizować model, tak by obsługiwał różną liczbę wolnych miejsc i klocków zdefiniowaną w pliku instancji problemu |
| |
| ===== - Action Description Language ===== |
| |
| Reprezentacja STRIPS jest bardzo ograniczona i, aby rozszerzyć warunki akcji o nowe konstrukcje, należy dopisać w sekcji '':requirements'' dopisać dodatkowe wymaganie '':adl''. [[http://en.wikipedia.org/wiki/Action_description_language#Comparison_between_STRIPS_and_ADL|ADL]] różni się od STRIPS w kilku zasadniczych względach, m.in.: |
| * wspierane są warunki [[http://pl.wikipedia.org/wiki/Rachunek_predykat%C3%B3w_pierwszego_rz%C4%99du|pierwszego rzędu]] (w praktyce oznacza to dodanie kwantyfikatorów do języka): ''(forall (?x1 ?x1 ...) <warunek>) (exists (?x1 ?x2 ...) <warunek>)'' |
| * warunki mogą zawierać negatywne literały: ''(not <warunek>)'' |
| * warunki mogą zawierać alternatywy: ''(or <warunek1> <warunek2>)'' |
| * [[http://en.wikipedia.org/wiki/Closed-world_assumption|świat jest otwarty]] (w STRIPSie, tak samo jak w Prologu [[http://en.wikipedia.org/wiki/Closed-world_assumption|świat jest zamknięty]]) |
| |
| ==== - Ćwiczenia ==== |
| |
| - w definicji dziedziny świata klocków należy przy pomocy nowych konstrukcji wyeliminować ''clear''. |
| |
| |