You are on page 1of 51

U slucaju da primetite neke greske, javite na mi10063@alas.matf.bg.ac.rs!

Vetaka inteligencija beleke sa vebi


Vebe 1: 25.02.2013
Svaki od navedenih problema predstaviti iskaznom formulom i koristei minisat reava nai sva mogua reenja: 1) imamo minesweeper tabelu: 1 A C 1 B 2 (1 oznaava da se u njegovoj okolini nalazi jedna minica, 2 dve minice itd.) Reenje: (A \/ B) /\ ~(A /\ B) /\ (A \/ B) /\ (A \/ C) /\ (B \/ C ) /\ ~(A /\ B /\ C) Da bi se formula prosledila minisat reavau, ona mora biti u KNF. Dobijamo: KNF: (A \/ B) /\ (~A \/ ~B) /\ (A \/ C) /\ (B \/ C ) /\ (~A \/ ~B \/ ~C) Prva linija u svakom fajlu koji se prosleuje kao ulaz za minisat je oblika: p cnf broj_iskaznih_slova broj_klauza_u_KNF Svaka sledea linija odgovara po jednoj klauzi, i na kraju se nalazi 0, npr za formulu: (p \/ q) /\ (q \/ ~r), ulazni fajl bi izgledao ovako: p cnf 3 2 120 /* p \/ q */ 2 -3 0 /* q \/ ~r */ Sada, reenje naseg zadatka dobijamo sa: p cnf 3 5 120 -1 -2 -3 0 130 230 -1 -2 0 Minisat reava ce nam dati reenje -1 2 3, sto odgovara reenju A=0, B=1, C=1 Kada proveravamo da li ima jos reenja, samo na ove ve postojee formule, dodajemo negaciju ovog reenja na kraj, poveavamo broj klauza za 1 i ulazni fajl izgleda: p cnf 3 6 120
Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

-1 -2 -3 0 130 230 -1 -2 0 1 -2 -3 Minisat reava ce dati reenje 1 -2 3, sto odgovara resenju A=1, B=0, C=1 Kada ubacimo i negaciju ovog reenja, ulazni fajl je: p cnf 3 7 120 -1 -2 -3 0 130 230 -1 -2 0 1 -2 -3 -1 2 -3 I za ovaj ulaz minisat izbacuje poruku da nema reenja. Sto znaci da nas problem ima tacno 2 reenja i to su A = 1, B=0, C=1, odnosno A=0, B=1, C=1. 2.Robot rasporedjuje 2 objekta u 2 kutije. Ne smeju dva objekta da budu u jednoj kutiji. [bitno] Opisati PROBLEM, a ne reenje zadatka! Kada bi napisali (A /\ ~B) \/ (B/\~A) MI BI OPISALI reenje PROBLEMA, A TO NIJE ONO STO SE OD NAS TRAZI! A,B objekti 0,1 --kutije

Reenje: (A \/ B) /\ ~(A /\ B) /*objekti treba da se nadju u jednoj kutiji, ali ne smeju u obe*/ KNF: (A \/ B) /\ (~A \/ ~B) Minisat: p cnf 2 2 120 -1 -2 0 /*Reenje -1 2 0 A=0, B=1*/ p cnf 2 3 120 -1 -2 0 1 -2 0 /*Reenje 1 -2 0 A=1, B=0*/ p cnf 2 4 120 -1 -2 0 1 -2 0
Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

-1 2 0 /*nema vise reenja*/ 3.Imamo tabelu 2x2 i u svakoj vrsti moze da se nae tacno 1 eton. A B C D Reenje: (A \/ B) /\ ~(A /\ B) /\ (C \/ D) /\ ~(C /\ D) /\ ~(~A /\ ~B) /\ ~(~C /\ ~D) KNF: (A \/ B) /\ (~A \/ ~B) /\ (C \/ D) /\ (~C \/ ~D) Minisat: p cnf 4 4 120 340 -1 -2 0 -3 -4 0 /*Reenje: -1 2 3 -4 A=0, B=1, C=1, D=0*/ I jasno je da ce ovo imati 4 resenja! 4.Bitovi trobitnog broja su jednaki A B C Reenje: (A <=> B) /\ (B <=> C) KNF: (A => B /\ B => A) /\ (C => B /\ B => C) = (~A \/ B) /\ (~B \/ A) /\ (~C \/ B) /\ (~B \/ C) Minisat: p cnf 3 4 -1 2 0 1 -2 0 -2 3 0 -3 2 0 /*Reenje je -1 -2 -3 0*/ p cnf 3 5 -1 2 0 1 -2 0 -2 3 0 -3 2 0 1230 /*Reenje je: 1 2 3 0 */ p cnf 3 6 -1 2 0 1 -2 0 -2 3 0
Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

-3 2 0 1230 -1 -2 -3 0 /*nema vise reenja*/ 5.Sabiraju se dva dvobitna broja i dobijamo zbir 3. A B C D 1 1 Reenje: (B \/ D) /\ ~(B /\ D) /\ (A \/ C) /\ ~(A /\ C) KNF: (B \/ D) /\ (~B \/ ~D) /\ (A \/ C) /\ (~A \/ ~C) Minisat: p cnf 4 4 240 -2 -4 0 130 -1 -3 0 /*Reenje -1 2 3 -4 0*/ p cnf 4 5 240 -2 -4 0 130 -1 -3 0 1 -2 -3 4 /*Reenje je: -1 -2 3 4 0*/ p cnf 4 6 240 -2 -4 0 130 -1 -3 0 1 -2 -3 4 1 2 -3 -4 /*Reenje je 1 -2 -3 4 0*/ p cnf 4 7 240 -2 -4 0 130 -1 -3 0 1 -2 -3 4 1 2 -3 -4 -1 2 3 -4
Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

/*Reenje je 1 2 -3 -4*/ p cnf 4 8 240 -2 -4 0 130 -1 -3 0 1 -2 -3 4 1 2 -3 -4 -1 2 3 -4 -1 -2 3 4 /*nema vise resenja*/ 6.etvorobitna reprezentacija broja je palindrom, ali nisu svi brojevi isti. A B C D Reenje: (A <=> D) /\ (C <=> B) /\ ~(A /\ B /\ C /\ D) /\ ~(~A /\ ~B /\ ~C /\ ~D) KNF: (~A \/ D) /\ (~D \/ A) /\ (~C \/ B) /\ (~B \/ C) /\ (A \/ B \/ C \/ D) /\ (~A \/ ~B \/ ~C \/ ~D) Minisat: p cnf 4 6 -1 4 0 1 -4 0 -2 3 0 2 -3 0 -1 -2 -3 -4 0 12340 Jasno je da e biti dva reenja, 0110 i 1001. 7.Tri polja se boje plavom ili crvenom. Ako je prvo crveno, druga dva moraju biti iste boje. Ako je drugo crveno, tree mora biti plavo. A B C crvena 1, plava 0

Reenje: (A => (B <=> C)) /\ (B => ~C) /*KNF i Minisat odraditi kao i u prethodnim primerima...*/ 8.Temena trougla bojimo crvenom ili plavom bojom i susedna temena ne mogu biti obojena istom bojom. Temena A, B, C crvena -1, plava -0

Reenje: (A <=> ~B) /\ (B <=> ~C) /\ (C <=> ~A)


Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

/*KNF i Minisat odraditi kao i u prethodnim primerima...*/

Vebe 2: 04.03.2013 Kodiranja i DLL


Kodiranja koristimo kao univerzalan nacin da od zadatog problema dobijemo formulu u KNF. Mi cemo predstaviti 3 razlicita kodiranja, od 6 koji se koriste. Od svih njih najefikasniji je order encoding, jer koristi najmanji broj promenljivih i ima najmanji broj klauza, ali njega necemo raditi. 1. Direct encoding Sastoji se od tri dela. Iz svakog od delova cemo dobiti odredjen broj klauza i konacno resenje je konjukcija svih dobijenih klauza. *at least one bar jedan od Xi,k mora da bude tacan Xi,a \/ Xi,a+1 \/ . \/ Xi,b *at most one najvise jedan moze da bude tacan ~ Xi,a \/ ~Xi,a+1 ~ Xi,a \/ ~Xi,a+2 . . ~ Xi,a \/ ~Xi,b
-----------------------------

~ Xi,a+1 \/ ~Xi,a+2 ~ Xi,a+1 \/ ~Xi,a+3 . . ~ Xi,a+1 \/ ~Xi,b


----------------------------.. .. -----------------------------

~ Xi,b-1 \/ ~Xi,b *conflict clause npr imamo da (i v) (j w) ne moze znaci ovo je neki uslov iz zadatka kao npr da u jednoj vrsti moze da se nadje samo jedan novcic i slicno. Tada imamo: ~ Xi,v \/ ~Xj,w Konjukcija svih ovih klauza predstavlja konacno resenje naseg zadatka! (Odnosno formulu u KNF.) Primer: A,B pripadaju skupu {0,1,2} i imamo uslov A B i a0, a1, a2 su iz A, a b0, b1, b2 iz B. I treba ovo da predstavimo iskaznom formulom. Primenjujemo gore opisani algoritam: Prvo imamo at least one: a0 \/ a1 \/ a2 b0 \/ b1 \/ b2
Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

Zatim ide at most one: ~a0 \/ ~a1 ~a0 \/ ~a2 ~a1 \/ ~a2 ~b0 \/ ~b1 ~b0 \/ ~b2 ~b1 \/ ~b2 I na kraju resavamo konfliktne slucajeve: (za uslov A B) 1.Ne sme da bude a=1, a b=0 ~a1 \/ ~b0 2.Ne sme da bude a=2, a b=0 ~a2 \/ ~b0 3.Ne sme da bude a=2, a b=1 ~a2 \/ ~b1 Pa je konacno resenje: (a0 \/ a1 \/ a2) /\ (b0 \/ b1 \/ b2) /\ (~a0 \/ ~a1 ) /\ (~a0 \/ ~a2 ) /\ (~a1 \/ ~a2 ) /\ (~b0 \/ ~b1 ) /\ (~b0 \/ ~b2 ) /\ (~b1 \/ ~b2 ) /\ (~a1 \/ ~b0 ) /\ (~a2 \/ ~b0) /\ (~a2 \/ ~b1 ) 2. Suport encoding *at-least-one : isto kao i kod direktnog *at-most-one : takodje *suport clause: Kada imamo uslove oblika: i v ==> j w1, jw2, ..., jwn Njih mozemo zapisati kao: Xi = v Xj = w1, ..., Xj = wn A odavde, kada oslobodimo implikaciju imamo: ~Xi,v \/ (Xj,w1 \/ Xj,w2 \/ .... \/ Xj,wn) Resenje prethodnog primera ovim kodiranjem: Prva dva koraka su ista. Treci korak: Ako je a=0, onda b moze biti 0,1,2 a0 b0, b1, b2 ~a0 \/ b0 \/ b1 \/ b2 Ako je a=1 onda b moze biti 1,2 a1 b1, b2 ~a1 \/ b1 \/ b2 Ako je a=2 onda b moze biti samo 2 a2 b2 ~a2 \/ b2 Ako je b=0, onda a moze biti samo 0 ~b0 \/ a0
Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

