Zadanie polega na napisaniu programu agenta do zagadnienia wumpusa. Program
musi być napisany w Prologu i będzie wykonywany przez symulator świata wumpusa
o nazwie Jovolog, prezentowany na zajęciach. Symulator ma wbudowaną wersję
interpretera Prologu o nazwie tuProlog.
Agent powinien starać się znaleźć złoto i zakończyć grę unikając zagrożeń
(wumpusa i rozpadlin). Pozyskanie złota daje +1000 punktów, a wykonanie
każdej akcji -1 punkt, z wyjątkiem wystrzelenia strzały, które dolicza -5
punktów. Jeśli gra kończy się śmiercią agenta (przez wumpusa albo dziurę),
zamiast normalnego wyjścia, doliczane jest -1000 punktów. Celem strategii
agenta powinna być maksymalizacja średniego wyniku punktowego na "średnim"
świecie. Agent może wycofać się bez znalezienia złota, jeśli nie może go
znaleźć, albo może czasem podejmować kroki ryzykowne. Ogólnie powinien
działać oportunistycznie, to znaczy wykorzystywać do maksimum korzystne
sytuacje.
W dodatku do ogólnych praw świata wumpusa, przedstawionych na zajęciach,
przyjmujemy następujące założenia. Świat wumpusa jest prostokątem o dowolnych
ale znanych rozmiarach, które są udostępniane agentowi w kroku 1. Istnieje
dokładnie jeden wumpus, jedno złoto, i pewna liczba dziur, losowo
rozmieszczonych. Agent zawsze rozpoczyna w polu (1,1) skierowany na wschód, i
ma jedną strzałę.
Technicznie, program agenta musi pozytywnie odpowiedzieć na zapytanie
act(Action,Knowledge) z pełną unifikacją obu zmiennych do wartości
stałych. Zmienna Action określa akcję wybraną przez agenta w bieżącym ruchu.
Zmienna Knowledge jest równa liście faktów, które agent pragnie zachować na
następne uruchomienie programu w kolejnym ruchu. Zmienna Knowledge tworzy
mechanizm, za pomocą którego agent może budować swoją wiedzę wynikającą z
eksploracji świata wumpusa.
Agent świata wumpusa powinien poszukiwać złota, tzn. nie może ograniczyć się
do krótkiej rundy po świecie i wycofania się. Ocena zadania składa się z
oceny bazowej za samodzielnie napisany program agenta, który powinien
znajdować złoto co najmniej w najprostszych przypadkach. Do tej oceny
doliczana jest premia za sumaryczny wynik punktowy uzyskany przez agenta.
Niepoprawny program agenta, tzn. taki, który albo nie jest poprawnym programem
Prologu, albo nie odpowiada twierdząco na zapytanie act z odpowiednią
unifikacją argumentów, albo w ogóle nie kończy pracy w rozsądnym czasie,
otrzyma natomiast karę (poza utratą punktów wynikającą z nieukończenia danej
rundy). Warto więc zwrócić uwagę na poprawność programu.
Opis symulatora i świata wumpusa:
http://www.kcir.pwr.edu.pl/%7Ewitold/aiuwr/2010_projekty/jovolog/
Symulator można pobrać z linka:
http://www.kcir.pwr.edu.pl/%7Ewitold/ai/jovolog.tar.gz
W tym pakiecie znajdują się przykładowe programy agenta omawiane na zajęciach.
Ilustrują one realizację prostej strategii z nawigacją w świecie wumpusa.
Jednak nie zawierają żadnych zabezpieczeń przed zagrożeniami świata wumpusa,
ani żadnej metody systematycznego przeszukiwania tego świata.
Jeśli nigdy wcześniej nie miałeś/aś do czynienia z Prologiem, to najlepiej
jest zacząć od przeczytania i przerobienia jakiegoś podręcznika/samouczka
(tutorial), aby zapoznać się z językiem i mechanizmami działania Prologu. (Na
stronie kursu jest kilka linków do takich podręczników on-line; użyj jednego z
nich lub znajdź inny, który bardziej Ci odpowiada.)
Zwróć uwagę na mechanizmy rekurencyjne - np. Prolog wywołujący się
rekurencyjnie w celu udowodnienia faktu pośredniego, potrzebnego mu w trakcie
dowodzenia innego faktu na wyższym poziomie. Jak również rekurencyjnie
zapisywane reguły programu. Warto samodzielnie przerobić ćwiczenia z takiego
samouczka, przynajmniej w zakresie: tworzenia faktów i reguł, oraz budowania i
przeszukiwania list.
Pomimo iż w trakcie pracy nad strategią świata wumpusa uruchamianie
oddzielnego interpretera Prologu nie jest potrzebne, to warto taki interpreter
sobie zainstalować i przećwiczyć na nim podstawowe operacje: uruchamiania
interpretera, wczytywania programu, inicjowania zapytań, oraz prostych
mechanizmów debugowania (np. przez wyświetlanie komunikatów na stdout).
Popularnym i łatwo dostępnym interpreterem Prologu jest SWI Prolog - projekt
społecznościowy oryginalnie wywodzący się z University of Amsterdam. Innym
popularnym systemem jest Gnu Prolog napisany przez Daniela Diaza.