skripta nova ( prolog )

103
Univerzitet u Novom Sadu Fakultet tehničkih nauka Odsek za elektrotehniku i računarstvo Institut za računarstvo i automatiku Zora Konjović, Đorđe Obradović Zbirka zadataka iz predmeta Računarska inteligencija Novi Sad, mart 2003

Upload: sdpbih

Post on 22-Nov-2015

162 views

Category:

Documents


18 download

DESCRIPTION

skripta prolog programski jezici

TRANSCRIPT

  • Univerzitet u Novom Sadu Fakultet tehnikih nauka Odsek za elektrotehniku i raunarstvo Institut za raunarstvo i automatiku

    Zora Konjovi, ore Obradovi

    Zbirka zadataka iz predmeta Raunarska inteligencija

    Novi Sad, mart 2003

  • Sadraj 1. UVOD................................................................................................................3

    2. REPREZENTACIJA ZNANJA......................................................................5 2.1. PREDIKATSKA LOGIKA ...............................................................................5

    2.1.1. Teorijska osnova...............................................................................5 2.1.2. Softwerske tehnike ............................................................................5 2.1.3. Primeri i zadaci za vebu ...............................................................12

    2.2. NEURONSKE MREE .................................................................................23 2.2.1. Opti model neuralnih mrea .........................................................23 2.2.2. Klasifikacija neuronskih mrea ......................................................28 2.2.3. Algoritmi za obuavanje neuronskih mrea ...................................29

    2.3. FUZZY LOGIKA .........................................................................................45 2.3.1. Fuzzy skupovi .................................................................................45 2.3.2. Reprezentacija znanja primenom fuzzy skupova ............................47 2.3.3. Zakljuivanje u fuzzy logici ............................................................47 2.3.4. Reavanje problema primenom fuzzy logike...................................48

    3. TEHNIKE RASUIVANJA .........................................................................55 3.1. PRETRAIVANJE.......................................................................................55

    3.1.1. Enumerativni algoritmi i optimizacioni algoritmi ..........................57 3.1.2. Genetski algoritmi ..........................................................................75

    3.2. DEDUKCIJA ..............................................................................................75 3.2.1. Izraunavanje odgovora u predikatskoj logici ...............................75

    4. INTELIGENTNI AGENTI ...........................................................................85 4.1. ROBOCODE...............................................................................................87

    4.1.1. Osnovni delovi ROBOCODE okruenja.........................................87 4.1.2. Robocode API.................................................................................89

    5. LITERATURA...............................................................................................97

  • Predgovor

    I

  • Uvod

    1. Uvod Redosled: (22) Predikatska logika uvod sintaksa lista stablo graf majmun i banana izraunavanje odgovora u Predikatskoj logici

    (stablo pretraivanja) (12) Pretrage uvod prvi u dubinu, prvi u irinu iterativni prvi u irinu, bidirekciona pretraga

    A* primeri: slagalica, lavirint, skaka, majmun i banana (6) Genetski algoritmi uvod primer:

    odreivanja minimuma funkcije odreivanje maksimuma funkcije

    (10) Neuronske mree uvod najprostiji oblik (pseudo kompetitivno obuavanje) generalisano delta pravilo primeri: prepoznavanje slova, 7 segmentni displej,

    funkcija, crna kutija, automat prelaza stanja (6) Fuzzy logika uvod

    inverzno klatno fuzzy pretraivanje

    3

  • Reprezentacija znanja

    2. Reprezentacija znanja

    2.1. Predikatska logika

    2.1.1. Teorijska osnova

    2.1.2. Softwerske tehnike

    PROLOG (PROgraming in LOGic) je programski jezik kojim je mogue opisati i reiti odreen problem na nain opisan predikatskom logikom.

    Baza znanja je osnova za izvoenje zakljuaka i sastoji se od injenica i pravila koji predstavljaju strukturu u kojoj figuriu relacije. Na primer baza znanja o porodinim vezama grafiki predstavljena na slici 2.1.

    Slika 2.1 Primer rodbinskih veza

    programski se opisuje na sledei nain:

    otac(ivan, toma). otac(toma, petar). otac(petar, marko). otac(petar, jasna).

    5

  • Reprezentacija znanja

    majka(mara, toma). majka(nina, marko). majka(nina, jasna).

    Program 2.1 Roditeljske veze

    Prethodno opisan primer predstavlja reprezentaciju znanja u obliku skupa injenica. injenice su gradivni elementi svake baze znanja i uvek predstavljaju taan iskaz, opisuju se na sledei nain: predikat(Arg1, Arg2, Arg3, ...) Gde predikat predstavlja ime relacije koja povezuje objekte Arg1, Arg2, Arg3, .... Predikat moe da ima proizvoljno mnogo argumenata.

    U programu 2.1 veza izmeu objekata ivan i tome je otac i ita se: Ivan je otac Tomi. Pored konstanti a to su u ovom primeru ivan i toma mogue je koristiti i promenljive. Na primer, stariji(adam, X). voli(X, X).

    Program 2.2. Primer korienja promenljivih

    U ovom primeru prvom injenicom reeno je da je adam stariji od bilo koga a drugom da svako voli samog sebe. Znai korienjem injenica u mogunosti smo da na jednostavan nain predstavimo znanje o posmatranom problemu. Naravno cilj ovakve reprezentacije je da pored opisa posmatranog sistema budemo u mogunosti da izvodimo odreene zakljuke. Na primer, Ko je tomin otac? ili Od koga je stariji adam?.

    ovek pored skupa injenica u zakljuivanju barata i odreenim skupom pravila. Na primer, ako je ivan tomin otac, onda je toma ivanovo dete, odnosno iz relacije otac moe se izvesti relacija dete:

    dete(X, Y):-otac(Y, X). dete(X, Y):-majka(Y, X).

    Program 2.3 Primer definisanja pravila

    Drugim reima pravilo predstavlja specijalnu relaciju koja povezuje zakljuak i pretpostavku. Na primer: pravilo(zakljuak, pretpostavka). U PROLOG-u se zbog preglednijeg pisanja umesto uobiajenog naina pisanja (kao relacija), pravila definiu na specijalan nain:

    6

  • Reprezentacija znanja

    zakljuak :- pretpostavka. Pravila se interpretiraju tako to se proveri tanost pretpostavke a potom na osnovu nje izvodi se zakljuak ili moe da se kae da ako je tana pretpostavka onda je taan i zakljuak.

    U PROLOG-u se na ravnopravan nain mogu koristi dva naina zapisa infiksan i postfiksan.

    Kod infiksnog naina zapisa (a) relacija se navodi izmeu objekata. Samim tim infiksan nain mogue je koristiti samo u relacijama izmeu dva objekta. Postfiksnim nainom zapisa (b) prvo navodimo relaciju pa potom objekte.

    a) ivan otac toma. b) otac(ivan, toma).

    Infiksne relacije moraju se posebno navesti kako bi ih PROLOG prevodilac mogao interpretirati.

    Primerom 2.4definisano je pravilo roditelj koji kae X je Y-u roditelj ako je X Y-u majka pored ovoga takoe vai pravilo X je Y-u roditelj ako je X Y-u otac.

    roditelj(X, Y):- majka(X, Y). roditelj(X, Y):- otac(X, Y).

    Program 2.4 Primer pravila

    Drugim reima ova dva pravila mogu da se opiu jednim koji kae X je Y-u roditelj ako je X Y-u majka ili je X Y-u otac. U PROLOG-u se to opisuje na sledei nain:

    roditelj(X, Y):- majka(X, Y); otac(X, Y).

    Program 2.5 Kombinacija vie injenica u jednom pravilu

    U ovom iskazu ; predstavlja logiki operator ILI. U sluaju da pravilo u delu pretpostavke sadri dve injenice koje istovremeno moraju da budu zadovoljene one se razdvajaju znakom , koji predstavlja logiki operator I. Na primer,

    deda(X, Y) :- otac(X, Z), roditelj(Z, Y). sestra(X, Y):- roditelj(O, X), majka(O, Y), pol(Y, z), razliiti(X, Y). predak(X, Y):- roditelj(X, Y). predak(X, Y):- roditelj(X, Z), roditelj(Z, Y).

    7

  • Reprezentacija znanja

    predak(X, Y):- roditelj(X,Z),roditelj(Z,W), roditelj(W,X).

    Program 2.6 Logiki operator I

    U prethodnim primerima pokazana je situacija u kojoj definiemo pravilo kombinacijom vie drugih pravila. Takoe je mogue definisati pravilo i rekurzivno:

    predak(X, Y):-roditelj(X, Y). predak(X, Y):-roditelj(X, Z), predak(Z, Y).

    Program 2.7 Rekurzivna pravila

    Ciljevi ili upiti su pored injenica i pravila veoma vaan deo programskoj jezika PROLOG. Sam mehanizam za izraunavanje odgovora bie obraen u posebnom poglavlju. Postoje dve vrste upita: upiti koji kao odgovor imaju Ko? ili ta? i upiti koji odgovaraju na pitanje Da li?.

    Ciljevi ili upiti postavljaju se u posebnom prozoru i to na sledei nain:

    ?-elementi_upita.

    Recimo pitanje Markov otac? u PROLOG-u bismo napisali:

    ?-otac(X, marko). X=toma

    ili pitanje Da li je Toma Markov otac? napisali bismo ovako:

    ?-otac(toma, marko). Yes

    Odgovor No u PROLOG-u se interpretira kao nemogunost donoenja pozitivnog zakljuka. Odnosno, pomou trenutne baze znanja interpreter nije u mogunosti da izvede pozitivan zakljuak.

    Kao odgovor na postavljano pitanje mogue je dobiti i vie odgovora, recimo na pitanje:

    ?-otac(X, _).

    Dobiemo odgovor:

    X=ivan ->; X=toma ->; X=petar ->; No

    Gde No znai Nema vie pozitivnih odgovora!.

    8

  • Reprezentacija znanja

    Sintaksa programskog jezika PROLOG

    Na slici 2.2 prikazana je podela svih elemenata programskog jezika PROLOG.

    Slika 2.2 Podela osnovnih elemenata PROLOG-a

    Atom je svaki niz simbola, cifara i _ koji poinje malim slovom, ili je to niz posebnih znakova ili je to bilo koji niz znakova koji se nalazi unutar navodnika.

    Brojevi su niz cifara koji poinje predznakom i ne razlikuju se posebno celi brojevi od realnih.

    promenljive su neke veliine koje se tokom izvravanja menjaju. One se imenuju nizom znakova koji poinje velikim slovom ili specijalnim znakom _. Specijalan sluaj je _ promenljiva koja predstavlja takozvanu anonimnu promenljivu, odnosno vrednost ove promenljive nam nije od interesa.

    Struktura je sloen term koji se formira vezivanjem nekoliko jednostavnijih termova. Funktor je atom koji objedinjuje strukturu u jedinstvenu celinu. Strukture se razlikuju po imenu i broju argumenata.

    Specijalan sluaj strukture je lista koja se zbog estog korienja i opisuje na poseban nain. Pored listi veoma korisna struktura je binarno stablo.

    Liste

    Lista je struktura koja je ili prazna ili se sastoji od glave i repa. Prazna lista opisuje se na sledei nain: []. Glava i rep se u listi odvajaju simbolom | ([g|[]]). U nastavku je dato nekoliko predikata kojim se opisuju osnovne operacije sa listama. Vrlo esto se lista

    9

  • Reprezentacija znanja

    prikazuje kao [a, b, 1, 2, c, d], gde je a glava liste, a lista [b, 1, 2, c, d] je rep liste. a) Predikat kojim se proverava da li je neka struktura lista.

    lista([]). lista(G|R):-lista(R).

    b) Predikat kojim se proverava da li se neki element nalazi u listi.

    element(X, [X|_]). element(X, [Y|R]):-element(X, R).

    c) Spajanje dve liste

    pripoji([], X, X). pripoji([X|R], Y, [X|Z]):-pripoji(R, Y, Z).

    d) Obrtanje liste

    obrni([], []). obrni([X|Xr], Y):-obrni(Xr, Yr), pripoji(Yr, [X], Y). obrni1(L, OL):-obrni(L, [], OL). obrni([], OL, OL). obrni([G|R], S, OL):-obrni(R, [G|S], OL).

    ) Brisanje elemenata iz liste. (Prvog u listi.)

    brisi(X, [X|R], R). brisi(X, [Y|R], [Y|R1]):-brisi(X, R, R1).

    f) Dodavanje elementa u listu

    ubaci(X, L, VL):-brisi(X, VL, L).

    g) Permutacija elemenata liste i sortiranje

    permutacija([], []). permutacija([X|L], P):-permutacija(L, L1), ubaci(X, L1, P). uredjena([X]). uredjena([X, Y|R]):-X=

  • Reprezentacija znanja

    podlista(S, L):-pripoji(L1, S, L2), pripoji(L2, L3, L).

    Binarno stablo

    Binarno stablo je struktura koja je ili prazna ili ima glavu i dva podstabla: levo i desno.

    Binarno stablo prikazano na slici 2.4

    Slika 2.5 Binarno stablo

    u PROLOG-u se predstavlja na sledei nain:

    st(a, st(b, st(d, p, p), st(e, p, p)), st(c, st(f, p, p), p)).

    Sledi nekoliko najvanijih predikata koji opisuju binarno stablo i operacije nad njim.

    a) Predikat kojim se proverava da li je struktura binarno stablo.

    b_stablo(p). b_stablo(st(X, L, D)):-b_stablo(L), b_stablo(D).

    b) Predikat kojim se proverava da li se element nalazi u binarnom stablu.

    element(X, st(X, L, D)). element(X, st(S, L, D)):-element(X, L); element(X, D).

    Specijalan sluaj binarnog stabla je ureeno binarno stablo u kojem su elementi u levom podstablu manji od glave a elementi u desnom pod stablu su vei od glave.

    c) Predikat kojim se proverava da li se element nalazi u ureenom binarnom stablu.

    11

  • Reprezentacija znanja

    element(X, st(X, L, D)). element(X, st(G, L, D)):-XG, element(X, D).

    d) Predikat kojim se dodaje element u ureeno binarno stablo

    dodaj(X, p, st(X, p, p)). dodaj(X, st(G, L, D), st(G, L1, D)):-XG, dodaj(X, D, D1).

    e) Predikat kojim se brie element iz binarnog stabla.

    brisi(X, st(X, p, D), D). brisi(X, st(X, L, D), st(Ym, L1, D)):-najveci(L, Ym, L1). brisi(X, st(Y, L, D), st(Y, L1, D)):-XY, brisi(X, D, D1). najveci(st(Ym, L, p), Ym, L). najveci(st(Y, L, D), Ym, st(Y, L, D1)):-najveci(D, Ym, D1).

    f) Predikat za konverziju liste u ureeno binarno stablo

    lista_stablo([], p). lista_stablo([G|R], S):-lista_stablo(R, S1), dodaj(G, S1, S).

    g) Predikat za konverziju binarnog stabla u listu.

    stablo_lista(p, []). stablo_lista(st(G, L, D), Rez)):-stablo_lista(L, L1), stablo_lista(D, D1), pripoji(L1, [G|D1], Rez).

    h) Sortiranje liste

    sortiraj(L, SL):-lista_stablo(L, S), stablo_lista(S, Sl).

    2.1.3. Primeri i zadaci za vebu

    Zadatak 1.

    Kako bi se u predikatskoj logici prikazao sledei niz reenica?

    Jasna je stara 15 godina. Ona stanuje u kui. Njezine prijateljice su Milena i Marija. Jasnin otac zove se Marko a majka Katarina.

    starost(jasna, 15). stanuje(jasna, kuca). prijateljica(jasna, milena). prijateljica(jasna, marija). otac(marko, jasna).

    12

  • Reprezentacija znanja

    majka(katarina, jasna).

    Zadatak 2.

    Napisati niz injenica i pravila koji opisuju sledeu situaciju.

    Radnik Marko roen je 28.3.1970. godine i po zanimanju je stolar. Milan je takoe radnik roen 19.4.1945. godine i po zanimanju je voza. Pera je pobedio Miku u tenisu, a Milana u fudbalu. Marko je izgubio od Gorana u pikadu. Pobednik je osoba koja je bilo koga pobedila u bilo kojoj disciplini.

    radnik(marko, rodjen(28, 3, 1970), stolar). radnik(milan, rodjen(19, 4, 1945), voza). pobedio(pera, mika, tenis). pobedio(pera, milan, fudbal). izgubio(marko, goran, pikado). pobedio(X, Y, Z):-izgubio(Y, X, Z). pobednik(X):-pobedio(X, _, _).

    Zadatak 3.

    U programskom jeziku PROLOG definisati faktorijel.

    faktorijel(0,1). faktorijel(N, F):-N1 is N-1, faktorijel(N1, F1), F is N*F1.

    Veba 1. Upoznavanje sa SWI PROLOG interpreterom

    1. SWI PROLOG interpreter se pokree kao standardna windows aplikacija.

    2. Nakon pokretanja (plwin.exe) programa pred vama se pojavljuje glavni prozor PROLOG interpretera.

    13

  • Reprezentacija znanja

    Neposredno iza znaka '?-' postavljaju se upiti.

    3. Da bi se PROLOG program preveo u internu formu i smestio u radnu bazu znanja, potrebno je konsultovati sadraj datoteke u kojoj se program nalazi. Ova operacija se obavlja pozivanjem akcije File->Consult.... Nakon ega je neophodno pronai datoteku na nain standardan Windows okruenju.

    4. Novi program piemo tako to prvo izabiramo opciju 'File->New...', i nakon toga u internom editoru unosimo injenice i pravila. Pored ovog naina mogue je program naisati i snimiti bilo kojim standardnim editorom tekstualnih datoteka, u tom sluaju datoteka se otvara pozivanjem akcije File->Edit.... Interni editor pored standardnih operacija sa tekstualnim datotekama omoguava:

    - automatsku proveru sintaksne ispravnosti

    - prikaz kljunih izraza u razliitim bojama

    14

  • Reprezentacija znanja

    - osveavanje interne memorije PROLOG interpretera (Ctrl+c Ctrl+b)

    5. U sluaju da se program uitan u internoj memoriji menja bilo internim editorom bilo klasinim editorima neophodno je ponovno ga uitati u radnu memoriju interpretera 'File Reload modified files'

    6. Prvi program koji se unosi je model porodinog stabla.prikazan na slici 2.4.

    Slika 2.4 Model porodinog stabla

    Po unoenju injenica, snimite datoteku u svoj direktorijum, ekstenzija datoteke bi trebala da bude .pl i osveite internu memoriju PROLOG interpretera (File->Consult.. ili ako ste koristili interni editor Ctrl+c Ctrl+b).

    7. Ako je sve u redu (program sintaksno ispravan i nalazi se u internoj memoriji) u glavnom prozoru moete da ponete sa unoenjem upita. Za probu, upitajte 'Ko je kome otac?' i 'Ko je kome majka?'

    8. Vratite se u editorski prozor otkucajte predikate za roditelje i sestru. Snimite program i osveite radnu memoriju interpretera. Isprobajte kako rade predikati roditelj i sestra. Po ugledu na predikat sestra napiite predikat koji proverava da li je osoba X brat osobi Y.

    9. Napiite predikat predak1:

    predak1(X, Y):- roditelj(X, Y). predak1(X, Y):- roditelj(X, Z), predak1(Y, Y).

    Na osnovu ovog predikata napiite predikate predak2 (u kojem je zamenjen redosled prve i druge klauzule), predak3 (u kojem je izmenjen redosled ciljeva u drugoj klauzuli) i predak4 (u kojem je

    15

  • Reprezentacija znanja

    izmenjen redosled i ciljeva i klauzula). Isprobajte ove predikate. Kako se ponaaju?

    11. Proirite porodino stablo tako da dobijete veze ujak, tetka, brat od ujaka i sestra od strica. Dopunite pravila pravilima koji e proveravati pomenute veze.

    12. Snimite program!

    Veba 2. Rad sa listama

    1. Napiite predikat koji proverava da li je data struktura lista.

    2. Napiite predikat koji proverava da li se dati element nalazi u listi.

    3. Napiite predikat koji spaja dve liste.

    4. Proverite predikate koje ste napisali npr.

    ?- lista([a, s, d, f, g, h]).

    ili

    ?-element(s, [a, s, d, f, g]).

    5. Napiite predikate koji obru listu i briu element iz liste. Brisanje elementa iz liste uraditi na oba naina, pomou predikata pripoji i bez njega.

    6. Proverite korektnost napisanih predikata postavljanjem odgovarajuih upita u glavnom prozoru.

    7. Snimite program!

    8. Napiite program za sortiranje brojeva pomou permutacije i sortiranje Quick sort algoritmom.

    9. Proverite napisane programe.

    10. Snimite program!

    Veba 3. Rad sa binarnim stablom

    Pored osnovne sloenije strukture podataka, liste, postoji i sloenija struktura binarno stablo. U nastavku je dat pregled osnovnih operacija nad ovakvom strukturom.

    1. Binarno stablo se (podseanja radi) definie ovako:

    16

  • Reprezentacija znanja

    a. Prazno binarno stablo je atom p

    b. Binarno stablo je struktura koja se sastoji od: Elementa, levog i desnog podstabla.

    2. Na osnovu ove definicije napiite predikat (b_stablo(X)) koji proverava da li promenljiva X ima strukturu binarnog stabla. Koristite rekurziju.

    3. X je element binarnog stabla ako je:

    a. X isto to i Element u strukturi ili

    b. X je element levog podstabla ili

    c. X je element desnog podstabla

    4. Napiite predikat (element_s(X, S) ) koji proverava da li je X element binarnog stabla S.

    5. Implementirajte predikate (uvrsti_s(X, S, D)) za dodavanje elementa u binarno stablo koje je ureeno tako da se u levom podstablu nalaze elementi koji su strogo manji od Element-a. X je element koji se dodaje, S je stablo u koje se dodaje a D je stablo koje se dobije kao rezultat.

    6. Implementirajte predikate (brisi_s(X, S, D)) za brisanje elementa X iz binarnog stabla S a da posle brisanja dobijeno stablo D ostane ureeno.

    7. Implementirajte predikat ( sortiraj(Lista, Rez) koji za sortiranje koristi konverziju liste u ureeno binarno stablo i konverziju iz stabla u listu.

    8. Napiite predikat (listovi_s(X, S)) koji pronalazi elemente X binarnog stabla S koji su listovi (nemaju ni desno ni levo podstablo)

    9. Napiite predikat (spoji_s(X, Y, Z)) koji spaja dva binarna stabla X i Y tako da rezultujue binarno stablo Z bude ureeno.

    10. Razmislite i pokuajte da opiete stablo sa proizvoljnim brojem neposrednih potomaka. Kod binarnog stabla postoje dva. Recimo, struktura direktorijuma kod file sistema organizovana je kao neureeno (ne postoji matematika formula po kojoj rasporeujemo elemente u

    17

  • Reprezentacija znanja

    poddirektorijume(podstabla)). Ako vam je jasno kako bi izgledala takva struktura pokuaje da napiete predikate za proveravanje da li je data struktura stablo, proveravanje da li se zadati element nalazi u stablu, dodavanje elementa u odgovarajue podstablo, brisanje elementa i brisanje itavog podstabla.

    Veba 6. Rad sa grafovima

    Zadatak: Zadat je neorijentisan graf. Smestiti relevantne podatke o grafu u bazu znanja PROLOG-a. Napisati predikat koji pronalazi i ispisuje put izmeu dve zadate take u grafu. Modifikovati podatke za sluaj da prelazak iz jedne u drugu taku u grafu ima neku cenu. Za ovakve podatke, promeniti program tako da, uz pronalaenje puta, sraunava i cenu puta izmeu dve take.

    a

    b c

    d

    f

    g

    e

    a

    b c

    d

    f

    g

    e

    4

    1

    2

    21

    1

    24

    Slika 2.5

    Diskusija: Podatke o grafu smestiti u bazu podataka tako da reavanje sledeeg zadatka bude olakano. Za zapisivanje podataka moemo odabrati vie razliitih strategija. Moemo pohraniti podatke o takama, granama ili oba podatka. Poto kasniji zadatak zahteva od nas da pronaemo put izmeu dve take na grafu, mudro je da zapiemo podatke o vezama izmeu taaka. Ova odluka nam olakava i kasniju modifikaciju ubacivanje cena. Podatke, dakle, moemo zapisati ovako:

    veza(a,b).

    to znai da postoji veza izmeu taaka a i b. Sledei problem koji treba razmotriti je injenica da je graf neorijentisan, to znai da ako

    18

  • Reprezentacija znanja

    moemo da doemo od take a do b, onda moemo i od take b do tae a. Ovaj problem moemo reiti tako to emo ubaciti dodatne injenice tipa:

    veza(b,a).

    Meutim elegantnije reenje je da napiemo dodatni predikat koji glasi ovako:

    povezani(X, Y):-veza(X,Y);veza(Y,X). predji1(Cilj, Cilj, Put, Put). predji1(Start, Cilj, Put, Predjeno):-povezani(Start, X), predji1(X, Cilj, Put, [X|Predjeno]).

    Predikat koji poziva predji1 i omoguuje prikazivanje rezultata izgleda ovako:

    put(Start, Cilj, Put):-predji1(Start, Cilj, Put, [Start]).

    Ako probate ovaj program na nekoliko primera, moete utvrditi da program povremeno upada u beskonanu petlju. Ova neugodnost se moe reiti tako to emo, pre rekurzivnog poziva, proveriti da li smo ve proli kroz takukoju smo pronali predikatom povezani. Taj podcilj glasi (predikat element napiite sami):

    not element(X, Predjeno).

    Na ovaj nain moemo da preemo sve puteve izmeu dve zadate take. Meutim, putevi koje pronalazi ovakav program obrnuti su u odnosu na zadate take (take su poreane od ciljne do poetne take). Da bi se dobio put koji nije obrnut, mogue su dva reenja. Jedno podrazumeva ubacivanjepredikata obrni (koji obre zatatu listu) na pogodno mesto, a drugi je elegantnije i pokuajte da ga pronaete. Ovako smo reili prvi deo zadatka.

    Drugi deo zadatka zahteva da proirite podatke o grafu cenama. To je mogue postii ovakvim klauzulama:

    veza(a,b,4).

    Na osnovu ovog primera, modifikujte predikat povezani, i predikate koji trae put izmeu taaka. Vodite rauna o tome da je potrebno zadati i novu promenjljivu ukojoj e biti smetena cena puta izmeu dve take.

    19

  • Reprezentacija znanja

    Veba 5 Diferenciranje matematikih izraza ZADATAK: Napisati predikate u programskom jeziku PROLOG, koji,

    - Nalaze prvi izvod funkcije f(x)

    - Nalaze diferencijal funkcije koja zavisi od jedne ili vie promenljivih po zadatoj promenljivoj.

    DISKUSIJA: Diferenciranje matematikih izraza je problem koji se izuzetno lako reava koricenjem PROLOG-a, najvie zahvaljujuci jakoj podrci simbolikoj obradi.

    Prvi izvodi elementarnih matematikih izraza lako se nalaze koricenjem tabele (to su tzv. tablini izvodi). U PROLOG-u ovakvu tabelu moemo vrlo jednostavno implementirati . Na primer, izvod od sin(g(x)) je g'(x)cos(g(x)). U PROLOGu se ova relacija moe napisati ovako:

    izvod(sin(U), Du*cos(U)):-izvod (U, Du).

    Vidimo da se radi o rekurzivnoj relaciji koja kao prvi argument prima funkciju koju treba diferencirati, a kao drugi argument vraa prvi izvod te funkcije. Kao to moete da primetite, odmah smo primenili kombinaciju tablinog izvoda i formule za nalaenje prvog izvoda sloene funkcie, i tako smo obezbedili da nam predikat automatski radi sa sloenim funkcijama. Takoe, valja primetiti da je klauzula koju smo gore naveli tipian primer leve rekurzije. Zato je potrebno definisati i terminalni uslov. Postoje dva sluaja u kojima se direktno nalazi prvi izvod. To su izvod od promenljive x na prvi stepen, koji je 1, i izvod konstante, koji je 0. Ekvivalenti ovih iskaza u PROLOGu glase:

    izvod(x, 1). izvod(N, 0):-integer(N).

    Da bi mogli da traimo izvode polinoma potrebno je na odgovarajui nain definisati operaciju stepenovanja. Za operator stepenovanja odabiramo simbol ^.

    :-op(200, yfx, ^).

    Izvod stepenovane promenljive tada izgleda ovako :

    izvod(U^N, N*U^N1*Du):-integer(N), not N=0, N1 is N-1, izvod(U, Du).

    20

  • Reprezentacija znanja

    Postoje jo i formule za raunanje izvoda zbira, razlike, proizvoda i kolinika funkcija. Klauzula za izvod zbira izgleda ovako:

    izvod(U+V, Du+Dv):-izvod(U, Du), izvod(V, Dv).

    Sami napiite klauzule koje nedostaju. Obratite panju na izvod funkcije sa negativnim predznakom.

    Sada napiite predikat koji, pored funkcije koju treba diferencirati i promenljive u koju se smeta prvi izvod, prima i promenljivu po kojoj treba diferencirati funkciju. dif(F, Fprim, Prom). Ovaj predikat treba da funkciju vie promenljivih izdiferencira po zadatoj promenljivoj. Isprobajte predikat.

    Sigurno ste primetili da je rezultat rada ovih predikata funkcija koja jeste prvi izvod, ali data u obliku koji nije pogodan za ljudsko koricenje .

    Veba 6. 'Majmun i banana'

    ZADATAK: Napisati program kojim se reava problem 'Majmun i banana'. Majmun treba da u prostoriji pronae nain kako da se doepa banane koja se nalazi okaena na

    U prostoriji postoje stri mesta na kojima nesto moye da se nalazi: vrata, sredina, prozor.

    REENJE:Predikat treba da ima nekoliko logikih celina u okviru istog predikata.

    Prva logika celina su klauzule koje opisuju terminalni uslov za rekurziju. Ove klauzule treba da reaguju na sledee situacije: pojavu atoma u izrazu, pojavu raunske operacije mnoenja nulom i stepenovanja izraza nulom i na pojavu dva broja izmeu kojih stoji operator. Ovi sluajevi predstavljaju kraj jednog ciklusa uprocavanja. Primeri.

    sr(A, A):-atomic(A), !. % Atomska vrednost sr(A*0, 0):-!. sr(A+B, C):-integer(A), integer(B), C is A+B, !.

    Obratite panju na injenicu da matematike operacije koje su komutativne, ne moraju biti komutativne kada uz pomo PROLOGa analizirate izraz.

    Sledea celina su klauzule koje deluju kada naiemo na deo izraza u kome postoji mogunost uproavanja, ali je potrebno i dalje

    21

  • Reprezentacija znanja

    eventualno uproavanje. Neke od ovih situacija su mnoenje jedinicom, sabiranje sa nulom, kao i stepenovanje jedinicom, sabiranje sa nulom, kao i stepenovanje jedinicom.

    sr(A+0, A1):-sr(A, A1). sr(0-A, -A1):-sr(A, A1).

    Trea grupa klauzula je tu da omogui dalju analizu i uproavanje izraza. Ove klauzule deluju na delove izraza izmeu kojih su operatori. Primeri:

    sr(A*B, A1*B1):-sr(A, A1), sr(B, B1). sr(A+B, A1+B1):-sr(A, A1), sr(B, B1).

    Program sastavljen po ovim uputstvima bi trebalo da bude u stanju da uprosti neke specijalne sluajeve izraza. Meutim, posle nekoliko testova, utvrdiete da program ne reaguje na neke prilino oigledne situacije. Ovakvo ponaanje je uslovljeno nainom na koji PROLOG formira stablo pretraivanja. Zato je potrebno ponoviti uproavanje nekoliko puta. Ovu ideju moemo da realizujemo fiksnim brojem poziva predikata sr. Drugi nain je rekurzivno pozivanje predikata sr sve dok ne dobijemo dva puta isti rezultat.

    sredi(X, Y):-sr(X, Y1), X \=Y1, sredi(Y1, Y), !. sredi(X, X):-sr(X, X), !.

    Primetiete da ni ovako napisan program nije u stanju da uprosti sve mogue izraze. Meutim, ovaj program se moe iskoristiti kao osnova za razvijanje komplikovanijih algoritama za uproavanje izraza.

    22

  • Reprezentacija znanja

    2.2. Neuronske mree

    2.2.1. Opti model neuralnih mrea

    Na slici XX prikazana je graa motornog neurona iz prednjeg roga kimene modine. Neuron je osnovna strukturna i funkcionalna jedinica ivanog tkiva. Pod pojmom vetaka neuronska mrea podrazumevamo matematiki, fiziki ili raunarski model strukture i aktivnosti ivanih tkiva, odnosno mozga.

    Neuronske mree koriste se za istraivanje i reprodukovanje ljudskih nervnih aktivnosti kao to su prepoznavanje i obrada govora i slike, motorne aktivnosti, uenje, pamenje itd.

    irok je spektar problema koji se reavaju korienjem neuronskih mrea (na primer, kombinatorna optimizacija, prepoznavanje oblika, asocijativne memorije itd.).

    Slika XXX Graa motornog neurona

    Postoji velik broj klasa neuronskih mrea od kojih svaka ima svoje specifinosti. Pored velike razliitosti postoje i osobine koje su zajednike za sve tipove neuronskih mrea.

    23

  • Reprezentacija znanja

    Svaku neuronsku mreu karakterie osam glavnih parametara:

    1. Skup procesnih elemenata (vorovi).

    2. Stanje aktivacije.

    3. Izlazna funkcija za svaki vor.

    4. Struktura povezanosti izmeu vorova.

    5. Pravilo propagacije signala kroz mreu.

    6. Aktivaciona funkcija.

    7. Algoritam obuavanja.

    8. Okolina u kojoj sistem treba funkcionie.

    Skup procesnih elemenata

    Da bismo formirali model neuronske mree prvi korak je da definiemo skup vorova i ta oni predstavljaju. Postoje dva pristupa. U prvom (jedan vor jedan koncept) vor predstavlja neki objekat kao to je slovo, re ili koncept. U drugom (distribuirani pristup) vor predstavlja samo jedno obeleje nekog objekta a kompletan objekata predstavljen je celinom mree. Distribuirani pristup se ee koristi.

    U neuronskoj mrei nema supervizora koji nadgleda i kontrolie rad celine, postoje samo relativno jednostavni procesni elementi koji obavljaju jednostavne zadatke. Celokupan zadatak vora je da primi signale sa ulaza (teinski izlazi susednih vorova) i da na osnovu njih generiu izlazni signal. Na slici prikazan je model neurona kao procesnog elementa.

    W1j WijUi aktivacija

    U1

    Ij

    Slika Model neurona kao procesnog elementa

    Tipian model neuronskih mrea sadri tri tipa vorova: ulazne, izlazne i skrivene. Funkcije pojedinih vorova odgovaraju njihovom nazivu. Tako ulazni vorovi slue da prime signale iz okoline i distribuiraju ih u unutranjost mree. Skriveni vorovi te signale preuzimaju, procesiraju ih i prenose do izlaznih vorova koji ih konano predaju okolini (izlaz). Skriveni vorovi nemaju vezu s

    24

  • Reprezentacija znanja

    okolinom, sem indirektno preko ulaznih i zlaznih vorova. Procesni elementi bie oznaeni sa ui, i=1, N, N- broj procesnih elemenata mree.

    Stanje aktivacije

    Stanje aktivacije ai(t) predstavlja stanje i-tog procesnog elementa u trenutku t i odgovara stanju jezgra neurona. Stanje vora moe da poprimi vrednost iz definisanog skupa (npr. skup pozitivnih realnih brojeva).

    Izlazna funkcija

    Svakom procesnom elementu u pridruuje se izlazna funkcija koju realizuje akson i koja preslikava stanje aktivacije u trenutku t u izlazni signal . U veini modela neuralnih mrea ta funkcija je f(x)=x. Izlazna funkcija koristi se za modeliranje nekih ogranienja recimo negativne vrednosti da stavi na 0 a vrednosti vee od maksimalne da postavi na maksimum. Takve funkcije zovu se "rampa funkcije" :

    i

    )(toi

    ( ) ( ) ( )= xhxxf gde je:

    prag aktivacije h Hevisajdova funkcija.

    Struktura povezanosti

    vorovi kod svih tipova neuralnih mrea meusobno su povezani brojnim vezama koje odgovaraju sinapsama. Broj i struktura veza jedan su od najznaajnijih elemenata neuralne mree. Topologije raznih neuralnih mrea odreene su ba ovom osobinom. Svaka veza sadri odreenu teinu ( ) koja je nosilac znanja i predstavlja

    jainu veze izmeu vora u i . Kad signal prelazi iz jednog vora u drugi obino se mnoi teinom grane (veze ) i tako utie na stanje aktivacije odredinog vora. Ta teina se moe podeavati tokom vremena. Promena vrednosti teina veza naziva se obuavanje.

    jiw

    j iu

    jiw

    25

  • Reprezentacija znanja

    Obuavanje mora da se obavlja tako da mrea nakon modifikacije daje bolje rezultate od neobuene mree.

    Mogui su razni naini opisa veza. Jedan od naina je da se informacije o vezama organizuju u matricu n x n gde je n ukupan broj vorova. Ako je vrednost teine vea od nula tada se takva veza naziva excitirajua. Takve veze poveavaju nivo aktivacije voru u koji ulaze. U protivnom, ako je vrednost manja od nula tada se veza naziva inhibirajua i smanjuje nivo aktivacije odredinog vora. Postoje neuralne mree (npr. Hopfield-ova) kod kojih je ta matrica simetrina ili je trougaona (najei sluaj).

    Pravilo propagacije signala kroz mreu

    Pravilo propagacije signala kroz mreu predstavlja nain kojim se vri kombinacija izlaznih vrednosti vorova i tako generie ulaz u vor. Kod neurona ga realizuju dendriti. Pravilo propagacije je najee jednostavno

    net w oi jij

    j i= + gde je

    vrednost ulaza u i-ti vor inet

    bias i-tog vora i koristi se kod obuavanja iPostoje i komplikovanija pravila propagacije i ona zavise od tipa i zadatka koji se reava uz pomo neuralne mree.

    Aktivaciona funkcija

    Funkcija aktivacije predstavlja zakon po kojem se menja vrednost stanja aktivacije j-tog vora i ima sledei oblik:

    ( ))),1(()( tnettaFta jjjj = Funkcija perikaryon-a moe da se posmatra kao funkcija aktivacije.

    U optem sluaju to je funkcija koja zavisi od prethodnog stanja aktivacije kao i od trenutnog ulaza u vor. Funkcija je najee deterministika iako moe da bude i stohastika. Tri najea tipa aktivacionih funkcija su:

    26

  • Reprezentacija znanja

    step_funkcija

    ( )h x A b A b xA b x

    , , ,,,

    =+

    +

  • Reprezentacija znanja

    2.2.2. Klasifikacija neuronskih mrea

    Klasifikacija neuralnih mrea vri se u odnosu na sledee tri vane karakteristike ili osobine mrea.

    1. Topoloke karakteristike.

    2. Nain reprezentacije znanja.

    3. Nain obuavanja.

    Klasifikacija u odnosu na topoloke karakteristike

    Razne arhitekture (topologije) neuralnih mrea nastaju organizacijom vorova u slojeve (polja) i povezivanjem vorova unutar polja kao i vorova izmeu polja na razne naine. Karakterizacija topologija vri se u odnosu na tri parametra:

    vrste veza eme veza konfiguracija polja

    Veze mogu biti excitirajue (poveavaju nivo aktivacije) ili inhibitirajue (smanjuju nivo aktivacije). Postoje dve osnovne eme veza: veze unutar polja i veze izmeu polja. Takoe, postoje i dve vrste toka informacija: feedforward (tok signala samo u jednom smeru) i feedback (dozvoljen tok signala u oba smera).

    Konfiguracije polja formiraju koherentnu arhitekturu kombinovanjem slojeva procesnih elemenata, toka informacija i ema povezivanja.

    Klasifikacija u odnosu na nain reprezentacije znanja Neuralne mree mogu se posmatrati kao memorije sa znanjem distribuiranim u vezama (sinapsama). Kao memorije neuralne mree mogu uvati dve vrste uzoraka: prostorne (vremenski nepromenljive ) i prostorno-vremenske uzorke (vremenski nestacionarni).

    Neuralne mree mogu se posmatrati i kao asocijativne memorije. Sutina je u nainu adresiranja kojim se jednoj adresi (kljuu) asocira skup memorisanih objekata sa zadanim nivoom tanosti. Situacija u kojoj se koristi asocijativna memorija je kad znamo samo deo kljua, a potreban nam je ceo objekt.

    28

  • Reprezentacija znanja

    Postoje dva osnovna principa smjetanja informacija u neuralnoj mrei kao asocijativnoj memoriji: autoasocijativni i heteroasocijativni.

    Klasifikacija u odnosu na nain obuavanja Obuavanje je proces promene vrednosti veza izmeu procesnih elemenata. Ta promena veza mora biti u odnosu na zadati cilj. Sve metode generalno mogu se podeliti u dve osnovne grupe: obuavanje sa ili bez uitelja (samo obuavanje).

    Kod obuavanja sa uiteljem cilj koji treba da se zadovolji je minimizacija greke kad poznajemo nain na koji su ulazni i izlazni podaci klasifikovani. Obuavanje sa uiteljem moemo podeliti u dve kategorije: strukturalno obuavanje (kodiraju se parovi uzoraka ( Ai , Bi ) ) i temporalno obuavanje kojim se kodira sekvenca uzoraka koja je potrebna da se dostigne. Primeri obuavanja sa uiteljem su: obuavanje sa korekcijom greke , obuavanje sa meusobnim pojaanjem, stohastiko obuavanje itd.

    Samo obuavanje predstavlja proces obuavanja kod kojeg nema spoljanjeg uitelja i koji zavisi samo od informacije sadrane u uzorcima koji dolaze na mreu.

    2.2.3. Algoritmi za obuavanje neuronskih mrea

    Jedan od najveih problema koji se javlja kod modeliranja neuronskih mrea je pronalaenje efikasnog sistema (postupka) za obuavanje. Trenutno ne postoji generalno reenje koje bi na zadovoljavajui nain bilo primenljivo u svim situacijama. U nastavku e biti opisana dva postupka: pseudo-kompetitivno obuavanje i obuavanje generalisanim delta pravilom.

    Prvi postupak jedan je od najjednostavnijih algoritama za obuavanje i ovde je opisan da bi se na ilustrativnom a jednostavnom primeru prikazale mogunosti a i problemi na koje treba obratiti panju.

    Generalisano delta pravilo jedan je od najpoznatijih i najee korienih algoritama za obuavanje neuronskih mrea.

    29

  • Reprezentacija znanja

    Pseudo kompetitivno obuavanje Neuronske mree koje su pogodne za obuavanje ovim nainom su dvoslojne neuronske mree i semi-linearnom aktivacionom funkcijom u neuronima izlaznog sloja (Slika ).

    U1

    U2

    U3

    I1

    I2

    I3

    I4

    I5

    W11

    W35

    Ulazni slojKompetitivni sloj

    IZLAZ

    ULA

    Z

    Slika Dvoslojna feedforward neuronska mrea

    Algoritmom se vri modifikacija teinskih faktora veza izmeu ulaznih i izlaznih neurona. U izlaznom (kompetitivnom) sloju samo jedan neuron moe da bude aktivan dok su ostali neuroni neaktivni (nepobueni), odnosno za odreenu kombinaciju pobuenih neurona na ulazu pobuen je samo jedan neuron na izlazu. Ovim se dobija vrlo jednostavan a efikasan klasifikator.

    Algoritam: Ako je obuavajui skup oblika: }..1),{( mjizlazulaz jj == gde je:

    ),...( 1 ni aaulaz = , }1,0{ia

    )..,( 21 mj oooizlaz =

    ==

    jiji

    oi ;1;0

    m - broj uzoraka obuavajueg skupa i broj neurona u izlaznom sloju

    n - broj neurona u ulaznom sloju neuronske mree

    30

  • Reprezentacija znanja

    Tada se vrednost teina veza izmeu ulaznih neurona i pobuenog izlaznog neurona rauna na sledei nain:

    ==

    =0;1

    1;1

    ,j

    ij

    jij

    jia

    KAZNA

    aNAGRADAW

    gde je

    =

    =n

    i

    ji

    j aNAGRADA1

    =

    =n

    i

    ji

    j aKAZNA1

    )1(

    Primer 1. Simulirati sistem prikazan slikom

    x1x2x3x4

    y1y2y3y4

    Slika

    Ponaanje sistema opisano je sledeom tabelom:

    Ulaz Izlaz

    x1 x2 x3 x4 y1 y2 y3 y4 1 0 1 0 1 0 0 0 1 1 1 1 0 1 0 0 0 0 0 1 0 0 1 0 1 1 0 0 0 0 0 1

    Reenje: Neuronska mrea treba da ima 4 ulaza i 4 izlaza. Za prvi uzorak iz obuavajueg skupa neuronska mrea prikazana je na slici

    31

  • Reprezentacija znanja

    1

    2

    3

    4

    1

    2

    3

    4

    W1,1W 2,1

    W 3,1

    W 4,1

    1 1

    0

    1

    0

    Slika

    gde je 5.01,1 =W , 5.01,2 =W , 5.01,3 =W , 5.01,4 =W

    Primer 2. Sistem za dijagnostiku deijih bolesti Dizajnirati i implementirati ekspertni sistem za dijagnostiku deijih bolesti. Sistem treba da obezbedi postavljanje dijagnoze na osnovu uoenih simptoma. Ekspert (lekar) treba unapred da opie poznate bolesti preko odreenog broja simptoma.

    Mal

    e bo

    ginj

    e

    Rub

    eole

    Zau

    ke

    Grip

    Ov

    ije b

    ogin

    je

    Velik

    i ka

    alj

    Jaka

    pre

    hlad

    a

    Men

    ingi

    tis

    Groznica Da Da Da Da Osip Da Da Da Da Glavobolja Da Da Curenje nosa Da Da Da Da Da Konjuktivitis Da Da Kaalj Da Da Da Da Jak bol u telu Da Osetljivost na svetlost Da Bol u grlu Da Da Da Kijavica Da Da Da Otekle pljuvane lezde Da Krvave oi Da Ukrueni zglobovi Da Poveane limfne lezde iza uha Da Otpor na sisanje kiselog Da

    32

  • Reprezentacija znanja

    Nenormalna pljuvaka Da Otekli krajnici Da Suva usta Da Slabost u telu Da Trovanje Da Da Dijareja Da Svrab Da Gubitak apetita Da

    U tabeli pregledno je dat opis bolesti preko simptoma matricom u kojoj na preseku kolone (bolest) i vrste (simptomi) pie da ako je simptom prisutan u bolesti odnosno nita ako se simptom ne pojavljuje u posmatranoj bolesti.

    Reenje Na ulaz neuronske mree dovode se informacije o simptomima a na izlazu svaki neuron odgovara jednoj bolesti. Za obuavanje koristi se obuavajui skup definisan u tabeli.

    Na REFERENCA_NA_SAJT je dato reenje u programskom jeziku....

    Primer 3. Sistem za prepoznavanje slova Implementirati sistem za prepoznavanje slova na osnovu slike 5x7 pixela.

    33

  • Reprezentacija znanja

    Reenje Neuronska mrea treba da ima 35 ulaza, svaki ulaz odgovara jednom pixelu matrice 5x7, vrednost 1 predstavlja crnu boju dok 0 belu. Izlazni sloj neuronske mree treba da ima onoliko neurona koliko ima slova. Svakom neuronu tog sloja se pridruuje jedno slovo tako da u toku eksploatacije neuron koji je najjae pobuen u stvari predstavlja prepoznato slovo.

    U nastavku su izdvojeni delovi karakteristini za reenje a kompletno reenje nalazi se u REFERENCA_NA_SAJT

    void PseudoKompetitivno::obucavanje() { int i = 0; for(int i=0; i

  • Reprezentacija znanja

    UKLJUITI C++

    Na slian nain mogue je i u programskom jeziku Java imple-mentirati prethodno opisan algoritam. Neuronska mrea u ovom primeru treba da obezbedi prepoznavanje slova opisanih sliicom 5x7 pixela.

    Slika Sistem za prepoznavanje slova

    Na slici su prikazana tri sluaja u kojima je dobro prepoznato orginalno slovo. Aplikacija sadri pet elemenata: 1. originalno slovo, 2 zamueno slovo, 3 propoznato slovo, 4 kliza za definisanje stepena zamuenja i 5 dugme za izbor novog slova.

    Slika Elementi aplikacije za prepoznavanje slova

    Generalisano delta pravilo

    Algoritam generalisano delta pravilo poznato je i kao back-propagation algoritam.

    Vieslojne neuronske mree sa sigmoidnim aktivacionim funkcija pogodne su za obuavanje ovim algoritmom. Za razliku od prethodnog algoritma na izlazu moe vie neurona da bude pobueno. Zbog ove osobine back-propagation je mogue koristiti u

    35

  • Reprezentacija znanja

    reavanju veeg skupa problema. Nedostatak ovog algoritma je u tome to aktivaciona funcija mora da bude diferencijabilna, a prilikom obuavanja dobijeno stanje ne mora i da bude najbolje.

    Back-propagation algoritam

    iteracijauzorak

    Postavi ulaz za uzorak Izraunaj izlaz Izraunaj uticaj greke uslojevima Koriguj teine

    Slika 2.

    Algoritam: Na slici 2. dat je strukturni dijagram algoritma. etri operacije se ponavljaju u svakoj iteraciji i za svaki uzorak. Operacije su redom: postavljanje ulaza, izraunavanje izlaza, izraunavanje greke i korekcija teina.

    Izraunavanje izlaza obavlja se po formulama:

    ii

    jij aWnet = , , gde je sUj 1 sUi(j netf

    ,U je skup indexa neurona u

    s-tom sloju, je izlaz iz i-tog neurona, W je vrednost teine veze izmeu j tog i i tog neurona. a

    s

    )jia ji ,

    = Izraunavanje uticaja greke u j-tom neuronu na kriterijumsku funkciju:

    ( )

    =uzorci Uj

    jjn

    atE 221

    za neurone u izlaznom sloju:

    )()(' jjjj atnetf = , gde je eljeni izlaz, je stvarni izlaz jt ja

    36

  • Reprezentacija znanja

    za neurone u skrivenim slojevima:

    +

    =1

    ,)('sUi

    jijii Wnetf Uticaj greke rauna se od izlaznog sloja prema ulaznom sloju.

    Korekcija teina rauna se od ulaznog prema izlaznom sloju po sledeoj formuli:

    jiqp

    ip

    jjip WaW ,)()(

    , += gde su p i q indexi uzoraka, brzina obuavanja, je uticaj greke u j-tom neuronu, )( pj uticaj prethodnih promjena, prethodna promjena. jiqW ,pragovi aktivacija (bias) rauna se po formuli

    upp

    jup += )( jipjiji WWW ,,, += i upuu +=

    Primer 1: XOR funkcija program bp; { Generalisano delta pravilo. Primer obucavanja viseslojne neuralne mreze algoritmom backpropagation. Primenjen algoritam je detaljno opisan u knjizi D.Nauck, F. Klawonn, R. Kruse Foundations of neuro-fuzzy systems John Wiley & sons 1997. godine Autori programa: Damir Solajic & Djordje Obradovic} const slojeviN = 3; { Ukupan broj slojeva.} MAXN = 2; { Maximalan broj neurona po slojevima.} { Konstante potrebne za obucavanje. } uzorciN = 4; { Ukupan broj uzoraka.} MAXITERACIJA = 10000; { Maximalan broj iteracija za obucavanje} MAXGRESKA = 0.001; { Zadata vrednost maximalne greske.} ni = 0.05; {Parametri obucavanja.} beta = 0.9; BROJPOKUSAJA = 5;

    type

    37

  • Reprezentacija znanja {Tip u kojem se opisuje jedan sloj} TSloj = record n:inte {Stvaran broj neurona u sloju.} ger; izlaz:array[1..MAXN] of real; sigma array[1..MAXN] of real; { Greska u posmatranom cvoru} : bias:array[1..MAXN] of real; { Prag aktivacije} biasp:array[1..MAXN] of real; { Promena praga aktivacije} end; TW = array[1..MAXN, 1..MAXN] of real; { Matrica za opis tezina.} TSlojevi = array[1..slojeviN] of TSloj; { Niz slojeva.} TWi = array[1..(slojeviN-1)] of TW; {Niz matrica tezina} var slojevi:TSlojevi; { Svi slojevi u mrezi.} tezine:TWi; { Sve matrice tezina.} tezineP:TWi; { Matrice promena odgovarajucih tezina} { ulaz=1 izlaz =2} obucavajuciSkup:array[1..uzorciN, 1..2, 1..MAXN] of real; { Obucavajuci skup: prvi index UZORAK, drugi index je jedan ako se posmatra ulaz a dva ako se posmatra izlaz, treci index redni broj neurona } { Procedura sluzi za inicijalizaciju neuronske mreze i obucavajuceg skupa} procedure Inicijalizacija; begin {Inicijalizacija mreze. Odredjivanje stvarnog broja neurona po sloju.} slojevi[1].n := 2; slojevi[2].n := 2; slojevi[3].n := 1; {Inicijalizacija obucavajuceg skupa za XOR problem} obucavajuciSkup[1,1,1] := 0; obucavajuciSkup[1,1,2] := 0; { uzorak 1} obucavajuciSkup[1,2,1] := 0; obucavajuciSkup[2,1,1] := 0; obucavajuciSkup[2,1,2] := 1; { uzorak 2} obucavajuciSkup[2,2,1] := 1; obucavajuciSkup[3,1,1] := 1; obucavajuciSkup[3,1,2] := 0; { uzorak 3} obucavajuciSkup[3,2,1] := 1; obucavajuciSkup[4,1,1] := 1; obucavajuciSkup[4,1,2] := 1; { uzorak 4} obuend;

    cavajuciSkup[4,2,1] := 0;

    38

  • Reprezentacija znanja { Procedura sluzi za inicijalizaciju matrice tezina i pragova aktivacije.} procedure InicijalizacijaTezina; var s, u, v:integer; begin {Inicijalizacija matrice tezina po preporuci W je element [-0.1, 0.1]} randomize; for s:=1 to slojeviN-1 do begin for u:=1 to slojevi[s].n do for v:=1 to slojevi[s+1].n do tezine[s][u,v] := (random-0.5)/5; end; {Inicijalizacija pragova aktivacije. [0,1]} for :=2 to lojeviN do s s for u:=1 to slojevi[s].n do end;

    slojevi[s].bias[u] := random;

    { Sigmoidna funkcija aktivacije.} function sigmoid(net:real):real; begin sigmoid := 1/(1+exp(-net)); end; { Procedura na osnovu postavljenog ulaza izracunava vrednost izlaza.} procedure izracunajIzlaz; var s, u, v:integer; net:begin

    real;

    for :=2 to lojeviN do s s for =1 to slojevi[s].n do v: begin net := slojevi[s].bias[v]; for u:= 1 to slojevi[s-1].n do net := net+slojevi[s-1].izlaz[u]*tezine[s-1][u, v]; slojevi[s].izlaz[v] := sigmoid(net); end; end; { Procedura na ulaz postavlja vrednost uzorka indeksiranog parametrom uzorak} procedure postaviUlaz(uzorak:integer); var u:inbegin

    teger;

    for u:=1 to slojevi[1].n do send;

    lojevi[1].izlaz[u] := obucavajuciSkup[uzorak, 1, u];

    { Funkcija izracunava vrednost gresaka u svim slojevima pocevsi od poslednjeg, prema prvom. Greska u poslednjem cvoru racuna

    39

  • Reprezentacija znanja se u odnosu na uzorak indeksiran parametrom uzorak. Ukupna greska uzorka racuna se kao suma kvadrata gresaka na svim izlazima.} function izracunajGreske(uzorak:integer):real; var s,u,v:integer; sigmaa:real; f:real; greska:real; begin {Greska u poslednjem sloju} greska:= 0; for v:=1 to slojevi[slojeviN].n do begin slojevi[slojeviN].sigma[v] := obucavajuciSkup[uzorak, 2, v] - slojevi[slojeviN].izlaz[v]; gre end;

    ska := greska+sqr(slojevi[slojeviN].sigma[v]);

    {Greska u svim ostalim slojevima} for :=sloj iN-1 downto 1 do s ev

    for =1 to slojevi[s].n do u: begin sigmaa := 0; for v:=1 to slojevi[s+1].n do sigmaa := sigmaa + slojevi[s+1].sigma[v]*tezine[s][u,v]; f := slojevi[s].izlaz[u]; slojevi[s].sigma[u] := f*(1-f)*sigmaa; {ovo vazi samo za sigmoidnu aktivaciju} end; izrend;

    acunajGreske := greska;

    { Procedura na osnovu postavljenih vrednosi gresaka u slojevima koriguje matrice tezina i pragove aktivacije.} procedure korigujTezine; var s, u, v:integer; net:begin

    real;

    for s:=1 to slojeviN-1 do for v:=1 to slojevi[s+1].n do begin for u:=1 to slojevi[s].n do begin tezineP[s][u,v] := ni*slojevi[s+1].sigma[v]*slojevi[s].izlaz[u]+beta*tezineP[s][u,v]; tezine[s][u,v] := tezine[s][u,v] + tezineP[s][u,v]; end; {Korekcija pragova aktivacije} slojevi[s+1].biasp[v] := ni*slojevi[s+1].sigma[v] + beta* slojevi[s+1].biasp[v]; slojevi[s+1].bias[v] := slojevi[s+1].bias[v] + slojevi[s+1].biasp[v]; {Izracunavanje korigovane vrednosti izlaza u sloju.} net := slojevi[s+1].bias[v];

    40

  • Reprezentacija znanja for u:=1 to slojevi[s].n do net := net+slojevi[s].izlaz[u]*tezine[s][u,v]; slojevi[s+1].izlaz[v] := sigmoid(net);

    end; end; { Funkcija kao povratnu vrednost vraca ukupnu gresku u poslednjoj iteraciji.} function obucavanje:real; var iteracija, uzorak, i, j:integer; greska:real; begin iteracija := 1; repeat greska := 0; for uzorak:=1 to uzorciN do begin postaviUlaz(uzorak); izracunajIzlaz; greska := greska + 0.5*izracunajGreske(uzorak); korigujTezine; end;{uzorak} Inc(iteracija); until (iteracija>=MAXITERACIJA) or (greskaBROJPOKUSAJA) or (greska

  • Reprezentacija znanja

    Zadaci za vebu

    1. Dizajnirati i implementirati ekspertni sistem za dijagnosticiranje kvara na automobilu na osnovu dvoslojne neuralne mree i kompetitivnog algoritma za obuavanje. Sistem treba da obezbedi postavljanje dijagnoze na osnovu uoenih simptoma kvara. Postaviti tabelu sa 10 simptoma i kvarova, omoguiti jednostavno dodavanje novih simptoma i kvarova, jednostavan i pristupaan korisniki interfejs i uvanje rezultata rada.

    2. Pomou neuralne mree simulirati rad sistema ije je ponaanje opisano sledeim formulama: y1=x1+x2+x3, y2=x4+x5+x6. x1 ,x2, x3, x4, x5 i x6 su ulazi u sistem, a y1 i y2 su izlazi iz sistema. Koristiti troslojnu feed-forward neuralnu mreu i back-propagation algoritam obuavanja. 3. Dizajnirati i implementirati ekspertni sistem za dijagnosticiranje kvara na automobilu na osnovu troslojne feed-forward neuralne mree i back-propagation algoritma za obuavanje. Sistem treba da obezbedi postavljanje dijagnoze na osnovu uoenih simptoma kvara. Izlaze kodirati NBCD kodom. Postaviti tabelu sa 10 simptoma i kvarova, omoguiti jednostavno dodavanje novih simptoma i kvarova, jednostavan i pristupaan korisniki interfejs i uvanje rezultata rada.

    4. Pomou neuralne mree simulirati rad sistema koji predstavlja konvertor iz NBCD u Grejov kod. Ulaz je cifra kodirana NBCD kodom, a izlaz ista cifra kodirana Grejovim kodom. Koristiti troslojnu feed-forward neuralnu mreu i back-propagation algoritam obuavanja.

    5. Dizajnirati i implementirati ekspertni sistem za dijagnostiku deijih bolesti na osnovu troslojne feed-forward neuralne mree i back-propagation algoritma za obuavanje. Sistem treba da obezbedi postavljanje dijagnoze na osnovu uoenih simptoma bolesti. Postaviti tabelu sa 10 simptoma i bolesti, omoguiti jednostavno dodavanje novih simptoma i bolesti, jednostavan i pristupaan korisniki interfejs i uvanje rezultata rada.

    6. Dizajnirati i implementirati ekspertni sistem za dijagnostiku deijih bolesti na osnovu troslojne feed-forward neuralne mree i back-propagation algoritma za obuavanje. Sistem treba da obezbedi postavljanje dijagnoze na osnovu uoenih simptoma bolesti. Izlaze kodirati NBCD kodom. Postaviti tabelu sa 10 simptoma i bolesti, omoguciti jednostavno dodavanje novih simptoma i bolesti,

    42

  • Reprezentacija znanja

    jednostavan i pristupaan korisnicki interfejs i uvanje rezultata rada.

    7. Dizajnirati i implementirati sistem za prepoznavanje slova na osnovu dvoslojne neuralne mree i kompetitivnog algoritma za obuavanje. Ulaz u sistem predstavljaju slova srpske abecede (latinica) predstavljena matricom 5x7. Izlaz iz sistema je verovatnoa da je dato slovo na ulazu. Posle obuavanja, tano slovo na ulazu zamutiti za eljeni procenat. Dizajnirati pristupaan korisniki interfejs koji e omoguiti jednostavno zadavanje ulaznog slova, koeficijenta zamuenja i prikazati tano ulazno, zamueno ulazno i prepoznato izlazno slovo. Ulazne podatke uitavati iz odgovarajue datoteke.

    8. Dizajnirati i implementirati sistem za prepoznavanje slova na osnovu dvoslojne neuralne mree i kompetitivnog algoritma za obuavanje. Ulaz u sistem predstavljaju slova srpske azbuke (irilica) predstavljena matricom 5x7. Izlaz iz sistema je verovatnoca da je dato slovo na ulazu. Posle obuavanja, tano slovo na ulazu zamutiti za eljeni procenat. Dizajnirati pristupaan korisniki interfejs koji e omoguiti jednostavno zadavanje ulaznog slova, koeficijenta zamuenja i prikazati tano ulazno, zamueno ulazno i prepoznato izlazno slovo. Ulazne podatke uitavati iz odgovarajuce datoteke.

    9. Dizajnirati i implementirati sistem za prepoznavanje slova na osnovu troslojne feed-forward neuralne mree i back-propagation algoritma za obuavanje. Ulaz u sistem predstavljaju slova srpske abecede (latinica) predstavljena matricom 5x7. Izlaz iz sistema je verovatnoa da je dato slovo na ulazu. Posle obuavanja, tano slovo na ulazu zamutiti za eljeni procenat. Dizajnirati pristupaan korisniki interfejs koji e omoguiti jednostavno zadavanje ulaznog slova, koeficijenta zamuenja i prikazati tano ulazno, zamueno ulazno i prepoznato izlazno slovo. Ulazne podatke uitavati iz odgovarajue datoteke.

    10. Dizajnirati i implementirati sistem za prepoznavanje slova na osnovu troslojne feed-forward neuralne mree i back-propagation algoritma za obuavanje. Ulaz u sistem predstavljaju slova srpske azbuke (irilica) predstavljena matricom 5x7. Izlaz iz sistema je verovatnoca da je dato slovo na ulazu. Posle obuavanja, tano slovo na ulazu zamutiti za eljeni procenat. Dizajnirati pristupaan korisniki interfejs koji e omoguiti jednostavno zadavanje ulaznog slova, koeficijenta zamuenja i prikazati tano ulazno, zamueno

    43

  • Reprezentacija znanja

    ulazno i prepoznato izlazno slovo. Ulazne podatke uitavati iz odgovarajue datoteke.

    1. Dizajnirati i implementirati sistem za prepoznavanje slova na osnovu troslojne feed-forward neuralne mree i back-propagation algoritma za obuavanje. Ulaz u sistem predstavljaju slova srpske abecede (latinica) predstavljena matricom 5x7. Izlaz iz sistema je verovatnoa da je dato slovo na ulazu. Slova na izlazu kodirati NBCD kodom. Posle obuavanja, tano slovo na ulazu zamutiti za eljeni procenat. Dizajnirati pristupaan korisniki interfejs koji e omoguiti jednostavno zadavanje ulaznog slova, koeficijenta zamuenja i prikazati tano ulazno, zamueno ulazno i prepoznato izlazno slovo. Ulazne podatke uitavati iz odgovarajue datoteke.

    44

  • Reprezentacija znanja

    2.3. Fuzzy logika Fuzzy logika kao koncept je puno prirodniji nego to se to na prvi momenat misli. Naime, postoje situacije u kojima nije mogue znanje o sistemu reprezentovati na apsolutno precizan nain. ak je vie situacija u kojima moramo da koristimo neprecizne konstatacije. Na primer, Marko je visok ovek., Onaj automobil se pribliava jako velikom brzinom. su neprecizne reenice a ipak ih svakodnevno koristimo.

    Da bismo bili u stanju reprezentovati znanje o ovakvim sistemima (a ima ih jako puno) moramo da se odreknemo klasine (binarne) logike u kojoj je neto ili tano ili netano (crno ili belo) i da koristimo fuzzy logiku (sve je nijansa sive boje).

    Neki e rei ako nepreciznim iskazima reprezentujemo znanje, kako moemo da oekujemo korektno izvoenje zakljuaka. U ovom poglavlju pokuaemo da na jednom primeru pokaemo da je to mogue, ak i jednostavnije nego da koristimo klasine metode.

    2.3.1. Fuzzy skupovi

    Fuzzy skupovi su osnovni elementi kojima opisujemo nepreciznost. Naime, diskretan skup (klasian) sadri elemente sa istim svojstvima (skup jabuka, skup kruaka, skup celih brojeva itd.) dok fuzzy skupovi sadre elemente sa slinim svojstvima (skup visokih ljudi, skup niskih ljudi, skup brzih automobila itd.).

    U diskretnim skupovima element ili pripada ili ne pripada odreenom skupu, ako to predstavimo matematiki kaemo da je stepen pripadnosti skupu 1 (ako pripada) ili 0 (ako ne pripada). Sa druge strane elementi u fuzzy skupovima mogu delimino da pripadaju, matematiki to moemo da predstavimo na sledei nain 1 (100% pripada), 0 (uopte ne pripada skupu), 0.7 (70% pripada skupu). Ovim pristupom moemo preciznije da reprezentujemo neprecizne iskaze.

    Na primer, ako kaemo da su ljudi vilji od 185 cm visoki, kako da opiemo oveka visokog 184.5 cm? Da li on pripada skupu visokih ili niskih ljudi? Iz iskustva bismo ovakvog oveka svrstali u grupu visokih ljudi, meutim kako da to predstavimo na sistematian nain (kako bi ono to mi radimo iskustveno radio i raunar)? Jednostavno

    45

  • Reprezentacija znanja

    kazaemo da ovek visok 184.5 pripada skupu visokih ljudi sa stepenom 0.95.

    Na ovaj nain uvodimo nov koncept a to je funkcija pripadnosti. Tako na primer skupu visokih ljudi pridruena je funkcija pripadnosti koja opisuje stepen pripadnosti svakog elmenta tom skupu.

    Na slici prikazana je funkcija pripadnosti skupu visokih ljudi.

    130 cm 185 cm

    Stepen pripadnosti

    Visina

    100%

    0%

    Slika

    Osnovne osobine fazi skupa su:

    normalnost Maksimalna vrednost funkcije pripadnosti je 1.

    konveksnost

    a) konveksan b) nekonveksan

    broj elemenata Broj elemenata skupa rauna sa kao zbir vrednosti funkcije pripadnosti svakog elementa.

    Kao i kod diskretnih skupova i ovde se definiu osnovne operacije (unija, presek, negacija i komplement).

    46

  • Reprezentacija znanja

    2.3.2. Reprezentacija znanja primenom fuzzy skupova

    Znanje u predikatskoj (diskretnoj) logici sadrano je u relacijama izmeu objekata (skup injenica i pravila). Na isti nain se znanje reprezentuje u fuzzy logici ali pomou fuzzy relacija.

    Na primer ako imamo dva skupa A={1, 3, 4} i B={3, 1, 5} tada se u diskretnoj logici relacija vei ili jednak definie na sledei nain.

    1 3 4 3 1 1 0

    1 1 0 0

    5 1 1 1

    Ovde je stepen sigurnosti (stepen pripadnosti) uvek ili 0 ili 1.

    Kod fuzzy relacija ovo izgleda malo drugaije. Na primer imamo skup A={marko, nikola, steva} tada relacija dobar_drug moe da bude definisana na sledei nain:

    dobar_drug marko nikola steva

    marko 0.5 0.8 0.2

    nikola 0.8 0.5 0.3

    steva 0.2 0.3 0.5

    Ovde je stepen sigurnosti izmeu 0 i 1.

    Kao i u diskretnim logikama i ovde je mogua kompozicija relacija.

    2.3.3. Zakljuivanje u fuzzy logici

    Ovo verovatno treba prebaciti kod tehnika rasuivanja.

    47

  • Reprezentacija znanja

    2.3.4. Reavanje problema primenom fuzzy logike

    U ovom poglavlju opisan je jedan primer primene fuzzy logike u reavanju problema automatskog upravljanja realnim sistemom.

    Primer 1. Projektovati sistem za upravljanje koenjem automobila koji na osnovu brzine automobila i rastojanju do susednog vozila odreuje potrebno koenje kako bi se izbegao sudar.

    Prvi korak u reavanju problema je podela skupa moguih vrednosti stanja u nekoliko kategorija.

    Na primer brzinu automobila (0 do 200 km/h) delimo u dve kategorije ili dva skupa mala_brzina i velika_brzina i rastojanje do susednog vozila (0.5m do 200m) delimo u veliko i malo rastojanje.

    Ovim su definisane ulazne fuzzy veliine.

    Drugi korak je podela skupa moguih akcija u nekoliko skupova ili kategorija.

    Silu koenja (0 do 1000 N) delimo u tri fuzzy skupa: slabo, srednje i veliko koenje.

    Ovim se definiu izlazne fuzzy veliine.

    Na osnovu iskustva napisati fuzzy pravila ili fuzzy relacije na osnovu kojih e se izvoditi zakljuak.

    Fuzzy pravila bi u ovom sluaju mogla da izgledaju ovako:

    Ako je mala_brzina i veliko_rastojanje koenje treba da bude slabo. Ako je velika_brzina i malo_rastojanje koristiti veliko koenje.

    Na kraju definisati funkcije pripadnosti koje opisuju fuzzy skupove (posebno za svaku od veliine).

    Primer 2.

    Izvriti dizajn i implementaciju sistema za upravljanje poloajem inverznog klatna. Mehaniki model problema prikazan je na slici 1, a matematiki model dat je sistemom diferencijalnih jednaina u prostoru stanja:

    48

  • Reprezentacija znanja

    u

    MmlmMIml

    MmlmMImlI

    xx

    MmlmMImMmgl

    MmlmMImlb

    MmlmMIglm

    MmlmMI)bmlI

    xx

    ++

    +++

    +

    +++

    ++

    +++++

    =

    2

    2

    2

    22

    2

    22

    2

    2

    )(

    0)(

    0

    0)(

    )()(

    01000

    0)()(

    (0

    0010

    &

    &

    &&&&&&

    Slika 1 a

    u

    xx

    y

    +

    =00

    10000100

    &

    &

    Slika 1 b

    Na slici 2 prikazana je slika realnog sistema kojim se upravlja kao i osnovne veliine koje ga opisuju.

    5.0=M masa vozila kg2.0=m masa tapa kg1.0=b

    smN/

    koeficient trenja vozila

    006.0=I koeficient inercije tapa 2mkg 3.0=l duina tapa m

    F upravljaka sila x pozicija vozila ugao izmeu tapa i

    vertikale

    Slika 2

    Ulazi u fazi kontroler su ugao i ugaona brzina klatna. Izlaz iz fazi kontrolera je upravljaka sila. Na slici 3. prikazan je ematski prikaz upravljakog modela.

    Sistem je podeljen na dve celine. Prva celina predstavlja objekat upravljanja (inverzno klatno), opisan matematikim modelom. Druga

    49

  • Reprezentacija znanja

    celina je fazi kontroler koji treba da obezbedi eljenu vrednost upravljane veliine. Fazi upravljanje se sastoji od tri etape. Prva je fazifikacija ulaznih veliina. Nakon fazifikacije sledi zakljuivanje na osnovu fazi pravila. Na kraju se vrednost upravljake sile odreuje u modulu za defazifikaciju.

    FazifikacijaFM

    FazifikacijaFM

    ZakljuivanjeDefazifikacijauFM

    Fazi kontroler

    FuF

    u

    Matematiki model

    x = Ax + Bu.

    .

    F..

    Slika 3

    Na slici 4. prikazan je izgled modula za fazifikaciju ulaznih veliina. Fazifikacija je proces odreivanja stepena pripadnosti elementima fazi skupa. Funkcije pripadnosti fazi skupovima su trougaone funkcije opisane sa tri veliine.

    Fazifikacija

    N Z P

    pripadnost[Z,1] pripadnost[Z,2] pripadnost[Z,3]

    Zakljuivanje

    N

    ZP

    Z

    Z

    P

    P

    N N

    P

    P

    Z

    ZN

    N F

    F.

    Defazifikacija

    N Z P

    Izlaz Slika 4 Slika 5 Slika 6

    U procesu zakljuivanja prikazanom na slici 5. na osnovu fazi skupova koji opisuju ulazne veliine i fazi pravila odreuje fazi skup

    koji predstavlja upravljaku veliinu. , gde je

    , a i,j su indeksi matrice pravila gde je element jednak k. U ovom primeru za defazifikaciju (slika 6) izabran je metod teita

    , a centar k-tog elementa fazi skupa.

    ][][][ ,

    jikuF

    ji

    FF &= },,{ PZNk },,{ PZNk ]2,[ku FM

    50

  • Reprezentacija znanja

    U nastavku je dato reenja na programskom jeziku Pascal. Potrebno je proiriti fazi skupove tako da se u svakom od njih umesto tri nalazi pet vrednosti (dodati negativno jako i pozitivno jako) i za tako definisane skupove napisati nova pravila. Potrebno je iscrtati kretanje klatna i grafik promene poloaja, ugaone brzine i upravljake sile u vremenu. PROGRAM fazi_logika; { Program za upravljanje polozajem inverznog klatna primenom fazi logike. Datum: 21. mart 2000. Autori: Djordje Obradovic E5427 Damir Solajic E5882 } USES Crt;CONST

    MV = 0.5; { Masa vozila } mK = 0.2; { Masa stapa } b = 0.1; { Koeficijent trenja vozila } I = 0.006; { Koeficijent inercije stapa } l = 0.3; { Duzina stapa } g = 9.81; { Gravitaciono ubrzanje } dt = 0.001; { Vremenski prirastaj } N = 1; { Indeks za negativne vrednosti } Z = 2; { Indeks za nulte vrednosti } P = 3; { Indeks za pozitivne vrednosti } brojFaziVrednosti = 3; TYPE faziSkup = ARRAY[1..brojFaziVrednosti] OF real; faziPripadnost = ARRAY[1..brojFaziVrednosti, 1..3] OF real; faziPravila = ARRAY[1..brojFaziVrednosti, 1..brojFaziVrednosti] OF integer; VAR t : real; { Vreme } theta, dtheta, ddtheta : real; { Ugao stapa u odnosu na vertikalu } x, dx, ddx : real; { Horizontalna koordinata } u : real; { Upravljacka sila } thetaF : faziSkup; thetaFM : faziPripadnost; dthetaF : faziSkup; dthetaFM : faziPripadnost; uF : faziSkup; uFM : faziPripadnost; pravila : faziPravila;

    51

  • Reprezentacija znanja { Procedura na osnovu zadate vrednosti i funkcija pripadnosti odredjuje fazi skup koji opisuje datu vrednost } PROCEDURE fazifikacija(vrednost : real; pripadnost : faziPripadnost; BEGIN

    VAR skup : faziSkup);

    IF (vrednost pripadnost[N,2]) AND (vrednost < pripadnost[N,3]) THEN skup[N]:=(pripadnost[N,3]-vrednost)/ (pripadnost[N,3]-pripadnost[N,2]) ELSE skup[N]:=0; IF (vrednost = pripadnost[Z,3]) THEN skup[Z]:=0 ELSE IF (vrednost > pripadnost[Z,1]) AND (vrednost pripadnost[Z,2]) AND (vrednost < pripadnost[Z,3]) THEN skup[Z]:=(pripadnost[Z,3]-vrednost)/ (pripadnost[Z,3]-pripadnost[Z,2]); IF (vrednost pripadnost[P,1]) AND (vrednost < pripadnost[P,2]) THEN skup[P]:=(vrednost-pripadnost[P,1])/ (pripadnost[P,2]-pripadnost[P,1]) ELSE END;

    skup[P]:=1;

    { Na osnovu dva fazi skupa i fazi pravila odredjuje se fazi skup koji opisuje upravljanje } PROCEDURE zakljucivanje(thetaF, dthetaF : faziSkup; pravila : faziPravila; VAR uF : faziSkup); VAR i, j : integer; BEGIN uF[N]:=0; uF[Z]:=0; uF[P]:=0; FOR i:=1 TO brojFaziVrednosti DO FOR j:=1 TO brojFaziVrednosti DO END;

    uF[pravila[i,j]]:=uF[pravila[i,j]]+thetaF[i]*dthetaF[j];

    { Na osnovu fazi skupa i funkcija pripadnosti izracunava se vrednost } FUNCTION defazifikacija(skup : faziSkup; pripadnost: faziPripadnost) : real; { Metoda centra tezista } BEGIN

    52

  • Reprezentacija znanja defazifikacija:=skup[N]*pripadnost[N,2]+ skup[Z]*pripadnost[Z,2]+ END;

    skup[P]*pripadnost[P,2];

    { Proracun matematickog modela } PROCEDURE matematickiModel(x, dx, theta, dtheta, u : real; VAR ddx : real; VAR ddtheta : real); VAR imenilac : real; BEGIN imenilac:=I*(MV+mK)+MV*mK*sqr(l); ddx:=(-(I+mK*sqr(l))*b*dx+g*sqr(mK*l)*theta+(I+mK*sqr(l))*u)/ imenilac; dEND;

    dtheta:=(-mK*l*b*dx+mK*g*l*(MV+mK)*theta+mK*l*u)/imenilac;

    PROCEDURE inicijalizacijaKontrolera; BEGIN thetaFM[N,1]:=-50*Pi/180; thetaFM[N,2]:=-10*Pi/180; thetaFM[N,3]:=0; thetaFM[Z,1]:=-10*Pi/180; thetaFM[Z,2]:=0; thetaFM[Z,3]:=10*Pi/180; thetaFM[P,1]:=0; thetaFM[P,2]:=10*Pi/180; thetaFM[P,3]:=50*Pi/180; dthetaFM[N,1]:=-1.5; dthetaFM[N,2]:=-0.75; dthetaFM[N,3]:=0; dthetaFM[Z,1]:=-0.75; dthetaFM[Z,2]:=0; dthetaFM[Z,3]:=0.75; dthetaFM[P,1]:=0; dthetaFM[P,2]:=0.75; dthetaFM[P,3]:=1.5; uFM[N,1]:=-30; uFM[N,2]:=-25; uFM[N,3]:=0; uFM[Z,1]:=-25; uFM[Z,2]:=0; uFM[Z,3]:=25; uFM[P,1]:=0; uFM[P,2]:=25;

    53

  • Reprezentacija znanja uFM[P,3]:=30; pravila[N,N]:=P; pravila[N,Z]:=P; pravila[N,P]:=Z; pravila[Z,N]:=P; pravila[Z,Z]:=Z; pravila[Z,P]:=N; pravila[P,N]:=Z; pravila[P,Z]:=N; pravila[P,P]:=N; END; { Na osnovu dve vrednosti (ugla i ugaone brzine) odredjuje se upravljacka sila } FUNCTION faziKontroler(theta, dtheta : real) : real; BEGIN fazifikacija(theta, thetaFM, thetaF); fazifikacija(dtheta, dthetaFM, dthetaF); zakljucivanje(thetaF, dthetaF, pravila, uF); faziKontroler:=defazifikacija(uF, uFM); END; { Glavni program } VAR c : char; BEGIN inicijalizacijaKontrolera; REPEAT clrscr; writeln('Izracunavanje upravljanja polozajem inverznog klatna'); write('Unesite inicijalni polozaj stapa = '); readln(theta); theta:=theta*Pi/180; dtheta:=0; x:=0; dx:=0; u:=0; t:=0; WHILE (t
  • Tehnike rasuivanja write('Da li zelite jos jednom (d/n) ? '); c:=readkey; END.

    UNTIL (c IN ['n','N']);

    Zadaci za vebu

    1. Dizajnirati i implementirati sistem za upravljanje poloajem inverznog klatna iji je matematiki model dat u prethodnom primeru. Fazi skupove organizovati tako da u svakom ima 5 vrednosti. Na ulazu zadati poetno odstupanje poloaja i ugaone brzine klatna, kao i eljeni krajnji poloaj klatna (ugao pod kojim e se klatno zaustaviti). Funkcije pripadnosti fazi skupu modelirati kao trapezoidne funkcije opisane sa 4 veliine. Prikazati kretanje klatna i grafike promene poloaja i ugaone brzine klatna i upravljake sile u vremenu.

    3. Tehnike rasuivanja

    3.1. Pretraivanje Brzina i kvalitet reenja zavise od primenjenog algoritma za traenje reenja odnosno algoritma za pretraivanje. U ovom poglavlju bie opisani najznaajniji algoritmi za pretragu u prostoru problema. Naime, sam problem predstavlja stanje u nekakvom prostoru. Iz jednog stanja mogue je prei u konano mnogo i to uvek u zavisnosti od nekog pravila. Recimo u ahu se figure pomeraju u odnosu na pravila a poloaji figura pre i posle pomeranja predstavljaju dva mogua stanja.

    Prvi zadatak svih pretraga je pronai niz akcija ili koraka koje treba obaviti da bi se iz poetnog stanja stiglo do eljenog stanja. U principu mogue je nai vie takvih nizova. Vrlo esto se zahteva da se prilikom reavanja ovakvih problema vodi rauna o nekoliko stvari: broj koraka koji je doveo do cilja, ukupan broj koraka, broj ponovljenih stanja itd.

    Prema tome, pretrage predstavljaju kompleksne postupke koji u sebi obuhvataju vie razliitih mehanizama.

    U sloenim problemima broj stanja kao i moguih akcija u pravilu je velik pa je veoma vano odabrati algoritam koji moe da pronae reenje i pri tom zadovolji postavljene uslove.

    55

  • Tehnike rasuivanja

    Lavirint je jedan jednostavan primer u kome je stanje u stvari pozicija opisana koordinatama x i y a raspored zidova odreuje pravila po kojima je mogue iz jedne pozicije prei u drugu. Na slici XXX prikazan je lavirint u kojem je potrebno nai put izmeu taaka P i K.

    Slika XXX Lavirint

    Iz stanja P u stanje b mogue je prei samo akcijom 3 (napred). Pozicija stanja g je x=4, y=5, iz stanje f mogue je levo (1) u stanje e, gore (3) u stanje g i dole (4) u stanje h.

    Jedno reenje ovog problema opisano je nizom akcija:

    2, 2, 2, 2, 2, 4, 2, 2, 2, 3, 2, 2, 4, 4, 4, 4, 2, 2, 2, 2, 2

    Razmislite o tome na koji nain bi ste vi na osnovu sopstvenog iskustva reili ovakav zadatak. Nakon toga pokuajte da opiete zato ste problem reili ba tako, i na kraju probajte problem da opiete algoritamski ili da napiete program.

    U nastavku e biti opisano nekoliko razliitih postupaka za reavanje ovakvih problema.

    56

  • Tehnike rasuivanja

    3.1.1. Enumerativni algoritmi i optimizacioni algoritmi

    Pretraivanje Prvi u dubinu

    Ako se postupak pretrage predstavi stablom, tad se postupak prvi u dubinu moe se ilustrativno predstaviti slikom:

    Slika XXX Pretraivanje prvi u dubinu

    Strategija pretraivanja prvi u dubinu

    Trenutna hipoteza ili stanje razrauje se (u dubinu) pre razmatranja ostalih stanja.

    U sluaju da stanje nema dece odnosno trenutna hipoteza ne moe da se razrauje, prelazi se na obradu prethodne hipoteze u drugom pravcu.

    Poto su vrlo esto problemi takvi da razvijanje stabla u dubinu rezultuje stablima vrlo velike dubine, iz tehnikih razloga dubina se ograniava na neku prihvatljivu veliinu. Stanja odnosno hipoteze ispod te dubine se ne obrauju.

    U nastavku je prikazana ilustracija algoritma na primeru reavanja slagalice 3x3.

    57

  • Tehnike rasuivanja

    Slika XXX Reavanje slagalice 3x3

    Programsko reenje prikazano je u programskom jeziku Java, sastoji se iz dve klase: State i Action. Klasa State opisuje jedan poloaj slagalice i sadri statike metode u kojima su opisani razliiti algoritmi za pretraivanje. Klasa Action opisuje pomeranje koje povezuje dva stanja.

    Action.java public class Action { public int startX; public int startY; public int endX; public int endY; public Action(int aStartX, int aStartY, int aEndX, int aEndY) { startX = aStartX; startY = aStartY; endX = aEndX; endY = aEndY; } public String toString() { return "("+startX+", "+startY+") -> ("+endX+", "+endY+")"; } }

    58

  • Tehnike rasuivanja

    Atributi startX i startY opisuju poloaj prazne pozicije pre a endX i endY nakon izvravanja akcije. State.java import java.util.*; import java.util.Comparator; import java.util.Collections; public class State { public int dimension = 0; public int elements[][]=null; public int markX = 0; public int markY = 0; public State parent = null; public Action action = null; public static int counter = 0; public State(int aDimension) { dimension = aDimension; elements = new int[dimension][dimension]; } public State(State st) { dimension = st.dimension; elements = new int[dimension][dimension]; for(int i=0; i

  • Tehnike rasuivanja if(markY+1
  • Tehnike rasuivanja return retVal; } public String toHash() { String retVal = ""; for(int i=0; i
  • Tehnike rasuivanja s.elements[2][0]=4; s.elements[2][1]=7; s.elements[2][2]=8; s.markY = 0; s.markX = 1; return s; } public static State finalState() { State s = new State(3); s.elements[0][0]=1; s.elements[0][1]=2; s.elements[0][2]=3; s.elements[1][0]=4; s.elements[1][1]=5; s.elements[1][2]=6; s.elements[2][0]=7; s.elements[2][1]=9; s.elements[2][2]=8; s.markY = 2; s.markX = 2; return s; } public static void main(String args[]) { State s = initialState(); System.out.println(s); counter = 0; State solution = searchDeepFirst(s); if(solution!=null) { System.out.println("---- Solution ----"); System.out.println("counter:"+counter); solution.showPath(); } else { System.out.println("---- ***** ----"); } } } Rezultat izvravanja 1 3 5 2 6 4 7 8 ---- SOLVED---- counter:84477 1 3 5 2 6 4 7 8 (0, 0) -> (1, 0) 1 3 5 2 6 4 7 8 (0, 1) -> (0, 0) 5 1 3 2 6

    62

  • Tehnike rasuivanja 4 7 8 ......... (2, 2) -> (2, 1) 1 2 3 4 5 6 7 8

    Pretraivanje Prvi u irinu

    Strategija pretraivanja Prvi u irinu

    Razvijaju se uvek stanja ili hipoteze na istom nivou. Kad se zavri pretraivanje u jednom nivou prelazi se na

    sledei i tako dok se ne doe do reenja ili dok hipoteze mogu da se razvijaju bez ponavljanja

    Putanja od korana stabla do reenja je u ovom sluaju minimalna.

    Programsko reenje:

    Implementacija ovog algoritma se nadovezuje na prethodni program. Klasa State proirena je metodom public class State { .... public static State searchBreadthFirst(State state) { Hashtable states = new Hashtable(); Vector nodes = new Vector(); boolean solved = false; nodes.add(state); String hashCode = state.toHash(); states.put(hashCode, ""); while(solved==false||nodes.size()>0) { State s = (State)nodes.get(0);

    63

  • Tehnike rasuivanja counter++; if(s.isFinished()==true) { return s; } else { Vector v = s.possibleActions(); for(int i=0; i (1, 0) 1 2 3 5 6 4 7 8 (0, 1) -> (1, 1) 1 2 3 5 6 4 7 8

    64

  • Tehnike rasuivanja

    (0, 2) -> (0, 1) 1 2 3 4 5 6 7 8 (1, 2) -> (0, 2) 1 2 3 4 5 6 7 8 (2, 2) -> (1, 2) 1 2 3 4 5 6 7 8

    Iterativno pretraivanje Prvi u dubinu

    Iterativno pretraivanje prvi u dubinu je pretraivanje u kojem se koriste dobre osobine pretrage prvi u dubinu i dobre osobine pretrage prvi u irinu.

    Strategija:

    Izriti pretragu Prvi u dubinu sa zadatom dubinom. Ako traeno reenje nije pronaeno ponoviti postupak sa

    poveanom dubinom.

    Uveavati dubinu pretrage prvi u dubinu sve dok se ne nae reenje ili se ne doe do maksimalne dubine.

    Potrebni resursi su isti kao za pretragu prvi u dubinu. Putanja do reenja je minimalna.

    Programsko reenje:

    Implementacija algoritma opisana je metodom koja se nadovezuje na ostale metode definisane u klasi State. public class State { .... public static State searchIterativeDeepFirst(State state){ for(int i=1; i

  • Tehnike rasuivanja } Tada glavni program moe da izgleda: public static void main(String args[]) { State s = initialState(); System.out.println(s); counter = 0; State solution = searchIterativeDeepFirst(s); if(solution!=null) { System.out.println("---- Solution ----"); System.out.println("counter:"+counter); solution.showPath(); } else { System.out.println("---- ***** ----"); } } Rezultat izvravanja: 1 3 5 2 6 4 7 8 ---- SOLVED---- counter:192 1 3 5 2 6 4 7 8 (1, 1) -> (1, 0) 1 2 3 5 6 4 7 8 (0, 1) -> (1, 1) 1 2 3 5 6 4 7 8 (0, 2) -> (0, 1) 1 2 3 4 5 6 7 8 (1, 2) -> (0, 2) 1 2 3 4 5 6 7 8 (2, 2) -> (1, 2) 1 2 3 4 5 6 7 8

    66

  • Tehnike rasuivanja

    Bidirekciona pretraga

    Strategija:

    Krenuti sa reavanjem zadatka algoritmom prvi u irinu ili iterativni prvi u dubinu.

    Istovremeno razvijati reenje korienjem pretrage prvi u irinu ili iterativni prvi u dubinu.

    Ako se jedan od listova iz jednog stabla poklopi sa jednim od listova drugog traeno reenje je putanja od zadatka do zajednikog stanja ili hipoteze i putanja od tog stanja do reenja.

    Ova vrsta pretrage grafiki je prikazana na slici

    Slika Bidirekciona pretraga

    Programsko reenje implementirano je na primeru slagalice 3x3 odnosno kao proirenje klase State: public class State { .... public static State searchBiDirectional(State state) { State finalState = finalState(); Hashtable statesA = new Hashtable(); Hashtable statesB = new Hashtable(); boolean solved = false; Vector nodesA = new Vector(); Vector nodesB = new Vector();

    67

  • Tehnike rasuivanja nodesA.add(state); nodesB.add(finalState); String hashCodeA = state.toHash(); statesA.put(hashCodeA, state); String hashCodeB = finalState.toHash(); statesB.put(hashCodeB, finalState); while((counter
  • Tehnike rasuivanja return null; } .... } Glavni program moe da izgleda: public static void main(String args[]) { State s = initialState(); System.out.println(s); counter = 0; State solution = searchIterativeDeepFirst(s); if(solution!=null) { System.out.println("---- Solution ----"); System.out.println("counter:"+counter); solution.showPath(); } else { System.out.println("---- ***** ----"); } } Rezultat izvravanja: 1 3 5 2 6 4 7 8 ------SOLVED------- 1 3 5 2 6 4 7 8 (1, 1) -> (1, 0) 1 2 3 5 6 4 7 8 (0, 1) -> (1, 1) 1 2 3 5 6 4 7 8 ------------------- 1 2 3 4 5 6 7 8 (1, 2) -> (2, 2) 1 2 3 4 5 6 7 8 (0, 2) -> (1, 2) 1 2 3 4 5 6 7 8 (0, 1) -> (0, 2) 1 2 3

    69

  • Tehnike rasuivanja

    5 6 4 7 8 ---- SOLVED---- counter:7 1 2 3 4 5 6 7 8 (1, 2) -> (2, 2) 1 2 3 4 5 6 7 8 (0, 2) -> (1, 2) 1 2 3 4 5 6 7 8 (0, 1) -> (0, 2) 1 2 3 5 6 4 7 8

    Optimizacioni algoritmi (A*)

    U sluaju da elimo izvriti pretragu u to je mogue manje koraka moramo u prostor uvesti metriku. Odnosno, svako stanje bi u tom sluaju bilo opisano vrednou definisane heuristike funkcije. Ta vrednost bi na primer govorila koliko je tranutno stanje daleko od reenja.

    Na ovaj nain u pretrazi se prioritet daje stanjima koja su blie traenom reenju a time se znaajno smanjuje broj operacija potrebnih za nalaenje reenja.

    Vrlo esto heuristike funkcije predstavljaju samo predvianje a ne i stvarno stanje, tako da izbor i kvalitet heuristike funkcije vrlo esto odreuje i kvalitet i brzinu pronalaenja reenja.

    Strategija A* algoritma je da se uvek ispituje hipoteza koja ima minimalnu vrednost definisane heuristike funkcije. Putanja od zadatka do reenja je i u ovom sluaju minimalna ali je broj koraka kojim je dobijeno reenje manji nego kod pretraivanja prvi u irinu.

    Programsko reenje je implementirano na primeru slagalice 3x3 kao i u prethodnim sluajevima. Klasa State proirena je heuristikom funkcijom koja vraa broj ploica koji se nalazi na svojem mestu. public class State { ..... public int heuristicFunction() { int retVal = 0;

    70

  • Tehnike rasuivanja for(int i=0; i
  • Tehnike rasuivanja

    5 6 4 7 8 (0, 1) -> (1, 1) 1 2 3 5 6 4 7 8 (0, 2) -> (0, 1) 1 2 3 4 5 6 7 8 (1, 2) -> (0, 2) 1 2 3 4 5 6 7 8 (2, 2) -> (1, 2) 1 2 3 4 5 6 7 8 Za potrebe sortiranja implementirana je klasa StateComparator: import java.util.*; import java.util.Comparator; import java.lang.Comparable; public class StateComparator implements Comparator { public int compare(Object a, Object b) { int retVal = 0; State stateA = (State)a; State stateB = (State)b; int fA = stateA.heuristicFunction(); int fB = stateB.heuristicFunction(); if(fAfB) { retVal=-1; } return retVal; } } A glavni program u ovom sluaju je: public static void main(String args[]) { State s = initialState(); System.out.println(s); counter = 0; State solution = searchAStar(s); if(solution!=null) { System.out.println("---- Solution ----"); System.out.println("counter:"+counter); solution.showPath(); } else { System.out.println("---- ***** ----");

    72

  • Tehnike rasuivanja } }

    Zadaci za vebu

    1. Napisati program kojim se odreuje postupak za reavanje slagalice 4x4. Programski implementirati algoritme prvi u dubinu, prvi u irinu, iterativni prvi u dubinu, bidirekcioni i A*. U reenju treba da se nalazi poetno stanje, krajnje stanje, sve akcije koje od poetnog vode ka krajnjem stanju i broj koraka koji su obavljeni da bi se dobilo reenje.

    2. Ako je lavirint opisan slikom XXXX. Napisati program kojim se pronalazi najkrai put izmeu ulaza i izlaza.

    3. Napisati program koji pronalazi poloaje N dama na ahovskoj tabli dimenzije NxN, takve da se bilo koja dama ne nalazi na putanji ostalih dama.

    4. Ako su gradovi povezani putnom mreom prikazanom na slici XXXXY odrediti

    a. Listu gradova koji se nalaze na najkraoj putanji izmeu grada A i grada Z.

    b. Putanju kojom bi se trabalo kretati da se obiu svi gradovi i pree najkrai put.

    73

  • Tehnike rasuivanja

    4

    1

    Slika XXXs

    5. Napisati program kojim se odreuju potezi koje ahista treba da obavi da bi skaka sa pozicije B2 preao na poziciju F2.

    Slika

    74

  • Tehnike rasuivanja

    3.1.2. Genetski algoritmi

    3.2. Dedukcija

    3.2.1. Izraunavanje odgovora u predikatskoj logici

    Izraunavanje odgovora u predikatskoj logici izvodi se korienjem dva mehanizma:

    1. Ujedinjavanje

    2. Rezolucija

    Ovim mehanizmima kreira se stablo pretraivanja.

    Ujedinjavanje je proces menjanja dva terma sa ciljem da se ti termovi uine identini.

    Supstitucija: Supstituciom ili zamenom nazivamo konaan skup parova oblika za koje vai sledee: S tX =i. X se javlja samo u jednom paru iz Sii. Promenjljive X nema sa desne strane znaka =

    SA*S

    je term koji se dobije tako to se u termu izvri supstitucija .

    A

    Primer:

    Ako je term drug(X, Y). a supstitucija :A =1S { X=pera, Y=mika } tada je drug(pera, mika). :* 1SA

    75

  • Tehnike rasuivanja

    =2S { X=brat(ana), Y=otac(ana) } :* 2SA drug(brat(ana), otac(ana)).

    Supstitucija =aS2 { X=pera, X=mika } nije dobra zato to se promenljiva X pojavljuje dva para. Takoe supstitucija

    {X=marko, Y=X } nije dobra zato to se promenljiva X nalazi i sa leve i sa desne strane znaka =.

    =bS2

    Instanca: Term je instanca terma A B ako postoji takva supstitucija tako da vai S SB *A = .

    Primer:

    :B p(X):-q(X), r(X,Y). =3S { X=a, Y=b } 3* SBA =

    :A p(a):-q(a), r(a,b). Ujedinjivost: Dva terma su ujedinjiva ako imaju zajedniku instancu

    SBSAC ** == Primer:

    :A p(a, Y). :B p(X, b).

    33 ** SBSAC == ; :C p(a, b).

    Ujedinitelj: Supstitucija naziva se ujedinitelj. SNajoptiji ujedinitelj: Supstitucija koja