Ako je b=1 ~b1 \/ a0 \/ a1 Ako je b=2 ~b2 \/ a0 \/ a1 \/ a2 Takodje, resenje je konjukcija svih ovih disjunkcija... 3.Log encoding D = [a,b] domen d duzina domena m = [log2d] ceo deo ovog logaritma v neka vrednost iz domena u binarnom zapisu v = <vm-1, ..., v0> v = (2b * vb) ,b = 0,m-1 npr. Za onaj nas primer, A = <a1 a0> = a0 + a1*21 B = <b1 b0> = b0 + b1 * 21 NAPOMENA: Sa (+) oznacavam ekskluzivnu disjunkciju!!! *prohibitive-value clause m-1 \ / \ / (vb (+) Xi,b) Xi=a0, a1, b0, b1 m disjunkcija eksluzivnih disjunkcija \/ b=0 npr. za A,B iz {0,1,2} sve moguce vrednosti su: 00 01 10 11 --ovaj slucaj ne pripada domenu i u ovom koraku ga moramo izbaciti (jer odgovara broju 3) i iz gore navedene formule dobijamo: (a0 (+) 1) \/ (a1 (+) 1) = ~a0 \/ ~a1 odnosno, (b0 (+) 1) \/ (b1 (+) 1) = ~b0 \/ ~b1 Sto je i logicno jer bar jedna cifra u zapisu broja mora biti 0. Ako su obe 1 onda je to ovaj slucaj koji nam ne odgovara... *Conflict clause Xi = v, a ne sme Xj = w m-1 \ / \ / (vb (+) Xi,b) \/ \/ b=0 m-1 \ / \ / (Xj,b (+) wb) \/ b=0

Na ovaj nacin cemo se resiti svih kombinacija koje ne zadovoljavaju uslov.


Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

Pokazimo to na primeru: A,B = {0,1,2} i A B a) Ne sme a = 0 1, b = 0 0 | | | | v1v2 w1w2 iz gornje formule, odnosno a1 a0 b1 b0 iz naseg primera Pa na osnovu formule imamo: (1 (+) a0) \/ (0 (+) a1) \/ (0 (+) b0 ) \/ (0 (+) b1) i odavde dobijamo ~a0 \/ a1 \/ b0 \/ b1 b) Ne sme a = 1 0, b = 0 0 (0 (+) a0) \/ (1 (+) a1) \/ (0 (+) b0 ) \/ (0 (+) b1) i odavde dobijamo a0 \/ ~a1 \/ b0 \/ b1 c) Ne sme a = 1 0, b = 0 1 (0 (+) a0) \/ (1 (+) a1) \/ (1 (+) b0 ) \/ (0 (+) b1) i odavde dobijamo a0 \/ ~a1 \/ ~b0 \/ b1 I resenje je: (~a0 \/ ~a1) /\ (~b0 \/ ~b1) /\ (~a0 \/ a1 \/ b0 \/ b1) /\ (a0 \/ ~a1 \/ b0 \/ b1) /\ (a0 \/ ~a1 \/ ~b0 \/ b1) Neki primeri problema koji se resavaju na ovaj nacin: 1.Imamo sahovsku tablu i treba da rasporedimo 8 kraljica tako da se nikoje dve ne napadaju 2.Imamo magicni kvadrat 5 x 5 u svakom polju je razlicita vrednost, ali zbir po vrstama, kolonama i dijagonalama je isti 3.Imamo tablu 3 x 3 i na nju treba da stavimo 3 topa tako da se nikoja dva ne napadaju. Ovaj problem cemo resiti preko sva tri kodiranja. a0 a1 a2 b0 b1 b2 c0 c1 c2 Direct encoding at least one: a0 \/ a1 \/ a2 b0 \/ b1 \/ b2 c0 \/ c1 \/ c2 at most one ~a0 \/ ~a1 ~a0 \/ ~a2 ~a1 \/ ~a2 ~b0 \/ ~b1 ~b0 \/ ~b2 ~b1 \/ ~b2 ~c0 \/ ~c1 ~c0 \/ ~c2
Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

~c1 \/ ~c2 conflict clause: ako je a0 onda ne moze b0 i c0, ako je a1 onda ne moze b1 i c1 ako je a2 onda ne moze b2 i c2 ~a0 \/ ~b0 ~a0 \/ ~c0 ~a1 \/ ~b1 ~a1 \/ ~c1 ~a2 \/ ~b2 ~a2 \/ ~c2 ~b0 \/ ~c0 ~b1 \/ ~c1 ~b2 \/ ~c2 Suport encoding: prva dva koraka su ista, treci je: ~a0 \/ b1 \/ b2 \/ c1 \/ c2 ~a1 \/ b0 \/ b2 \/ c0 \/ c2 ~a2 \/ b0 \/ b1 \/ c0 \/ c1 ~b0 \/ a1 \/ a2 \/ c1 \/ c2 ~b1 \/ a0 \/ a2 \/ c0 \/ c2 ~b2 \/ a0 \/ a1 \/ c0 \/ c1 ~c0 \/ b1 \/ b2 \/ a1 \/ a2 ~c1 \/ b0 \/ b2 \/ a0 \/ a2 ~c2 \/ b0 \/ b1 \/ a0 \/ a1 Log encoding: pozicije kodiramo sa 1,2,3 trebaju nam 2 bita za kodiranje i treba da iskljucimo slucaj 00. a <a1 a0> b <b1 b0> c <c1 c0> prohibitive clause: (a0 (+) 0) \/ (a1 (+) 0) (b0 (+) 0) \/ (b1 (+) 0) (c0 (+) 0) \/ (c1 (+) 0) i odavde dobijamo: (a0 \/ a1) /\ (b0 \/ b1) /\ (c0 \/ c1) conflict clause: uslovi : a b, a c, b c Ove uslove treba da obradimo za vrednosti a,b, c = 01, 10, 11 a = <0 1> b = <0 1> (0 (+) a1 ) \/ (1 (+) a0) \/ (0 (+) b1) \/ (1 (+) b0), tj. a1 \/ ~a0 \/ b1 \/ ~b0 a = <0 1> c = <0 1> (0 (+) a1 ) \/ (1 (+) a0) \/ (0 (+) c1) \/ (1 (+) c0), tj. a1 \/ ~a0 \/ c1 \/ ~c0
Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

10

b = <0 1> c = <0 1> (0 (+) b1 ) \/ (1 (+) b0) \/ (0 (+) c1) \/ (1 (+) c0), tj. b1 \/ ~b0 \/ c1 \/ ~c0 a = <1 1> b = <1 1> (1 (+) a1 ) \/ (1 (+) a0) \/ (1 (+) b1) \/ (1 (+) b0), tj. ~a1 \/ ~a0 \/ ~b1 \/ ~b0 a = <1 1> c = <1 1> (1 (+) a1 ) \/ (1 (+) a0) \/ (1 (+) c1) \/ (1 (+) c0), tj. ~a1 \/ ~a0 \/ ~c1 \/ ~c0 b = <1 1> c = <1 1> (1 (+) b1 ) \/ (1 (+) b0) \/ (1 (+) c1) \/ (1 (+) c0), tj. ~b1 \/ ~b0 \/ ~c1 \/ ~c0 a = <1 0> b = <1 0> (1 (+) a1 ) \/ (0 (+) a0) \/ (1 (+) b1) \/ (0 (+) b0), tj. ~a1 \/ a0 \/ ~b1 \/ b0 a = <1 0> c = <1 0> (1 (+) a1 ) \/ (0 (+) a0) \/ (1 (+) c1) \/ (0 (+) c0), tj. ~a1 \/ a0 \/ ~c1 \/ c0 b = <1 0> c = <1 0> (1 (+) b1 ) \/ (0 (+) b0) \/ (1 (+) c1) \/ (0 (+) c0), tj. ~b1 \/ b0 \/ ~c1 \/ c0 Pa je rezultat: (a0 \/ a1) /\ (b0 \/ b1) /\ (c0 \/ c1) /\ (a1 \/ ~a0 \/ b1 \/ ~b0) /\ (a1 \/ ~a0 \/ c1 \/ ~c0) /\ (b1 \/ ~b0 \/ c1 \/ ~c0) /\ (~a1 \/ ~a0 \/ ~b1 \/ ~b0) /\ (~a1 \/ ~a0 \/ ~c1 \/ ~c0) /\ (~b1 \/ ~b0 \/ ~c1 \/ ~c0) /\ (~a1 \/ a0 \/ ~b1 \/ b0) /\ (~a1 \/ a0 \/ ~c1 \/ c0) /\ (~b1 \/ b0 \/ ~c1 \/ c0)

DPLL procedura
Koristi se da se proveri da li je neka formula zadovoljiva. Imamo 8 pravila: 1. Ako je D = onda DPLL vraca Da 2. Ako imamo ~ | ili ~ T, onda ih zamenjujemo sa T odnosno | 3. Brisemo sva pojavljivanja | 4. Ako imamo praznu klauzu DPLL vraca Ne 5. Ako imamo klauzu koja sadrzi T, brisemo celu klauzu 6. Ako imamo klauzu koja sadrzi samo iskazno slovo D[p T], D[~p | ] 7. a) Ako imamo da se u D pojavljuje p, ali se ne pojavljuje ~p, onda D[p T] b) Ako imamo da se u D pojavljuje ~p, ali se ne pojavljuje p, onda D[~p T] 8. Ako D[p T] vraca Da, onda je rezultat Da ili vrati D[p | ]

Zadatak: ((p \/ q) /\ (~p \/ q) /\ (p \/ ~q)) (p/\q)


Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

11

Proveroti da li je navedena formula valjana. Ovo se radi tako sto se vidi da li je negacija ove formule kontradikcija. A ona je kontradikcija ukoliko DPLL vrati Ne, tj. Ukoliko ne nadje valuaciju koja je zadovoljava. ~(((p \/ q) /\ (~p \/ q) /\ (p \/ ~q)) (p/\q)) ~(~((p \/ q) /\ (~p \/ q) /\ (p \/ ~q)) \/ (p /\ q)) (p \/ q) /\ (~p \/ q) /\ (p \/ ~q) /\ (~p \/ ~q) DPLL: 1. D[p T] (T \/ q) /\ (~T \/ q) /\ (T \/ ~q) /\ (~T \/ ~q) 2. ~T | (T \/ q) /\ ( | \/ q) /\ (T \/ ~q) /\ ( | \/ ~q) 3. brisemo | (T \/ q) /\ q /\ (T \/ ~q) /\ ~q 4. brisemo klauze sa T q /\ ~q 5. Imamo klauzu koja sadrzi samo q D[q T] T /\ ~T 6. ~T | T /\ | 7. brisemo | T /\ prazna klauza 8. Ne 9. Posto DPLL[p T] vraca Ne, vracamo DPLL[p | ] ( | \/ q) /\ (~ | \/ q) /\ ( | \/ ~q) /\ (~ | \/ ~q) 10. ~ | T ( | \/ q) /\ (T \/ q) /\ ( | \/ ~q) /\ (T \/ ~q) 11. brisemo | q /\ (T \/ q) /\ ~q /\ (T \/ ~q) 12. brisemo klauze sa T q /\ ~q 13. D[q T] T /\ ~T 14. ~T | T /\ | 15. brisemo | T /\ prazna klauza 16. Ne Na ovaj nacin smo pokazali da formula nije zadovoljiva, odnosno da je pocetna formula valjana!

