24.12.2012 Views

Zbirka zadataka iz Ekspertskih sistema

Zbirka zadataka iz Ekspertskih sistema

Zbirka zadataka iz Ekspertskih sistema

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

72 1. Pretraživanje<br />

Algoritam pretrage po dubini <strong>iz</strong>abran je na osnovu sledećih razmatranja:<br />

• Rešenje se može naći u relativno malom broju koraka. Taj broj manji je ili jednak dužini<br />

kraće liste <strong>iz</strong> početnog stanja pošto se svakom primenom operatora <strong>iz</strong> obe liste uklanja bar<br />

po jedan projektil.<br />

• Problem ima relativno veliki faktor grananja. Operatori op2 i op3 mogu se na određeno<br />

stanje sa različitim argumentima. Na primer, ako je u određenom stanju pretrage dužina<br />

liste X, koju ćemo označiti sa n, manja do jednaka dužini liste Y, potrebno je razmotriti<br />

⎛n⎞<br />

⎜ ⎟<br />

⎝2<br />

⎠<br />

različitih kombinacija argumenata operatora op2 gde ⎝ ⎜⎛<br />

n⎞<br />

⎟<br />

2 ⎠<br />

= n * (n-1) predstavlja broj<br />

različitih parova projektila <strong>iz</strong> liste od n projektila. Naravno, mora biti zadovoljen uslov da<br />

zbir snaga <strong>iz</strong>abranih projektila odgovara snazi jednog projektila <strong>iz</strong> liste Y, što smanjuje<br />

broj primena operatora Op2, ali je taj broj i dalje veliki. U početnom stanju treba, na<br />

primer, ispitati 56 parova projektila <strong>iz</strong> liste X od kojih uslove zadovoljava 9 parova:<br />

(9,11), (9,3), (9,7), (11,9), (11,5), (9,3), (9,7), (3,4) i (5,7). Neki parovi se ponavljaju jer se<br />

u listi X nalaze dva različita projektila iste snage 9.<br />

• Graf pretrage je acikličan jer nova stanja poseduju manji broj projektila od stanja -<br />

prethodnika u grafu pretrage.<br />

Rešenje<br />

Program koji rešava zadati problem napisan je na TURBO PROLOG-u.<br />

domains<br />

projektil = integer<br />

lista_projektila = projektil*<br />

stanje = listeXY(lista_projektila,lista_projektila)<br />

operator = op1(projektil) ; op2(projektil,projektil,projektil);<br />

op3(projektil,projektil,projektil)<br />

lista_operatora = operator*<br />

predicates<br />

nadji_resenje(stanje,lista_operatora)<br />

primeni_op(stanje,operator,stanje)<br />

uzmi_projektil(lista_projektila,projektil,lista_projektila)<br />

duzina_liste(lista_projektila,integer)<br />

uzmi_dva_projektila(lista_projektila,projektil,projektil,<br />

lista_projektila)<br />

clauses<br />

nadji_resenje(listeXY([],[]),[]).<br />

nadji_resenje(Tek_stanje,[Op|Lista_op]):primeni_op(Tek_stanje,Op,Novo_stanje),<br />

nadji_resenje(Novo_stanje,Lista_op).<br />

primeni_op(listeXY(X,Y),op1(P),listeXY(Novo_x,Novo_y)):-

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

Saved successfully!

Ooh no, something went wrong!