Skripta Nova ( Prolog )
description
Transcript of Skripta Nova ( Prolog )
-
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