Vezbe 3: 11.03.2013.
Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

12

1.Pokazati da je sledeca formula valjana: (~p \/ ~q \/ r) ~(p /\ q) Treba da pokazemo da njena negacija nije zadovoljiva! (~p \/ ~q \/ r) /\ p /\ q NAPOMENA: ~T je negacija od T, a !T je oznaka za ne T 1. D[p T] (~T \/ ~q \/ r) /\ T /\ q 2. ~T !T (!T \/ ~q \/ r) /\ T /\ q 3. (~q \/ r) /\ T /\ q 4. (~q \/ r) /\ q 5. D[q T] (~T \/ r) /\ T 6. (!T \/ r) /\ T 7. r /\ T 8. r 9. D[r T] T 10. 11. Da Zakljucujemo da je ova formula zadovoljiva, zato pocetna formula nije valjana!

Logika prvog reda


Sintaksa Problem da li je formula valjana nije odluciv, vec je poluodluciv. To znaci da ako je formula valjana to mozemo da pokazemo, a ako nije valjana to ne mozemo uvek da pokazemo. --Termi promenljive konstante funkcijski simboli f(t1, t2, ..., tn) i ar(f) = n --Atomicka formula T i !T predikatski simboli p(t1, t2, ..., tn) i ar(p) = n --Dobro zasnovana formula atomicna formula ako su A i B d.z. formule, onda je to i A\/ B, A/\ B, ~A, A B, A B, za svako x A(x), postoji x A(x) d.z. formule Zapisati sledece recenice u logici prvog reda: 1. Svako voli nekog i niko ne voli svakog ili
Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

13

neko voli svakoga i niko ne voli nikoga p(x,y) = x voli y ar(p) = 2 (za svako x)(postoji y)p(x,y) /\ ~(postoji y)(za svako y)p(x,y) \/ (postoji x)(za svako y) p(x,y) /\ ~(postoji x)~(postoji y)p(x,y) 2. Mozete lagati neke ljude sve vreme i mozete lagati sve ljude neko vreme, ali ne mozete lagati sve ljude sve vreme p(x,y) --mozemo lagati x u vremenu y (postoji x)(za svako y) p(x,y) /\ (za svako x)(postoji y) p(x,y) /\ (za svako x)(za svako y) ~p(x,y) 3. Svako ima rodjeka na moru ili na planini. Ko ima rodjaka na moru bio je na moru. Ko ima rodjaka na planini bio je na planini. Neko nije bio ni na moru ni na planini. rm(x) x ima rodjaka na moru rp(x) x ima rodjaka na planini m(x) x bio na moru p(x) x bio na planini = {rm, rp, m,p} skup predikatskih simbola (za svako x) (rm(x) \/ rp(x)) (za svako x) (rm(x) m(x)) (za svako x) (rp(x) p(x)) (postoji x) (~p(x) /\ ~m(x)) 4. Janko ruca kod kuce ili pere sudove u restoranu. Svako ruca kod kuce ili u restoranu. Ko ruca u restoranu i nema para taj pere sudove u restoranu. Janko nema para. k(x) jede kuci n(x) nema novca = {k,r,p,n} = {j}, ar(j) = 0 r(x) jede u restoranu j Janko (konstanta) p(x) pere sudove u restoranu

k(j) \/ p(j) (za svako x) (k(x) \/ r(x)) (za svako x) (r(x) /\ n(x) --> p(x)) n(j) 5.
Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

14

Ko rano rani ceo dan je pospan. Ko rano rani ceo dan je pospan ili dve srece grabi. Ko dve srece grabi ceo dan je pospan. rr(x), p(x) i sg(x) (za svako x) (rr(x) p(x)) (za svako x) (rr(x) p(x) \/ sg(x)) (za svako x) (sg(x) p(x)) = {rr, p, sg} = 6. Ko se vozi avionom dosta zaradjuje. Ko dosta zaradjuje puno radi. Janko se vozi avionom. Janko ne radi puno. a(x), z(x), r(x), j (za svako x) (a(x) z(x)) (za svako x) (z(x) r(x)) a(j) ~r(j) 7. Sta leti, to ima krila i lagano je. Sta pliva to nema krila. Sta pliva to ne leti. (za svako x) (let(x) k(x) /\ lag(x)) (za svako x) (p(x) ~k(x)) (za svako x) (p(x) ~let(x)) 8. Ko radi taj ima ili trosi Ko ima taj peva Ko trosi taj peva Ko radi taj peva (za svako x) (r(x) (za svako x) (i(x) (za svako x) (t(x) (za svako x) (r(x) i(x) \/ t(x)) p(x)) p(x)) p(x))

9. Ko laze taj i krade. Ko krade i uhvacen je u kradji taj ide u zatvor. Al Kapone laze. Al Kapone je uhvacen u kradji. Laki Luciano laze.
Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

15

(za svako x) (l(x) k(x)) (za svako x) (k(x) /\ u(x) z(x)) l(AK) u(AK) l(LL) = {l, k, u, z} = {AK, LL} 10. Ako je X prijatelj Y onda je Y prijatelj X. Ako je X prijatelj osobe Y, onda X voli Y Ne postoji neko ko je povredio osobu koju voli. Osoba B je povredila svog prijatelja C. (za svako x) (za svako y) (pr(x,y) p(y,x)) (za svako x) (za svako y) (pr(x,y) v(x,y)) ~(postoji x) (postoji y) (v(x,y) /\ po(x,y)) pr(B,C) /\ po(B,C) 11.Ako onaj ko laze taj i krade i ako bar neko laze, onda neko i krade. ((za svako x) l(x) k(x)) /\ (postoji x)l(x) (postoji x) k(x) 12. Dve nemimoilazne prave se seku ili su paralelne. Prave koje se seku leze u istoj ravni. Prave koje su paralelne leze u istoj ravni. Dve nemimoilazne prave leze u istoj ravni. (za svako x) (za svako y) (nm(x,y) (s(x,y) \/ p(x,y))) (za svako x) (za svako y) (s(x,y) ir(x,y)) (za svako x) (za svako y) (p(x,y) ir(x,y)) (za svako x) (za svako y) (nm(x,y) ir(x,y)) 13. Svaka dva brata imaju zajednickog roditelja. Roditelj je stariji od deteta. Postoje braca. Ni jedna osoba nije starija od druge. (za svako x) (za svako y) ((postoji z) b(x,y) r(z,x) /\ r(z, y)) (za svako x) (za svako z) (r(z,x) st(z,x)) (postoji x) (postoji y) b(x,y) (za svako x) (za svako y) (~st(x,y) /\ ~st(y,x)) 14.
Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

16

Ako postoji cipela koja u svakom trenutku odgovara svakoj nozi, onda za svaku nogu postoji cipela koja joj u nekom trenutku odgovara i za svaku nogu postoji trenutak takav da postoji cipela koja joj u tom trenutku odgovara p(x,y,z) cipela x odgovara nozi y u trenutku z ar(p) = 3 [(postoji x)(za svako y) (za svako z)(p(x,y,z))] [((za svako y)(postoji x)(postoji z) p(x,y,z)) /\ ((za svako y)(postoji z)(postoji x) p(x,y,z))] Semantika logike prvog reda 1.Naci model za formulu: (za svako x) (p(x) p(f(x))) = {p} = {f} ar(p) = 1, ar(f) = 1 Nas zadatak je da smislimo kako ce izgledati p i f tako da nasa formula bude tacna za svaku valuaciju. x pripada D D skup parnih brojeva pI(x) = 1, ako je x paran broj fI(x) = x + 2 Sada treba da pokazemo da je Iv([za svako x] (p(x) p(f(x)))) = 1 pretpostavimo suprotno: Iv([za svako x] (p(x) p(f(x)))) = 0 znaci da postoji neko w: v ~x w takvo da je: Iw(p(x) p(f(x))) = 0 Odavde, Iw(p(x)) = 1 /\ Iw(p(f(x))) = 0 pI(t) = 1 /\ pI(fI(t)) = 0 pI(t) = 1 /\ pI(t+2) = 0 t je paran broj /\ t+2 nije paran broj Zakljucujemo, ovo je kontradikcija! Zato je nas model za ovu formulu dobar!

Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

17

