Zadanie 3
Post date: Apr 08, 2014 7:8:20 AM
Świat Wumpusa
Termin oddania zadania: tydzień 5-9.05.2014
Uwaga! w czwartek 8.5.2014 są Juwenalia. Ostatnie zajęcia czwartkowe przed deadlinem odbywają się w środę 30.04.2014, zadanie będzie można też oddać na konsultacjach w środę, 7.05.2014.
Opis zadania: http://sequoia.ict.pwr.wroc.pl/~witold/ai/Jovolog_zadanie.html
Program Jovolog: http://sequoia.ict.pwr.wroc.pl/~witold/ai/jovolog.tar.gz
Uwagi praktyczne do zadania:
Debugging w SWI-prologu.
W środowisku uruchomieniowym Jovolog bardzo trudno jest ustalić błędy w kodzie agenta. Najłatwiej jest testować funkcję agenta w dedykowanym prologu i dopiero później sprawdzać ją w środowisku uruchomieniowym. Można w tym celu użyć SWI-prologa (http://www.swi-prolog.org/download/stable). Niestety SWI-Prolog i Jovolog inaczej traktują predykaty dynamiczne (ustawiane za pomocą assert/1). W Jovologu odwołanie do nieistniejącego predykatu jest zwykłą porażką podczas przeszukiwania po której następuje backtracking, zaś w SWI-prologu odwołanie się do nieistniejącego predykatu domyślnie powoduje wyjątek i zerwanie obliczeń. Aby to zmienić musimy poinformować SWI-Prologa, że pewne predykaty są dynamiczne i mogą nie występować w bazie (więcej tu: http://www.swi-prolog.org/howto/database.html).
Jeśli SWI-prolog podaje nam błędy takie jak: "ERROR: act/2: Undefined procedure:..." odwołujące się do predykatów ustawianych dynamicznie przez Jovologa (np. glitter,stench, breeze...) to musimy go o nich poinformować. W pliku z kodem agenta dodajemy dyrektywę SWI-prologa:
:- dynamic stench/0, breeze/0, glitter/0, bump/0, scream/0, inne_predykaty_zwracane_na_liscie_Knowledge.
Dyrektywę :- dynamic... należy zakomentować przed uruchamianiem agenta w Jovologu!
Wiedza agenta zebrana jest w okienku "Current player knowledge predicates". Predykaty można skopiować do pliku z agentem aby debuggować bierzący krok.