24.12.2012 Views

Zbirka zadataka iz Ekspertskih sistema

Zbirka zadataka iz Ekspertskih sistema

Zbirka zadataka iz Ekspertskih sistema

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

76 1. Pretraživanje<br />

promeni_stanje(S1, Operator, S2),<br />

moze_li(S2).<br />

Prolog ima ugrađeni mehan<strong>iz</strong>am vraćanja (backtracking) koji obezbeđuje selekciju<br />

alternativne putanje pretrage u situaciji kada se na tekuće stanje ne može primeniti nijedan<br />

operator. Ovakvo rešenje ne obezbeđuje, međutim, eliminaciju zatvorenih putanja u grafu<br />

pretrage pa se, na primer, može desiti da se majmun neprekidno šeta od vrata do prozora. U<br />

kompletnom programu koji je dat u nastavku uvedeni su novi argumenti predikata moze_li:<br />

moze_li(Stanje,Lista_stanja,Lista_operatora)<br />

U listi stanja pamte se sva stanja na parcijalnoj putanji od startnog do tekućeg stanja da bi se<br />

eliminisali oni naslednici tekućeg stanja koji se već nalaze u toj listi. U listi operatora pamte<br />

se primenjeni operatori; po nalaženju ciljnog stanja lista operatora predtavlja rešenje<br />

problema. Uveden je i jedan novi predikat, resenje, čija je uloga inicijal<strong>iz</strong>acija liste stanja<br />

operatora moze_li početnim stanjem.<br />

Rešenje<br />

Na osnovu <strong>iz</strong>loženih elemenata može se sastaviti kompletan program na Turbo Prologu.<br />

domains<br />

s= stanje(symbol,symbol,symbol,symbol)<br />

op= dohvati; popni_se; gurni(symbol,symbol);<br />

setaj(symbol,symbol)<br />

lista_stanja = s*<br />

lista_op = op*<br />

predicates<br />

pozicija(symbol)<br />

resenje(s,lista_op)<br />

moze_li(s,lista_stanja,lista_op)<br />

promeni_stanje(s,op,s)<br />

pripada_listi(s,lista_stanja)<br />

clauses<br />

resenje(Pocetno_stanje,Lista_op):moze_li(Pocetno_stanje,[Pocetno_stanje],Lista_op).<br />

pozicija(sredina).<br />

pozicija(uz_prozor).<br />

pozicija(uz_vrata).<br />

moze_li(stanje(_,_,_,ima),_,[]).<br />

moze_li(Stanje1,Lista_stanja,[Op|Lista_op]) :-<br />

promeni_stanje(Stanje1,Op,Stanje2),<br />

not(pripada_listi(Stanje2,Lista_stanja)),<br />

moze_li(Stanje2,[Stanje2|Lista_stanja],Lista_op).<br />

promeni_stanje(stanje(sredina, na_sanduku, sredina, nema),

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!