Vezbe 4: 18.03.2013.
Naci najopstiji unifikator za: 1.g(x,h(y,z)) = g(u, x) x=u h(y,z) = x x=u x = h(y,z) x=u x = h(y,y) h(c,v) = u h(c,v) = h(y,y) u = h(c,v) c=y v=y u = h(y,y) c=y v=y f(x) = f(h(c,v) x = h(c,v) 2.x = h(c,v) 3.x = h(c,v) 4.x = h(c,v) 5.x = h(y,y) 6.x = h(y,y) g(z, u) = g(y,u) z=y u=u 2.z = y 3.z = y 4.z = y 5.z = y 6.z = y

Konacno resenje: [u --> h(y,y), c --> y, v --> y, x --> h(y,y), z --> y] 2. Metodom rezolucije proveriti da li je formula valjana: ((p \/ q) /\ (~p \/ q) /\ (p\/~q) --> (p/\q)) (p \/ q) /\ (~p \/ q) /\ (p \/ ~q) /\ (~p \/ ~q) c1: p q c2: ~p q c3: p ~q c4: ~p ~q c5: q (c1, c2) c6: ~q(c3, c4) c7: "prazna klauza" (c5, c6) 3. Pokazati da je formula (za svako x) p(x) --> (postoji x) p(x) valjana. ~(~(za svako x)p(x) --> (postoji x)p(x)) (za svako x)p(x) /\ (za svako x)~p(x) (za svako x)p(x) /\ (za svako y)~p(y) (za svako x)(za svako y)(p(x) /\ ~p(y)) c1: p(x) c2: ~p(y) c3: "prazna klauza" (c1, c2, [x --> y])

Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

18

4. avion + zaradjuje: (od proslog casa) (za svako x) a(x) --> z(x) (za svako x) z(x) --> r(x) a(j) ~r(j) Pokazati da je skup nezadovoljiv! (za svako x)(a(x) --> z(x)) /\ (za svako x)(z(x) --> r(x)) /\ a(j) /\ ~r(j) (za svako x)(a(x) --> z(x)) /\ (za svako y)(z(y) --> r(y)) /\ a(j) /\ ~r(j) (za svako x) (za svako y) ((!a(x) \/ z(x)) /\ (~z(y) \/ r(y))) /\ a(j) /\ ~r(j) c1: ~a(x) z(x) c2: ~z(y) r(y) c3: a(j) c4: ~r(j) c5: ~z(j) (c1, c2, y --> j) c6: ~a(j) (c5, c1, x --> y) c7: "prazna klauza" (c6, c3) 5. pevanje (od proslog casa) (za svako x)(r(x) --> l(x) /\ t(x)) (za svako x)(l(x) --> p(x)) (za svako x)(t(x) --> p(x)) Pokazati da sledi: (za svako x)(r(x) --> p(x)) [(za svako x)(r(x) l(x) /\ t(x)) /\ (za svako x)(l(x) p(x)) /\ (za svako x)(t(x) p(x))] [(za svako x)(r(x)p(x))] Ovo cemo negorati i dobijamo: (za svako x)(~r(x) \/ l(x) \/ t(x)) /\ (za svako x)(~l(x) \/ p(x)) /\ (za svako x)(~t(x) \/ p(x)) /\ (postoji x)~(~r(x) \/ p(x)) Skolemizacijom dobijamo: (postoji m)(za svako x)(za svako y) (za svako z)(~r(x) \/ l(x) \/ t(x)) /\(~l(y) \/ p(y)) /\ (~t(z) \/ p(z)) /\ r(m) /\ ~p(m) c-const m --> c c1: ~r(x) l(x) t(x) c2: ~l(y) p(y) c3: ~t(z) p(z) c4: t(c) c5: ~p(c) c6: ~l(c) (c5, c2, y --> c) c7: ~t(c) (c5, c3, z --> c) c8: ~r(c) t(c) (c6, c1 x --> c) c9: ~r(c) (c7, c8) c10: "prazna klauza" (c4, c9)

Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

19

6. braca + roditelji + starost --- //Nije zavrsen zadatak... (za svako x) (za svako y) (r(x,y) --> s(x,y)) /\ (postoji x) (postoji y)b(x,y) /\ (za svako x)(za svako y) ! s(x,y) (za svako x)(za svako y)(postoji z) (~b(x,y) \/ r(z, x)) /\ ~b(x,y) \/ r(z,y) /\ (za svako m)(za svako n)(! r(m,n) \/ s(m,n)) /\ (postoji v)(postoji w) (b(v,w)) /\ (za svako t) (za svako k) ~s(t,k) (postoji v)(postoji w)(za svako x)(za svako y)(postoji z)(za svako m)(za svako n) (za svako t)(za svako k) ((!b(x,y) \/ r(z,x)) /\ (!b(x,y) \/ r(z,y)) /\ ~r(m,n) \/ s(m,n)) Implementacija DPLL algoritma u C++

#include <iostream> #include <fstream> #include <vector> #include <algorithm> #include <assert.h> using namespace std; typedef int Literal; typedef vector<Literal> Valuation; class Clause { public: Clause(vector<Literal>& literals) : _literals(literals) { } Clause(const Clause& clause) { _literals=clause._literals; } bool empty() {

Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

20

return _literals.size()==0; } bool unit() { return _literals.size()==1; } Literal operator[](int i) { return _literals[i]; } bool isTrue(Valuation& v) { for(int i=0; i<_literals.size(); i++) { for(int j=i+1; j<_literals.size(); j++) if(_literals[i]==-_literals[j]) return true; if(find(v.begin(),v.end(),_literals[i])!=v.end()) return true; } return false; } Clause removeFalseLiterals(Valuation& v) { vector<Literal> literals; for(int i=0; i<_literals.size(); i++) if(find(v.begin(),v.end(),-_literals[i])==v.end()) literals.push_back(_literals[i]); return Clause(literals); } private: vector<Literal> _literals; }; class Formula { public: Formula(vector<Clause>& clauses, int maxVariable) : _clauses(clauses), _maxVariable(maxVariable) { } Formula(char* filename) { ifstream in(filename); string p, cnf; int nClauses; in >> p >> cnf >> _maxVariable >> nClauses; vector<Literal> literals; for(int i=0; i<nClauses; i++) { Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

21

Literal l; literals.clear(); in >> l; while(l!=0) { literals.push_back(l); in >> l; } _clauses.push_back(Clause(literals)); } } bool empty() { return _clauses.size()==0; } bool containsEmptyClause() { for(int i=0; i<_clauses.size(); i++) if(_clauses[i].empty()) return true; return false; } Literal getUnitLiteral() { for(int i=0; i<_clauses.size(); i++) if(_clauses[i].unit()) return _clauses[i][0]; return 0; } Literal getUndefinedVariable(Valuation& v) { for(int i=1; i<=_maxVariable; i++) if(find(v.begin(),v.end(),i)==v.end() && find(v.begin(),v.end(),-i)==v.end()) return i; return 0; } Formula simplify(Valuation& v) { vector<Clause> clauses; for(int i=0; i<_clauses.size(); i++) if(!_clauses[i].isTrue(v)) clauses.push_back(_clauses[i].removeFalseLiterals(v)); return Formula(clauses,_maxVariable); } private: vector<Clause> _clauses; int _maxVariable; };

Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

22

class Solver { public: bool solve(Formula formula) { if(formula.empty()) { _satisfyingValuation=_currentValuation; return true; } if(formula.containsEmptyClause()) return false; Literal l; l=formula.getUnitLiteral(); if(l!=0) { _currentValuation.push_back(l); bool val=solve(formula.simplify(_currentValuation)); _currentValuation.pop_back(); return val; } l=formula.getUndefinedVariable(_currentValuation); assert(l!=0); _currentValuation.push_back(l); bool val=solve(formula.simplify(_currentValuation)); _currentValuation.pop_back(); if(val==true) return true; else { _currentValuation.push_back(-l); bool val=solve(formula.simplify(_currentValuation)); _currentValuation.pop_back(); return val; } } void printValuation() { for(int i=0; i<_satisfyingValuation.size(); i++) cout << _satisfyingValuation[i] << " "; cout << endl; } private: Valuation _currentValuation; Valuation _satisfyingValuation; }; int main(int argc, char** argv) { if(argc<2) { cerr << "Nedostaje argument!" << endl; exit(1); } Formula formula(argv[1]); Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

23

Solver solver; if(solver.solve(formula)) solver.printValuation(); else cout << "Unsatisfiable" << endl; return 0; }

Vezbe 5: 01.04.2013.
Resenje zadataka sa prvog testa: Zadatak 1: a) Svako zadovoljstvo se placa b) Svaki posao se placa c) Neki posao je zadovoljstvo d) Ni jedno zadovoljstvo nije posao z(x) x je zadovoljstvo p(x) x je posao pl(x) x se placa (za svako x) (z(x) --> pl(x)) (za svako x) (p(x) --> p(x)) (postoji x) (p(x) /\ z(x)) (za svako x) (z(x) --> ~p(x)) ILI

~(postoji x)(z(x) /\ p(x))

Zadatak 2: A,B,C pripadaju {4,5}, C>B A!=B Resenje: Imamo a4,a5,b4,b5,c4,c5 *at least one a4 \/ a5 b4 \/ b5 c4 \/ c5 *at most one ~a4 \/ ~a5 ~b4 \/ ~b5 ~c4 \/ ~c5 *conflict ~a4 \/ ~b4 ~a5 \/ ~b5 ~c4 \/ ~b5 ~c4 \/ ~b4
Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

24

~c5 \/ ~b5 Zadatak 3: Ako je A crveno, barem jedno mora biti plavo. Nisu sva polja iste boje. Ako je poslednje plavo, makar dva moraju biti crvena. A B C D 1 - crveno 0 - plavo A --> (~B \/ ~C \/ ~D) ~(A /\ C /\ B /\ D) /\ ~(~A /\ ~C /\ ~B /\ ~D) (~D --> (A /\ B) \/ (A /\ C) \/ (B /\ C)) -- ovo jeste ispravan zapis poslednje recenice, ali to moze i pametnije da se uradi kao: (~D --> ~(~A /\ ~B) /\ ~(~A /\ ~C) /\ ~(~B /\ ~C)) Jer ako radimo na prvi nacin dobijamo formulu u DNF-u, sto nam ne odgovara... Kada ovo prebacimo u KNF, dobijamo: (~A \/ ~B \/ ~C \/ ~D) (~A \/ ~B \/ ~C \/ ~D) /\ (A \/ B \/ C \/ D) D \/ ((A \/ B) /\ (A \/ C) /\ (B \/ C)), tj: (D \/A \/ B) /\ (D \/ A \/ C) /\ (D \/ B \/ C) Sto znaci da je konacno resenje: (~A \/ ~B \/ ~C \/ ~D) /\ (A \/ B \/ C \/ D) /\ (D \/A \/ B) /\ (D \/ A \/ C) /\ (D \/ B \/ C) DPLL: 1. DPLL[D --> T] (~A \/ ~B \/ ~C \/ ~T) /\ (A \/ B \/ C \/ T) /\ (T \/A \/ B) /\ (T \/ A \/ C) /\ (T \/ B \/ C) 2. ~T --> !T (~A \/ ~B \/ ~C \/ !T) /\ (A \/ B \/ C \/ T) /\ (T \/A \/ B) /\ (T \/ A \/ C) /\ (T \/ B \/ C) 3. Uklanjamo !T (~A \/ ~B \/ ~C) /\ (A \/ B \/ C \/ T) /\ (T \/A \/ B) /\ (T \/ A \/ C) /\ (T \/ B \/ C) 4. Uklanjamo klauze sa T (~A \/ ~B \/ ~C) 5. DPLL[A --> !T] (~!T \/ ~B \/ ~C) 6. ~!T --> T (T \/ ~B \/ ~C) 7. brisemo klauze sa T "Da"

PROLOG:
*konstante se pisu malim slovima
Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

25

*promenljive se pisu velikim slovima *na kraju svake naredbe mora da stoji tacka p(x) q(x) se zapisuje kao q(x):- p(x). 1. Definisanje porodicnog stabla musko(dejan). musko(dragan). musko(ilija). musko(dule). zensko(milijana). zensko(daniejla). zensko(snezana). zensko(mirjana). roditelj(dragan, danijela). roditelj(dragan, dejan). roditelj(ilija, milijana). roditelj(dule, snezana). roditelj(dule, mirjana). roditelj(ilija, zivka). roditelj(milijana, snezana). otac(X, Y):- roditelj(X, Y), musko(X). majka(X, Y):- roditelj(X, Y), zensko(X). sestra(X, Y):- roditelj(Z, X), roditelj(Z,Y), zensko(X), X\==Y. brat(X,Y):- roditelj(Z, X), roditelj(Z,Y), musko(X), X\==Y. tetka(X,Y):- roditelj(Z,Y), sestra(X,Z). ujak(X,Y):- majka(Z,Y), brat(X,Z). predak(X, Y):- roditelj(X,Y). predak(X, Y):- roditelj(X, Z), predak(Z, Y). % - komentar Operatori: 1.=, \= jesu/nisu unifikabilni posmatra izraze kao termove. 3*3 != 9 2.==, \== jesu/nisu identicni opet kao termovi 3.=:=, =\= jesu/nisu jednaki, aritmeticki izrazi racuna se vrednost izraza sa obe strane! 4.X is Y racuna vrednost izraza samo sa desne strane i vraca true ili false! Ukoliko desna strana nije neka konstanta, onda ovaj operator ima ulogu operatora dodele X = Y. op1(X,Y):- X = Y. op2(X, Y):- X == Y. op3(X,Y) :- X=:=Y. op4(X,Y) :- X is Y. % ne moze op3(3*3, X). % op4(3*3,9) vraca no. op4(9,3*3) vraca yes! % op4(N1,5) dodela N1 = 5
Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

