Modeliranje Wumpus svijeta 1. Predmet ove vjezbe je stara (u terminima racunarskih znanosti) igra nazvana po grabezljivom cudovistu Wumpusu. Pazljivo procitaj opis te igre te odigraj nekoliko igara kako bi stekao/la osjecaj o problemima sa kojima se protagonist te igre susrece. 2. Wumpus svijet je jednostavno polje dimenzija 4x4, pa ga je prikladno modelirati matricom. Kako u svakom polju moze biti po nekoliko objekata (zlato, wumpus, jama), elementi matrice moraju biti skupovi objekata. Organiziranje podataka u matrice u Prologu je nesto slozenije nego u ostalim programskim jezicima. U prethodnoj vjezbi, redci matrice se prikazuju pomocu liste ciji elementi su opet liste. Prednost tog pristupa je konceptualna jednostavnost, med/utim, pokazuje se da je takav pristup dosta neefikasan. Za efikasniju izvedbu matrica, potrebno je iskoristiti ugrad/ene metapredikate arg/3, functor, i =... Pronad/i i prouci opis tih predikata u dokumentaciji SWI prologa. 3. U vecim programima, jako je bitna pravilna podjela posla na nacin da se glavni problem hijerarhijski razdijeli na veci broj manjih problema koji su cim vise nezavisni. Jedan od problema koji se pri tome javlja je da se u rjesenjima razlicitih manjih problema mogu javiti isti identifikatori (tzv. name-clashing problem). Taj problem se u Prologu moze rijesiti upotrebom modula. Procitaj dio dokumentacije SWI prologa u kojem je objasnjeno koristenje modula. 4. Biblioteka za rad sa matricama je predlozen u programskom modulu array.pl. Dobra je navika uz svaki programski modul priloziti i proceduru koja testira funkcionalnost koju modul pruza. Testiranje modula za rad sa matricama se tako moze obaviti pozivanjem predikata array:goal/0. 5. Upotrebom modula za rad sa matricama, oblikuj modul za prikaz Wumpus svijeta i njegovu inicijalizaciju, u skladu sa slijedecim uputama: 1. svijet prikazi kao matricu ciji elementi su liste objekata koji se na doticnom polju nalaze (agent, jama, wumpus, zlato); 2. neka se agent prilikom inicijalizacije nalazi na lijevom gornjem polju matrice (1,1) - tradicionalno, koordinate u ovoj igri pocinju od jedan; 3. neka se wumpus nalazi na slucajno odabranom polju matrice koje ne smije biti pocetno, uz uniformnu razdiobu; 4. neka svako polje moze biti jama, uz vjerojatnost od 0.2; 5. konacno, neka se zlato (kao i Wumpus) nalazi na slucajno odabranom polju matrice koje ne smije biti pocetno, uz uniformnu razdiobu. Zaglavlje i testni predikat trazenog modula su zadani datotekom world.pl. 6. Oblikuj modul za percepciju agenta koji opisuje objekt za predstavljanje pet podrazaja koje agent moze percipirati u wumpus svijetu: propuh (breeze), smrad (stench), sjaj (glitter), udarac (bump), urlik (scream). Buduci da se podrazaji 'udarac' i 'urlik' ne mogu odrediti samo na temelju trenutnog stanja svijeta, oni se moraju specificirati izvani, kao dodatni parametri predikata za kreiranje objekta. Tako glavni predikat trazenog modula percept_create(World, I,J, Bump,Scream, Percept) treba odrediti podrazaje 'propuh', 'smrad' i 'sjaj' na temelju zadanog svijeta World i koordinata agenta (I,J), te inkorporirati ih zajedno sa ostala dva podrazaja Bump i Scream u strukturirani objekt Percept. Zaglavlje i testni predikat trazenog modula su zadani datotekom percept.pl. Pored glavnog predikata percept_create/6, sucelje modula sadrzi i pet pristupnih predikata kojima se omogucava neovisnost ostalih modula u slozenom programu od izvedbenih detalja strukture podataka za prikaz slozenog podrazaja. Predikati trebaju uspjeti samo ako je odgovarajuci podrazaj prisutan u slozenom podrazaju zadanom jedinim argumentom. Ovaj zadatak nije uvjet za kolokviranje vjezbi, ali bez njega se ne moze dobiti vise od 67% bodova. 7. Oblikovati modul za prikaz modela svijeta kako ga vidi agent (mape). Neka model ponovo bude matrica ciji elementi su liste objekata, s tim da treba uvesti nove objekte: * moguca jama; * moguci Wumpus; * sigurno polje (polje na kojem sigurno nije ni jama ni Wumpus); * posjeceno polje. Dva glavna javna predikata modula neka budu predikat za inicijalizaciju model_create/1, i predikat za azuriranje modela model_update(Model,Percept,I,J, ModelNew), kojim se slozeni podrazaj Percept percipiran na upravo posjecenom polju (I,J) koristi za upotpunjavanje sadrzaja mape. Ovaj zadatak nije uvjet za kolokviranje vjezbi s maksimalnim brojem bodova.