26

2.% suma prvih n prirodnih brojeva suma1(0,0). suma1(N,S):- N > 0, N1 is N-1, suma1(N1, S1), S is S1 + N. %suma1(10,S) vraca 55. suma1(10,55) vraca true! 3.%suma cifara broja suma2(N, S) :- N > 0, N1 is N //10, suma2(N1, S1), S is (S1 + N mod 10). suma2(0,0). %suma2(123,S) vraca S=6. 4. %apsolutna vrednost abs(X,X):- X>=0. abs(X,Y):- X<0, Y is -X. %apsolutna vrednost drugi nacin --netacno resenje!!! abs1(X,X):- X>=0. abs1(X,-X):- X<0. %abs1(-3, X) vraca --3 i zbog toga moramo da koristimo ono gore Y! %apsolutna vrednost na treci nacin --netacno resenje!!! J %er on ako je broj >0, odradi i korak 1 i korak 2... abs2(X,X):- X>=0. abs2(X,Y):- Y is -X. %apsolutna vrednost na treci nacin --tacno resenje, ispravka prethodnog % operator ! Je operator secenja. To znaci da kad uradi ovaj prvi red, nece uraditi drugi, nego se vrsi %odsecanje abs3(X,X):- X>=0, !. abs3(X,Y):- Y is -X .

5. %fibonaci fibonaci(1,1):-!. fibonaci(2,1):-!.


Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

27

fibonaci(N,F):- N1 is N - 1, N2 is N - 2, fibonaci(N1,F1), fibonaci(N2,F2), F is F1 + F2.

6. %obrni: 1234 --> 4321 %N - broj koji obrcemo, M-medjurezultat, R-rezultat obrni(N,R):- obrni(N,0,R). %ova linija sluzi samo da korisnik ne bi unosio poziv sa nulom! Kao omotac... obrni(0, M, M):-!. obrni(N, M, R):- M1 is (M*10 + N mod 10), N1 is N // 10, obrni(N1, M1, R). %predikati sa razlicitim brojem argumenata su kao dva razlicita predikata!!! %obrni(1234, 0, R) vraca R = 4321 %obrni(1234, R) takodje vraca R=4321 7. %provera da li je broj prost: prost(N):- M is N // 2, prost(N,M). prost(N,M):-M > 1, N mod M =\= 0, M1 is M-1, prost(N,M1). prost(N, 1):- true. 8. %Kule Hanoja hanoj(1,X,Y,Z):- write('Prebaci sa '), write(X), write('na '), write(Z), nl. hanoj(N,X,Y,Z):- N>1, N1 is N-1, hanoj(N1, X, Z, Y), hanoj(1, X,Y,Z), hanoj(N1, Y,X,Z). 9. Ilustracija negacije ozenjen(dragan). nezenja(X):- musko(X), \+(ozenjen(X)).
Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

28

nezenja1(X):- \+(ozenjen(X)), musko(X). %ovo dvoje nije isto. Probati nezenja(X) i nezenja1(X)! %nezenja1(X) nije tacno!

Vezbe 6: 01.04.2013.
LISTE: %... ---KOMENTARI %[1,2,3,4] %[] --prazna lista %[1, [1,2], 3, 4] --lista koja sadrzi brojeve i listu %[G|R] za [1,2,3,4] G=1, R=[2,3,4] 1.Dodati element na pocetak liste. dodaj(X, L, [X|L]). %dodaj(3, [1,2], R) vraca R=[3,1,2] 2.Dodaj element (na kraj liste) dodaj_na_kraj(X, [], [X]). %izlaz iz rekurzije dodaj_na_kraj(X,[G|R], [G|LR]):-dodaj_na_kraj(X, R, LR). %npr 1 dodajemo na kraj liste [2,4,5] %Ovo se radi rekurzivno: %1 [2,4,5] %R0 = 1 [4,5] [2|R0] %R1 = 1[5] R0 = [4|R1] %R2 = 1 [] R1 = [5| R2] %[1], R1 = [5,1], R0 = [4,5,1], R = [2,4,5,1] 3. Provera da li se X nalazi u listi L sadrzi(X, [X|_]):-!. sadrzi(X, [G|R]):- G\==X, sadrzi(X,R). %'_' oznacava bilo sta. Moglo je da pise i sadrzi(X, [X|T]). 4.Spajanje dve liste %spoji(L1, L2, LR) spoji([], L, L). spoji([G|R], L2, [G|LR]):-spoji(R,L,LR). %spoji([1,2], [3,4,5], R) vraca R = [1,2,3,4,5] %spoji(L, [3,4,5], [3,4,5,1,2]). vraca L = [1,2] --on pokusava da unifikuje bilo %sta... 5. Zameniti neki element X nekim drugim elementom Y. %zameni(X,Y,L,LR) -- zameni X sa Y u listi L i dobija se rezultujuca lista LR zameni(X, Y, [X|R], [Y|R1]):-zameni(X, Y, R, R1). zameni(X, Y, [G|R], [G|R1]):-G\==X, zameni(X,Y,R,R1). zameni(X,Y,[],[]).
Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

29

6.Brisanje elementa iz liste brisi(X,[],[]). brisi(X, [X|R], R1):- brisi(X, R, R1). brisi(X, [G|R], R1):- G \== X, brisi(X, R, R1). 7.Brisemo samo prvo pojavljivanje elementa X u listi brisi1(X,[],[]). brisi1(X, [X|R], R):-!. brisi1(X, [G|R], [G|R1]):- G \== X, brisi1(X, R, R1). 8. Obrtanje liste obrni(L,LR):- obrni(L, [], LR). obrni([], L, L). obrni([G|R], L, LR):- obrni(R, [G|L], LR). 9. provera da li su tri elementa liste uzastopni elementi liste uzastopni(X,Y,Z, [X, Y, Z|_]):- !. uzastopni(X,Y,Z, [G|R]):-uzastopni(X,Y,Z,R). 10. izdvajanje prvih N elemenata liste izdvoji(0, _, []). izdvoji(N, [G|R], [G|R1]):- N1 is N-1, izdvoji(N1, R, R1). 11.Podeliti listu na dve liste - listu pozitivnih i listu negativnih. podeli([], [], []). podeli([G|R], [G|R1], L2):- G>=0, podeli(R, R1, L2). podeli([G|R], L1, [G|R1]):- G<0, podeli(R, L1, R1). 12. Podeliti listu na sve moguce nacine. %[1,2,3] % [] [1,2,3] % [1] [2,3] % [1,2] [3] % [1,3] [2] % .... podeli1([], [], []). podeli1([G|R], [G|R1], Y):- podeli1(R,R1,Y). podeli1([G|R], X, [G|R1]):- podeli(R, X, R1). %dobijamo vise istih resenja i ne postoji nacin da u ovakvom resenju povadimo duplikate... 13. Maksimalni element liste maxL([X], X). maxL([G|R], Y):- maxL(R,Y), G < Y. maxL([G|R], G):- maxL(R,Y), G>=Y.

Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

30

14.Cetiri coveka se zovu Pera, Mika, Laza i Jova, a prezivaju Peric, Mikic, Lazic i Jovic. Oni imaju 4 sina koji se takodje zovu Pera, Mika, Laza i Jova. Pretpostavimo sledece: a) Niko od oceva se ne zove u skladu sa svojim prezimenom. b) Niko od Sinova se ne zove u skladu sa svojim prezimenom. c) Niko od sinova se ne zove isto kao i otac. d) Peric stariji se zove isto kao i Mikin sin. e) Lazin sin se zove Pera. Napisati predikat koji odredjuje imena i prezimena oceva i sinova. resi(L):- L=[[laza, pera, _], [X, _, peric], [mika, X, _], [_,_,_]], sadrzi([jova, _, _], L), sadrzi([pera, _, _], L), sadrzi([_, laza, _], L), sadrzi([_, jova, _], L), sadrzi([_, mika, _], L), sadrzi([_, _, mikic], L), sadrzi([_, _, jovic], L), sadrzi([_, _, lazic], L), \+sadrzi([mika, _, mikic], L), \+sadrzi([jova, _, jovic], L), \+sadrzi([laza, _, lazic], L), \+sadrzi([pera, _, peric], L), \+sadrzi([_, mika, mikic], L), \+sadrzi([_, jova, jovic], L), \+sadrzi([_, laza, lazic], L), \+sadrzi([_, pera, peric], L), \+sadrzi([mika,mika, _], L), \+sadrzi([jova,jova, _], L), \+sadrzi([laza, laza,_], L), \+sadrzi([pera,pera, _], L). sadrzi(X, [X|_]). sadrzi(X, [G|R]):- sadrzi(X, R). 15. %Ajnstajnov problem: %1. Imamo boju kuce, nacionalnost, ljubimac, pice, cigarete %2. Englez zivi u crvenoj kuci %3. Spanac poseduje psa %4. Kafa se pije u zelenoj kuci %5. Ukrajinac pije caj %6. Zelena kuca se nalazi sa desne strane ivory kuce. %7.Onaj ko puso oldGold, ima ljubimca puza. %8.U zutoj kuci se pusi kools %9. U srednjoj kuci se pije mleko %10. Norvezanin zivi u prvoj kuci sleva. %11. Onaj ko pusi zivi pored vlasnika lisice.
Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

31

%12. Cigarete kools se puse pored kuce koja ima konja. %13. Ko pusi lucky, pije djus %14. Japanac pusi parlament % 15. Norvezanin zivi pored plave kuce. Postoji kuca u kojoj se pije voda. Postoji kuca u kojoj neko cuva zebru. % desno_od(X, Y, L) X je desno od Y u listi L desno_od(X, Y, [Y, X|R]). desno_od(X, Y, [G|R]):- desno_od(X, Y, R). pored(X, Y, L):- desno_od(X, Y, L). pored(X, Y, L):- desno_od(Y, X, L). sadrzi(X, [X|_]). sadrzi(X, [G|R]):- sadrzi(X, R). resi1(L):- L = [[_, norvezanin, _, _, _],[plava, _, _, _, _],[_, _, _, mleko,_],_,_], sadrzi([crvena, englez, _, _, _], L), sadrzi([_, spanac, pas, _, _], L), sadrzi([zelena, _, _, kafa, _], L), sadrzi([_, ukrajinac, _, caj, _], L), desno_od([zelena, _, _, _, _],[ivory, _, _, _, _], L), sadrzi([_, _, puz, _, oldGold], L), sadrzi([zuta, _, _, _, kools], L), pored([_, _, _, _, chesterfield], [_, _, lisica, _, _], L), pored([_, _, _, _, kools], [_, _, konj, _, _], L), sadrzi([_, _, _, djus, lucky], L), sadrzi([_, japanac, _, _, parlament], L), sadrzi([_, _, _, voda, _], L), sadrzi([_, _, zebra, _, _], L). Rezolucija - vezbanje: 1.Pokazati da iz (za svako x)(rr(x) z(x) \/ ds(x)) (za svako x)(ds(x) z(x)) Sledi: (za svako x)(rr(x) z(x)) [(za svako x)(rr(x) z(x)\/ds(x)) /\ (za svako x)(ds(x)z(x))] (za svako x)(rr(x) z(x)) Treba da pokazemo da je ova formula tautologija, tj da je njena negacija nezadovoljiva! 1.Negiramo formulu ~[(za svako x)(rr(x) z(x)\/ds(x)) /\ (za svako x)(ds(x) z(x)) (za svako x)(rr(x) z(x))] [(za svako x)(rr(x) z(x)\/ds(x)) /\ (za svako x)(ds(x) z(x))] /\ ~(za svako x)(rr(x) z(x)) 2. Prebacimo je u KNF
Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

32

(za svako x)(~rr(x) \/ z(x) \/ sd(x)) /\ (za svako x)(~sd(x) \/ z(x)) /\ (postoji x)(rr(x) /\ ~z(x)) (za svako x)(~rr(x) \/ z(x) \/ sd(x)) /\ (za svako y)(~sd(y) \/ z(y)) /\ (postoji k)(rr(k) /\ ~z(k)) 3. Izbacimo kvantore ispred i skolemizacijom se resimo egzistencijalnih kvantora (postoji k)(za svako x)(za svako y) [(~rr(x) \/ z(x) \/ sd(x)) /\ (~sd(y) \/ z(y)) /\ rr(k) /\ ~z(k)] k --> c (const) (za svako x)(za svako y) [(~rr(x) \/ z(x) \/ sd(x)) /\ (~sd(y) \/ z(y)) /\ rr(c) /\ ~z(c)] 4. Dobijena formula je: (~rr(x) \/ z(x) \/ sd(x)) /\ (~sd(y) \/ z(y) /\ rr(c) /\ ~z(c) 5. Primenimo metod rezolucije: C1: ~rr(x), z(x), sd(x) C2: ~sd(y), z(y) C3: rr(c) C4: ~z(c) C5: z(c), sd(c) C1, C3 [x-->c] C6: sd(c) C4, C5 C7: ~sd(c) C4, C2 C8: "prazna klauza" C6, C7 Negacija pocetne formule je nezadovoljiva, odatle zakljucujemo da je pocetna formula tautologija!

Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

33

Vezbe 7: 08.04.2013.
%1.Racunanje duzine liste - duzina(L,N) duzina([], 0). duzina([G|R], N):-duzina(R, N1), N is N1+1. %2.Napraviti listu koja sadrzi duzine prosledjenih lista, npr: %prebroj([[1,2,3], [4,5], [6]], X) X = [3,2,1] prebroj([], []). prebroj([G|R], X) :- duzina(G, N), X = [N|R1], prebroj(R,R1). %Napomena: ovo je ekvivalentno kao i: %prebroj([], []). %prebroj([G|R], [N|R1]) :- duzina(G, N), %

prebroj(R,R1).

%3.Napisati program koji racuna minimum maksimuma elemenata liste listi. %minmax([[1,2,3], [4,5]], N) N=3 jer max(1,2,3) = 3,max(4,5) = 5 i min(3,5) = 3 maxL([X], X). maxL([G|R], G) :- maxL(R, Y), G >= Y. maxL([G|R], Y) :- maxL(R, Y), G < Y. minmax([X], R):- maxL(X, R). minmax([G|R], X):- maxL(G, Y), minmax(R, X), X < Y. minmax([G|R], Y):-maxL(G, Y), minmax(R, X), X >= Y. %4. Ispisati n redova paskalovog trougla: % 1 % 11 L % 1 2 1 Lnew dobijena dopisivanjem jedinica i sabiranjem clanova... % 1 3 3 1 Lnew2 %1 4 6 4 1 ... %....

Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

34

ispis_liste([]):- nl. ispis_liste([G|R]):- write(G), write(' '), ispis_liste(R). generisi_novu([X], [X]). generisi_novu([X, Y|R], [N|R1]) :- generisi_novu([Y|R], R1), N is X + Y. paskal(N):- paskal(N, [1]). paskal(0, L):-ispis_liste(L), !. paskal(N, L):- ispis_liste(L), N1 is N-1, generisi_novu(L, L1), paskal(N1, [1|L1]). %5. Napisati program koji "pegla" listu! %npr. [1,2,3, [4,5,6], [7,4]] --> [1,2,3,4,5,6,7,4] %is_list(G) <--> list (G) --> provera da li je G lista ispeglaj([], []). ispeglaj([G|R], L) :- list(G), ispeglaj(G, G1), ispeglaj(R, R1), spoji(G1, R1, L), !. ispeglaj([G|R], [G|R1]) :- ispeglaj(R, R1). spoji([], L, L). spoji([G|R], L, [G|R1]):- spoji(R, L, R1). %6. Ispitati da li je data lista neopadajuce sortirana. sortirana([]). sortirana([X]). sortirana([X, Y | R]):- Y >=X, sortirana([Y|R]). %7. Napraviti qsort algoritam %X podelimo na dva dela %jedna lista sadrzi manje od X, a druga vece. % to radimo rekurzivno i na kraju spojimo te dve liste. %particije(X, L, L1, L2) particije(X, [], [], []). particije(X, [G|R], [G|R1], L2):- G<X, particije(X, R, R1, L2). particije(X, [G|R], L1, [G|R1]):- G>=X, particije(X, R, L1, R1). qsort([], []):-!.
Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

35

qsort([G|R], S) :- particije(G, R, L1, L2), qsort(L1, S1), qsort(L2, S2), spoji(S1, [G|S2], S). %8. Permutacije 0 i 1 duzine n permutacije(0, []):- !. permutacije(N, [0|R]) :- N1 is N-1, permutacije(N1, R). permutacije(N, [1|R]) :- N1 is N-1, permutacije(N1, R). %9. Permutacije liste L koja nam je prosledjena % [1,2,3] --> [1,3,2] clan(X, [X|R]). clan(X, [G|R]):-clan(X, R). permutacije2([], []). permutacije2(L, L1):- clan(X, L), L1 = [X|R], brisi(X, L, L2), permutacije2(L2, R). brisi(X, [], []):- !. brisi(X, [X|R], R):- !. brisi(X, [G|R], [G|R1]):- brisi(X, R, R1). %10. Treba izracunati koliko podlisti konstantnog znaka se pojavljuje u nasoj listi... %[1,2,-3,-4, -5, 6, -7, 8,9] --> N=5 pozneg([], 0). pozneg([X], 1). pozneg([X,Y | R], N):- X*Y < 0, pozneg([Y|R], N1), N is N1 +1. pozneg([X,Y | R], N):- X*Y > 0, pozneg([Y|R], N). %dodati sve slucajeve za 0. %11 Napisati predikat ubaci kojim se ubacuje na sve moguce nacine dati element u listu %ubaci(X, L, L) ubaci(X, [], [X]):- !. ubaci(X, L, [X|L]). ubaci(X, [G|R], [G|R1]):- ubaci(X, R, R1).
Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

36

%12. Napisati predikat kojim se izlistavaju elementi ciji su indeksi stepeni dvojke. Poceti brojanje od 1. %izdvoj([5,3,2,1,3,4,5,10,8,2], L) --> L=[5,3,1,10] % 12 4 8 izdvoj(L, L1):- izdvoj(L, L1, 1, 1). izdvoj([], [], _,_). izdvoj([G|R], [G|R1], N, N):- I is N+1, S is N*2, izdvoj(R, R1, I, S). izdvoj([G|R], L, I, S):- I =\= S, I1 is I+1, izdvoj(R, L, I1, S). %13. Napisati predikat kojim se proverava da li je b izmedju a i c u datoj listi %L. %izmedju(L, a, b, c) izmedju([G|R], A, B, C) :- G\==A, izmedju(R, A, B, C). izmedju([A|R], A, B, C) :- izmedju(R, B, C). izmedju([G|R], B, C) :- G\==B, izmedju(R, B, C). izmedju([B|R], B, C):- izmedju(R, C). izmedju([G|R], C):- G\==C, izmedju(R, C). izmedju([C|R], C). %14. Napisati predikat kojim pronalazimo elemente liste A u listi L i zamenjujemo sa listom B. % L = [1,2,3,1,2] A = [1,2] B = [4] % L = [4, 3, 4] zameni([], _, _, []). zameni(L, A, B, L1):- podlista(L, A), izbaci(L, A, Lpom), zameni(Lpom, A, B, L2), spoji(B, L2, L1). zameni([G|R], A, B, [G|L1]) :- \+(podlista([G|R], A)), zameni(R, A, B, L1). %podlista(L1, L2) - gleda da li su iste na pocetku podlista(_, []). podlista([G|R1],[G|R2]):-podlista(R1, R2).

Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

37

%izbaci(L1, L2, L3) -- L3 je ostatak kada iz L1 izbacimo L2 izbaci(L, [], L). izbaci([G|R1], [G|R2], L):- izbaci(R1, R2, L).

%15. Da li je lista palindrom palindrom(L) :- obrni(L, L1), jednake(L, L1). jednake([], []). jednake([G|R1], [G|R2]):- jednake(R1, R2).

Vezbe 8 Pretrage
U sirinu: Imamo neku mapu gradova i puteve izmedju njih. Jedan nacin pretrage je da idemo svakim putem (pretraga u sirinu - pretrazujemo sve one puteve koji su iste "duzine" - rastojanja. I zatim tako oiz svakog izabranog grada...Oznacavanjem gradova sprecicemo da se vratimo unazad... [MAPA GRADOVA] npr hocemo da dodjemo iz Arada u Bukurest. I sada u pocetku biramo Zerind (75), Sibiu (140) i Timisoara(118). Zatim idemo dalje i sabiramo i uvek krecemo od najmanjeg zbira... Najkraci put je duzine 418 -Pohlepna pretraga... A* predstavlja kombinaciju ove dve pretrage. Jer BFS uvek nadje najkraci put, ali pretrazuje veci prostor. Pohlepni pretrazuje manji prostor, ali ne mora da nadje najkraci put... U A* postoje neke pretpostavke... Npr na mapi gradova, vazdusna udaljenost medju gradovima...I onda zakljucujemo na osnovu tih pretpostavki... g - duzina puta do tog cvora h - heuristika u tom cvoru f=g+h trazimo min f [POGLEDATI MAPU] Arad(366) Zerind(449) Sibiu (393) Timisoara (447)
Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

38

Faragas(239 + 176 = 415) Oradea (140 + 151 + 380 = 671) Rimnicu Vilacea (413) Testi(418) Craiova(366 + 160 = 526) Bukurest (450) --iako smo stigli, nismo zavrsili, mozda ima kraci put! Bukurest(428) --iz Testi -- sada se algoritam zavrsava Mnogo manje puteva smo ispitivali. I na taj nacin smo napravili neko ubrzanje 1. Potrebno je naci najjeftiniji put od grada A do grada E. Procenjene cene putovanja od razlicitih gradova su: (A, 105), (B, 100), (C, 50), (D, 20). Stvarne cene putovanja izmedju gradova su: (A, B, 20), (A, C, 50), (A, D, 100), (B, C, 20), (B, E, 100), (C, D, 30), (D, E 30). Izmedju ostalih gradova nema puta. Prikazati izvrsavanje A*. h < prave cene puta - to se zove dopustivost nije dovoljno da se nadje optimalan put A* je potpun -- to znaci da uvek nadje put (ne mora da bude optimalan) Menhetn -- minimalan broj polja koje treba preci vertikalno ili horizontalno da bi se doslo do cilja 3. Na datoj tabli sprovesti algoritam A*. Kao heuristicka mera rastojanja izmedju dva vora koristi se Mentehn rastojanje. S oznacava start, a C cilj. Stupanje na belo polje kosta 1, na sivo 6, a crna su neprohodna. S CILJ B B B B C S C B B B START B B cena puta =/= heuristika!!! Heuristika nam kaze koliki je broj polja. A cenu racunamo tek kada prelazimo preko odredjenog pola!!! U heuristici se ne razlikuju crna, siva i bela polja! Heuristika ih gleda kao da su jednaka... ZATVORENA LISTA: (3,3) OTVORENA LISTA: (3,2)[(3,3), 1+2 = 3] (3,4)[(3,3), 1+4=5] (2,3)[(3,3), 6+2 = 8] (3,4)[(3,3), 1+4=5] (2,3)[(3,3), 6+2 = 8] (3,1)[(3,2), 1+1+3 = 5] --BROJIMO OD STARTA --2 do njega i onda jos 3 do cilja

(3,3) (3,2)[3,3]

Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

39

(3,3) (3,2)[3,3] (3,4)[3,3]

(3,3) (3,2)[3,3] (3,4)[3,3] (3,1)[3,2] (3,3) (3,2)[3,3] (3,4)[3,3] (3,1)[3,2] (2,1)[3,1] (3,3) (3,2)[3,3] (3,4)[3,3] (3,1)[3,2] (2,1)[3,1] (3,5)[3,4] (3,3) (3,2)[3,3] (3,4)[3,3] (3,1)[3,2] (2,1)[3,1] (3,5)[3,4] (2,5)[3,5] (3,3) (3,2)[3,3] (3,4)[3,3] (3,1)[3,2] (2,1)[3,1] (3,5)[3,4] (2,5)[3,5] (1,5)[2,5] (3,3) (3,2)[3,3] (3,4)[3,3] (3,1)[3,2] (2,1)[3,1] (3,5)[3,4] (2,5)[3,5] (1,5)[2,5] (1,4)[1,5] (3,3) (3,2)[3,3] (3,4)[3,3] (3,1)[3,2] (2,1)[3,1] (3,5)[3,4] (2,5)[3,5] (1,5)[2,5] (1,4)[1,5] (1,3)[1,4] (3,3) (3,2)[3,3] (3,4)[3,3] (3,1)[3,2] (2,1)[3,1] (3,5)[3,4] (2,5)[3,5] (1,5)[2,5] (1,4)[1,5] (1,3)[1,4] (1,2)[1,3] Posto smo dodali (1,2) a to nam je ujedno i cilj, KRAJ!

(2,3)[(3,3), 8] (3,1)[(3,2), 5] (3,5)[(3,4), 2+5=7] (2,3)[(3,3), 8] (3,5)[(3,4), 7] (2,1)[(3,1), 3+2 = 5] (2,3)[(3,3), 8] (3,5)[(3,4), 7] (1,1)[(2,1), 3+6+1 = 10] (2,3)[(3,3), 8] (1,1)[(2,1), 3+6+1 = 10] (2,5)[(3,5), 3 + 4 = 7] (2,3)[(3,3), 8] (1,1)[(2,1), 3+6+1 = 10] (1,5)[(2,5), 4+3 =7] (2,3)[(3,3), 8] (1,1)[(2,1), 10] (1,4)[(1,5), 5+2=7] (2,3)[(3,3), 8] (1,1)[(2,1), 10] (1,3)[(1,4), 6+1=7] (2,3)[(3,3), 8] (1,1)[(2,1), 10] (1,2)[(1,3), 7] (2,3)[(3,3), 8] (1,1)[(2,1), 10]

Rekonstrukcija puta: (1,2)[1,3] <--- (1,3)[1,4] <--- (1,4)[1,5] <--- (1,5)[2,5] <----(2,5)[3,5] <---- (3,5)[3,4] <---- (3,4)[3,3] <---- (3,3) Duzina puta je 7! 4. Pera peca na mostu A bez mnogo uspeha. Od druga koji je na mostu B je cuo da je tamo ulov veliki. Pera procenjuje vreme u minutima koje mu je potrebno da autom dodje do mosta B kao najmanji broj ostrva preko kojih mora da prodje. Vremena koja su mu potrebna za prelazak preko svakog od ostrva su na prilozenoj slici zapisana na tim ostrvima, ali ih pera ne zna. Kako bi zapamtio najkraci put i za ubuduce, Pera odlucuje da ga nadje algoritmom A*. Opisati Perinu pretragu. [POGLEDATI SLIKU ZADATKA : http://poincare.matf.bg.ac.rs/~danijela/VI/08_cas/Astar.pdf]

Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

40

Zatvorena lista: A A, C(A) A, C(A), D(A) A, C(A), D(A), E(A) A, C(A), D(A), E(A),B(C) A, C(A), D(A), E(A),B(C),F(E) A, C(A), D(A), E(A),B(C),F(E), B(F) Kraj B <-- F <-- E <-- A, duzina 3

Otvorena lista: C(A,2) E(A,3) D(A,2) E(A,3) D(A,2) B(C,4) E(A,3) B(C,4) B(C,4) F(E,3) F(E,3) B(F,3) B(F,3) -

Ukoliko se desi da u zatvorenoj listi nije cilj, a da je otvorena lista prazna, onda smo dosli do neuspeha i nismo nasli put! Primena algoritma A* je jako siroka. Npr. Ona igrica kada imamo kao slagalicu koja ima jedno prazno polje i rotiranjem plocica, mi treba da dobijemo sliku takodje moze da se resi A* algoritmom. Recimo da imamo tablu 3*3 sa brojevima od 0-8 i cilj je da dobijemo sve slozene cifre, pritom samo 0 moze da se rotira sa nekim svojim susednim elementom: 031 012 785 345 426 678 I ovo moze da se resi sa A*. Svako stanje tablice nam je jedan cvor. Npr iz ovog pocetnog cvora mozemo da idemo: 301 785 426 i do: 731 085 426 I naravno, na vise nacina mozemo da dodjemo do zeljenog resenja. Zato nam sada fali heuristika! Jedan primer heuristike h1 -- broj polja koji nisu na svom mestu. u nasem primeru h1 = 7 h2 -- zbir Menhetn rastojanja za svako polje koje nije na svom mestu h2 = 2+1+2+2+2+3+2 = 14 E sad, da bi pomerili A --> B, mora da vazi 1. B je prazan 2. A je pored B Takodje, ako zanemarimo ova dva uslova, dobijemo h1. Ako zanemarimo samo prvi uslov, onda smo dobili h2 i ovo je nacin na koji racunar za zadati skup uslova moze da odredi neke heuristike. h2 >=h1 jer ispitujemo manji broj puteva. Tako da H = max(h1, h2), gde je H najbolja heuristika...

Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

41

Vezbe 9: Minimax i alfa beta odsecanje Vezbe 10: 13.5.2013


Masinsko ucenje Cime se sve bavi masinsko ucenje? 1)Klasifikacija - odredjivanje tipa objakata 2)Regresija - za dati podatak vraca neki realan broj (za podatke o nacinu zivota vraca ocekivanu duzinu zivota i slicno) Generalizacija - uopstavanje pojmova, zanemarivanje nekih aspekata (primer sa pticom - zakljucili smo da je kolibri ptica na osnovu toga sto ima krila i perje) Takodje, dva bitna pojma su: Nadgledano ucenje - dajemo instance i izlaz za te instance Nenadgledano ucenje - dajemo instance bez izlaza i racunar sam treba da zakljuci sta je izlaz Ciljna funkcija - nasa trazena funkcija primer iz knjiga - razlikovati tekstove koji su racunarski i koji nisu racunarski. I te tekstove razlikujemo po tome sto se u racunarskim tesktovima dosta puta pojavljuju reci racunar i datoteka. Sto se vise pojavljuju te reci, to je veca verovatnoca da je tesk racunarski. |y | \ ** * * | ** \ *** | ** \ ** | * ** \ ** |* ** \ -------------------------------------------------x prostor hipoteza - sve moguce funkcije i nas zadatak je trazenje ciljne funkcije u prostoru hipoteza (u nasem primeru ova prava gde su sa njene gornje strane racunarski tekstovi, a sa njene donje strane tekstovi koji nisu racunarski...) Nas prostor hipoteze: f = ax + by + c Training skup - date instance - sluze za ucenje Test skup - nove instance - one koje treba testirati E sad, vazno je da prostor hipoteza, ne sme da bude ni premali ni prevelik... Instanca je jedan podatak.
Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

42

Klasifikacija Postoji vise metoda klasifikacije: -metoda zasnovana na instancama -metoda ucenja stabla odlucivanja -metoda potpunih vektora -metoda Bajesove klasifikacije -... Ove navedene su najcesce, a mi cemo raditi samo prve dve... Kod prve metode, uopste ne racunamo ciljnu funkciju, vec koristimo instance i neka odredjena svojstva da nam odrede klasu nove instance. *N-najblizih suseda npr kod onog primera sa tekstovima, dobijemo novi teks i na osnovu njegovog polozaja na frafiku(broja kljucnih reci) mi mozemo da zakljucimo da li on pripada onim "donjim" (ne racunarskim) ili onim gornjim (racunarskim) tekstovima. Za ovaj metod treba nam neka funkcija d - funkcija rastojanja za koju mora da vazi d(x,y) >=0, d(x,y) = d(y,x) i d(x,y) <= d(x,z) + d(z,y) potrebno je odrediti d i N, pri cemu N ne sme da bude ni premali ni preveliki. Zadatak: Training skup: x1 | x2 | x3 | klasa 1 | 1 | 0 |A 1 | 0 | 2 |A 2 | 2 | 3 |A 3 |2 |4 |B 1 |4 |3 |B 4 |3 |3 |B Test skup x1 | x2 | x3 | klasa 0 |0 |0 | 3 |3 |3 | 1 |3 |4 | 4 |5 |3 | Resiti metodom 3-najbliza suseda, ako je d Menhetn rastojanje. Menhetn rastojanje: d(x,y) = |x1-y1| + |x2 - y2| + |x3-y3| (0,0,0) d11 = |0-1| + |0-1| + |0-0| = 2 d12 = |0-1| + |0-0| + |0-2| = 3 d13 = |0-2| + |0-2| + |0-3| = 7 d14 = |-3| + |-2| + |-4| = 9 d15 = |-1| + |-4| + |-3| = 8 d16 = |-4| + |-3| + |-3| = 10 Pa su prve tri tri najmanje tacke, a prve tri tacke pripadaju klasi A, pa i (0,0,0) pripada klasi A.

Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

43

(3,3,3) d21 = 2+2+3 = 7 d22 = 2+3+1 = 6 d23 = 1+1+0 = 2 A d24 = 0+1+1 = 2 B d25 = 2+1+0 = 3 d26 = 1+0+0 = 1 B Pa i (3,3,3) pripada klasi B (1,3,1) d31 = 0+2+4 = 6 d32 = 0+3+2 = 5 d33 = 1+1+1 = 3 A d34 = 2+1+0 = 3 B d35 = 0+1+1 = 2 B d36 = 3+0+1 = 4 Pa i (1,3,1) pripada klasi B (4,5,3) d41 = 3+4+3 = 10 d42 = 3+5+1 = 9 d43 = 2+3+0 = 5 A d44 = 1+3+1 = 5 B d45 = 3+1+0 = 4 B d46 = 0+2+0 = 2 B Pa je i (4,5,3) klase B x1 | x2 | x3 | klasa |ISPRAVNI ODGOVORI 0 | 0 | 0 |A+ |A + 3 |3 |3 |B|A + 1 |3 |4 |B|B 4 |5 |3 |B|B E sad, imamo i ispravne odgovore koji su nam dati a to je A A B B preciznost = (broj_tacno_klasifikovanih) / (ukupan_broj_instanci) = 3/4 = 0.75 = 75% sp - stvarno pozitivni - oni koji su pozitivni i prepoznati kao pozitivni sn - stvarno negativni - oni koji su negativni i koji su prepoznati kao negativni lp - lazno pozitivni - oni koji su negativni, a prepoznati su kao da su pozitivni ln - lazno negativni - oni koji su pozitivni, a prepoznati su kao negativni SP = 1 SN = 2 LP = 0 LN = 1 USP - udeo stvarno pozitivnih USP = SP / (SP+LN) USN = SN / (SN + LP)
Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

44

ULN = LN / (LN + SP) ULP = LP / (LP + SN) Ucenje stabla odlucivanja: Imamo stablo gde su u cvorovima atributi, a u listovima su klasi C1, C2, ..., a grane su vrednosti atributa... npr IMA_KRILA / \ /ne \da / \ IMA_PERJE JESTE_PTICA / \ ... ... Cilj nam je da imamo sto manje stablo... Greska klasifikacije: Err(s) = 1-max(pi), i=1,c. S - skup nasih trening instanci C - broj klasa pi - verovatnoca da nesto pripada i-toj klasi Dobitak(S, Atr1) = Err(S) - Suma(|Sv|/|S|)*Err(Sv), pri cemu su ove apsolutne vrednosti, normw navedenih skupova za svaku vrednost atributa VtAtr Entropija(S) = -Suma(pi*log(2)pi) pa je dobitak(A, Atr1) = Entropija(S) - Suma(|Sv|/|S|)*Entropija(Sv) Zadatak iz skripte sa zivotinjama S = {L,K,M,Z,Zmaj} E(S) = 1-maxpi = 1-3/5 = 2/5 Pda = 2/5 Pne = 3/5 D(S,Velicina) = 2/5 - 3/5*0 - 2/5*0 = 2/5 E(S, Mala) = 1-1 = 0 Pda = 0 Pne = 1 E(S, Velika) = 1-1=0 Pda = 1 Pne = 0 D(S, Otrovnost) = 0.2 D(S, Broj_nogu) = 0 D(S, Parnost_visina) = 0

Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

45

Velicina /velika \mala da ne Prosirenje ovog primera sa zmijom, pcelom ubicom itd Sada se pravi jedno veliko stablo odlucivanja E(S) = 1- 4/8 = 4/8 Pda = 4/8 Pne = 4/8 E(S/Mala) = 1-3/5 = 2/5 Pda = 2/5 Pne=3/5 E(S/Velika) = 1-2/3 = 1/3 Pda = 2/3 Pne = 1/3 D(S, Velicina) = 4/8 - 5/8*2/5 - 3/8*1/3 = 1/8 ---------------------------E(S/Bilje) = 1-3/4 = 1/4 Pne = 3/4 Pda=1/4 E(S/Meso) = 1- 3/4 = 1/4 Pda = 3/4 Pne = 1/4 D(S, Ishrana) = 4/8 - 4/8*1/4 - 4/8*1/4 = 2/8 ---------------------------E(S/Otrovna) = 1-1 = 0 Pda = 1 Pne=0 E(S/Neotvorna) = 1-4/5 = 1/5 Pda =1/4 Pne = 4/5 D(S, Otrovnost) = 4/8 - 3/8*0 - 5/8*1/5 = 3/8 --------------------------E(S/0) = 1-1/2 = 1/2 E(S/6) = 1-1 = 0 E(S/4) = 1-3/5 = 2/5 D(S, broj_nogu) = 4/8 - 2/8*1/2 - 1/8*0 - 5/8*2/5 = 1/8 --------------------------E(S/parna) = 1-2/4 = 1/2 E(S/neparna) = 1-1/2 = 1/2 D(S, parnost_visine) = 4/8 - 4/8*2/4 - 4/8*2/4 = 0 --------------------------Najvece D ima otrovnost. Iz tog razloga ce se otrovnost nalaziti u vrhu naseg stabla.

Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

46

OTROVNOST: / \ /NEOTROVNA \OTROVNA / \ DA Sada odavde treba nastaviti. Ostalo je S1 = {Lav, Macka, Koza, Zec, Morska Krava}. I sada sve opet racunamo, samo iskljucujemo otrovnost...Tj gledamo samo neotrovne. E(S1) = 1-4/5 = 1/5 E(S1/Mala) = 1-1 = 0 E(S1/Velika) = 1 - 1/2 = 1/2 D(S1, Velicina) = 1/5 - 3/5*0 - 2/5*1/2 = 0 -------------------------... D(S1, Ishrana) = 0 D(S1, Broj_nogu) = 0 D(S1, Parnost) = 0 Sada je svejedno sta biramo i uzecemo velicinu... OTROVNOST: / \ /NEOTROVNA \OTROVNA / \ VELICINA DA / \ / mala \velika / \ NE I sada opet primenjujemo isti postupak na S2 = {Lav, Morska krava} E(S2) = 1-1/2 = 1/2 E(S2/Bilje) = 1-1=0 E(S2/Meso) = 1-1=0 D(S2, Ishrana) = E(S2) - 1/2*0 - 1/2*0 = 1/2 ... I sada se racuna dalje. Na kraju dobijamo: OTROVNOST: / \ /NEOTROVNA \OTROVNA / \ VELICINA DA / \ / mala \velika / \ NE ISHRANA / \ /MESO \BILJE / \ DA NE

Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

47

Vezbe 11: 20.05.2013


Regresija primer: X11 X12 .... X1m --> Y1

Xn1 Xn2 .... Xnm --> Yn _______________________ X1, ..., Xm --> Y f(X1, ..., Xn) = Y b1X1 + b2X2 + ... + bmXm = Y b1, ..., bm su nepoznate X = (X1, X2, ..., Xm) b = (b1, .., bm) b*X + eps = Y eps - slucajna greska b^ = (XT*X)-1*XT*Y Srednje kvadratno odstupanje eps(Y) = 1/n * suma(yi - yi^)2 ,i=1,n y^ = b^*X + eps 1. Instrument meri brzinu tela u padu. Izmerena brzina je 2m/s u polaznom trenutku, 4 dve desetine kasnije, a 6.9 pola sekunde kasnije(u odnosu na polazni trenutak). Linearnom regresijom odrediti model koji predvidja brzinu tela u buducnosti i proceniti brzinu posle jedne i posle dve sekunde. Na osnovu modela proceniti ubrzanje sa koje Zemmljina teza uzrokuje u kretanju tela. Y = b*X, Y - brzina, X - vreme Y= |2 | |4 | |6.9|

X = |1 0 | |1 0.2| |1 0.5|

Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

48

XT =

|1 |0

1 0.2 0.7 | 0.29|

1 | 0.5|

XT*X = |3 |0.7

Det = 3*0.29 - 0.49 = 0.38 (XT*X)-1 = 1/0.38 * | 0.29 |-0.7 XT*Y = |12.9| |4.25|

-0.7| 3 |

(XT*X)^-1*XT*Y = 1/0.38 * |0.29*12.9-0.7*4.25| = |2.02| |-0.7*12.9+3*4.25 | |9.78| Y = 2.02 + 9.78*X V = V0 + g*t 2.Jedne nedelje januara u ponedeljak, utorak i petak izmerene su temperature -2, 0 i 1stepen. Linearnom regresijom proceniti temperaturu u sredu i cetvrtak u podne. Koliki je koeficijent korelacije za dobijeni linearni model? X - dan Y - temperatura X= 1 1 1 2 1 5 Y= 2 0 1

... Y = -2.08 + 0.65x

3. U eksperimentu sa daljinskim upravljanjem elektricnim helikopterom, povecanje napona na elektromotoru za 10, 20 i 30 V rezultovalo je povecanjem brzine za 1,2 i 6 m/s. Posto se pretpostavlja da su promene pravca vetra uticale na postignutu brzinu, potrebno je modelovati zavisnost izmedju povecanja napona i dobitka u brzini linearnim modelom koji najbolje odgovara pdacima, Na osnovu tog modela, predvideti povecanje brzine pri povecanju napona za 15, 25 i 35.

Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

49

X=

1 1 1 1 2 6

10 20 30

Y=

... Y = -2 + 0.25*x Y = -2 + 0.25*15 = 1.75 Y = -2 + 0.25*25 = 4.25 Y = -2 + 0.25*35 = 6.75 3. Usled poremecaja na trzistu prirodnog gasa, doslo je do brzog rasta cena. U ponedeljak, u utorak i u cetvrtak u podne cene kubnog metra su bile 3, 5 i 6 dolara. Proceniti cenu gasa u sredu u 04:00h i petak u 18:00h. Petak u podne 18/12 = 0.25 Petak u 18h 5.25 Sreda u 4h 4/12 = 1/3 --> 3-1/3 = 2/3 X= 1 1 1 3 5 6 1 2 4

Y=

... 4. [GENETSKI ALGORITMI] Genetskim algoritmom se trazi maksimum funkcije 20-x^2. Populacija sadrzi (samo) jedinke (1), (-4), (2) i (3). Za svaku od jedinki, izracunati verovatnocu da ce biti izabrana za reprodukciji u ruletskoj selekciji. pi = fi/(suma(fi)) f(1) = 19 f(-4) = 4 f(2) = 16 f(3) = 11 p1 = 19/50 p2 = 16/50
Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

50

p-4 = 4/50 p3 = 11/50 MINIMAX VEZBANJE - SANJA :D STABLO ODLUCIVANJA VEZBANJE SANJA :) 5. Na osnovu sledecih podataka konstruisati stablo odlucivanja dubine 1 koriscenjem mere "greska klasifikacije" A 2 1 2 1 2 1 2 1 B 1 1 2 3 3 3 1 2 C 2 2 1 2 1 3 3 3 Klasa: + + + + + Izracunati preciznost dobijenog drveta odlucivanja na sledecem test skupu: A 1 1 1 3 B 1 2 2 3 C 1 1 3 1 Klasa + + ...

Vetaka inteligencija beleke sa vebi ** Simi Aleksandra ** mi10063@alas.matf.bg.ac.rs

51

You might also like