Professional Documents
Culture Documents
Skripta Nova PDF
Skripta Nova PDF
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 vežbu ...............................................................12
2.2. NEURONSKE MREŽE .................................................................................23
2.2.1. Opšti model neuralnih mreža .........................................................23
2.2.2. Klasifikacija neuronskih mreža ......................................................28
2.2.3. Algoritmi za obučavanje neuronskih mreža ...................................29
2.3. FUZZY LOGIKA .........................................................................................45
2.3.1. Fuzzy skupovi .................................................................................45
2.3.2. Reprezentacija znanja primenom fuzzy skupova ............................47
2.3.3. Zaključivanje u fuzzy logici ............................................................47
2.3.4. Rešavanje problema primenom fuzzy logike...................................48
3. TEHNIKE RASUĐIVANJA .........................................................................55
3.1. PRETRAŽIVANJE .......................................................................................55
3.1.1. Enumerativni algoritmi i optimizacioni algoritmi ..........................57
3.1.2. Genetski algoritmi ..........................................................................75
3.2. DEDUKCIJA ..............................................................................................75
3.2.1. Izračunavanje odgovora u predikatskoj logici ...............................75
4. INTELIGENTNI AGENTI ...........................................................................85
4.1. ROBOCODE...............................................................................................87
4.1.1. Osnovni delovi ROBOCODE okruženja.........................................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
izračunavanje odgovora u Predikatskoj logici
(stablo pretraživanja)
(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:
određivanja minimuma funkcije
određivanje maksimuma funkcije
(10) Neuronske mreže
uvod
najprostiji oblik (pseudo kompetitivno obučavanje)
generalisano delta pravilo
primeri: prepoznavanje slova, 7 segmentni displej,
funkcija, crna kutija, automat prelaza stanja
(6) Fuzzy logika
uvod
inverzno klatno
fuzzy pretraživanje
3
Reprezentacija znanja
2. Reprezentacija znanja
2.1. Predikatska logika
5
Reprezentacija znanja
majka(mara, toma).
majka(nina, marko).
majka(nina, jasna).
6
Reprezentacija znanja
zaključak :- pretpostavka.
Pravila se interpretiraju tako što se proveri tačnost pretpostavke a
potom na osnovu nje izvodi se zaključak ili može da se kaže da ako je
tačna pretpostavka onda je tačan i zaključak.
U PROLOG-u se na ravnopravan način mogu koristi dva načina
zapisa infiksan i postfiksan.
Kod infiksnog načina zapisa (a) relacija se navodi između objekata.
Samim tim infiksan način moguće je koristiti samo u relacijama
između dva objekta. Postfiksnim načinom 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 kaže «X je Y-u roditelj
ako je X Y-u majka» pored ovoga takođe važi pravilo «X je Y-u roditelj
ako je X Y-u otac».
roditelj(X, Y):- majka(X, Y).
roditelj(X, Y):- otac(X, Y).
7
Reprezentacija znanja
predak(X, Y):- roditelj(X,Z),roditelj(Z,W), roditelj(W,X).
8
Reprezentacija znanja
Sintaksa programskog jezika PROLOG
Na slici 2.2 prikazana je podela svih elemenata programskog jezika
PROLOG.
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).
d) Obrtanje liste
obrni([], []).
obrni([X|Xr], Y):-obrni(Xr, Yr), pripoji(Yr, [X], Y).
uredjena([X]).
uredjena([X, Y|R]):-X=<Y, uredjena([Y|R]).
h) Podlista
10
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
11
Reprezentacija znanja
element(X, st(X, L, D)).
element(X, st(G, L, D)):-X<G, element(X, L).
element(X, st(G, L, D)):-X=>G, element(X, D).
h) Sortiranje liste
sortiraj(L, SL):-lista_stablo(L, S), stablo_lista(S, Sl).
12
Reprezentacija znanja
majka(katarina, jasna).
Zadatak 2.
Napisati niz činjenica i pravila koji opisuju sledeću situaciju.
Radnik Marko rođen je 28.3.1970. godine i po zanimanju je stolar.
Milan je takođe radnik rođen 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.
13
Reprezentacija znanja
14
Reprezentacija znanja
- osvežavanje interne memorije PROLOG interpretera (Ctrl+c Ctrl+b)
5. U slučaju da se program učitan u internoj memoriji menja bilo
internim editorom bilo klasičnim editorima neophodno je ponovno ga
učitati u radnu memoriju interpretera 'File Reload modified files'
6. Prvi program koji se unosi je model porodičnog
stabla.prikazan na slici 2.4.
15
Reprezentacija znanja
izmenjen redosled i ciljeva i klauzula). Isprobajte ove predikate. Kako
se ponašaju?
11. Proširite porodično 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!
ili
?-element(s, [a, s, d, f, g]).
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 napišite 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. Napišite 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 uređeno 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 uređeno.
7. Implementirajte predikat ( sortiraj(Lista, Rez) koji za
sortiranje koristi konverziju liste u uređeno binarno stablo i
konverziju iz stabla u listu.
8. Napišite predikat (listovi_s(X, S)) koji pronalazi elemente X
binarnog stabla S koji su listovi (nemaju ni desno ni levo
podstablo)
9. Napišite predikat (spoji_s(X, Y, Z)) koji spaja dva binarna
stabla X i Y tako da rezultujuće binarno stablo Z bude
uređeno.
10. Razmislite i pokušajte da opišete stablo sa proizvoljnim
brojem neposrednih potomaka. Kod binarnog stabla postoje
dva. Recimo, struktura direktorijuma kod file sistema
organizovana je kao neuređeno (ne postoji matematička
formula po kojoj raspoređujemo elemente u
17
Reprezentacija znanja
poddirektorijume(podstabla)). Ako vam je jasno kako bi
izgledala takva struktura pokušaje da napišete predikate za
proveravanje da li je data struktura stablo, proveravanje da li
se zadati element nalazi u stablu, dodavanje elementa u
odgovarajuće podstablo, brisanje elementa i brisanje čitavog
podstabla.
a 4 a 2
b b 1 c
c
1 2 f
f
2
d e d e
4
1
g g
Slika 2.5
18
Reprezentacija znanja
možemo da dođemo od tačke a do b, onda možemo i od tačke b do
tače a. Ovaj problem možemo rešiti tako što ćemo ubaciti dodatne
činjenice tipa:
veza(b,a).
19
Reprezentacija znanja
20
Reprezentacija znanja
Postoje još i formule za računanje izvoda zbira, razlike, proizvoda i
količnika funkcija. Klauzula za izvod zbira izgleda ovako:
izvod(U+V, Du+Dv):-izvod(U, Du), izvod(V, Dv).
21
Reprezentacija znanja
eventualno uprošćavanje. Neke od ovih situacija su množenje
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).
22
Reprezentacija znanja
23
Reprezentacija znanja
Svaku neuronsku mrežu karakteriše osam glavnih parametara:
1. Skup procesnih elemenata (čvorovi).
2. Stanje aktivacije.
3. Izlazna funkcija za svaki čvor.
4. Struktura povezanosti između čvorova.
5. Pravilo propagacije signala kroz mrežu.
6. Aktivaciona funkcija.
7. Algoritam obučavanja.
8. Okolina u kojoj sistem treba funkcioniše.
Skup procesnih elemenata
Da bismo formirali model neuronske mreže prvi korak je da
definišemo 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 obeležje nekog objekta a kompletan objekata
predstavljen je celinom mreže. Distribuirani pristup se češće koristi.
U neuronskoj mreži nema supervizora koji nadgleda i kontroliše rad
celine, postoje samo relativno jednostavni procesni elementi koji
obavljaju jednostavne zadatke. Celokupan zadatak čvora je da primi
signale sa ulaza (težinski izlazi susednih čvorova) i da na osnovu njih
generišu izlazni signal. Na slici prikazan je model neurona kao
procesnog elementa.
U1
W 1j
ΣW U
aktivacija
Ij
ij i
24
Reprezentacija znanja
okolinom, sem indirektno preko ulaznih i zlaznih čvorova. Procesni
elementi biće označeni sa ui, i=1, N, N- broj procesnih elemenata
mreže.
Stanje aktivacije
Stanje aktivacije ai(t) predstavlja stanje i-tog procesnog elementa u
trenutku t i odgovara stanju jezgra neurona. Stanje čvora može da
poprimi vrednost iz definisanog skupa (npr. skup pozitivnih realnih
brojeva).
Izlazna funkcija
f ( x ) = ( x − Θ ) ⋅ h( x − Θ )
gde je:
Θ − prag aktivacije
h − Hevisajdova funkcija.
Struktura povezanosti
Čvorovi kod svih tipova neuralnih mreža međusobno su povezani
brojnim vezama koje odgovaraju sinapsama. Broj i struktura veza
jedan su od najznačajnijih elemenata neuralne mreže. Topologije
raznih neuralnih mreža određene su baš ovom osobinom. Svaka veza
sadrži određenu težinu ( w ji ) koja je nosilac znanja i predstavlja
jačinu veze između čvora u j i ui . Kad signal prelazi iz jednog čvora u
drugi obično se množi težinom grane (veze w ji ) i tako utiče na stanje
aktivacije odredišnog čvora. Ta težina se može podešavati tokom
vremena. Promena vrednosti težina veza naziva se obučavanje.
25
Reprezentacija znanja
Obučavanje mora da se obavlja tako da mreža nakon modifikacije
daje bolje rezultate od neobučene mreže.
Mogući su razni načini opisa veza. Jedan od načina je da se
informacije o vezama organizuju u matricu n x n gde je n ukupan
broj čvorova. Ako je vrednost težine veća od nula tada se takva veza
naziva excitirajuća. Takve veze povećavaju nivo aktivacije čvoru u koji
ulaze. U protivnom, ako je vrednost manja od nula tada se veza
naziva inhibirajuća i smanjuje nivo aktivacije odredišnog čvora.
Postoje neuralne mreže (npr. Hopfield-ova) kod kojih je ta matrica
simetrična ili je trougaona (najčešći slučaj).
Pravilo propagacije signala kroz mrežu
Pravilo propagacije signala kroz mrežu predstavlja način kojim se
vrši kombinacija izlaznih vrednosti čvorova i tako generiše ulaz u
čvor. Kod neurona ga realizuju dendriti. Pravilo propagacije je
najčešće jednostavno
net i = ∑ w ji o j + Θ i
j
gde je
Aktivaciona funkcija
Funkcija aktivacije predstavlja zakon po kojem se menja vrednost
stanja aktivacije j-tog čvora i ima sledeći oblik:
a j (t ) = F j (a j (t − 1), net j (t ))
Funkcija perikaryon-a može da se posmatra kao funkcija aktivacije.
U opštem slučaju to je funkcija koja zavisi od prethodnog stanja
aktivacije kao i od trenutnog ulaza u čvor. Funkcija je najčešće
deterministička iako može da bude i stohastička. Tri najčešća tipa
aktivacionih funkcija su:
26
Reprezentacija znanja
step_funkcija
A + b, x ≥ Θ
h( x , Θ, A, b) =
− A + b , x < Θ
semi-linearna funkcija
0; x < −Θ
x + Θ
f (x ) = ;− Θ < x < Θ
2⋅Θ
1; x > Θ
i sigmoidna funkcija
1
f ( x) = .
1 − e−x
Na slici prikazana je semi-linearna aktivaciona funkcija
f(net) 1
0
net
-PRAG_AKTIVACIJE PRAG_AKTIVACIJE
27
Reprezentacija znanja
28
Reprezentacija znanja
Postoje dva osnovna principa smještanja informacija u neuralnoj
mreži kao asocijativnoj memoriji: autoasocijativni i heteroasocijativni.
29
Reprezentacija znanja
Pseudo kompetitivno obučavanje
Neuronske mreže koje su pogodne za obučavanje ovim načinom su
dvoslojne neuronske mreže i semi-linearnom aktivacionom funkcijom
u neuronima izlaznog sloja (Slika ).
I1
W 11
U1 I2
ULAZ
IZLAZ
U2 I3
U3 I4
W 35
I5
Ulazni sloj
Kompetitivni sloj
0; i ≠ j
izlaz j = (o1 , o2 ..om ) oi =
1; i = j
m - broj uzoraka obučavajućeg skupa i broj neurona u izlaznom
sloju
n - broj neurona u ulaznom sloju neuronske mreže
30
Reprezentacija znanja
Tada se vrednost težina veza između ulaznih neurona i pobuđenog
izlaznog neurona računa na sledeći način:
1
NAGRADA j ; aij = 1
Wi , j =
1
; aij = 0
KAZNA j
gde je
n
NAGRADA j = ∑ aij
i =1
n
KAZNA j = ∑ (aij − 1)
i =1
x1 y1
x2 y2
x3 y3
x4 y4
Slika
Ponašanje sistema opisano je sledećom 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
Rešenje:
Neuronska mreža treba da ima 4 ulaza i 4 izlaza. Za prvi uzorak iz
obučavajućeg skupa neuronska mreža prikazana je na slici
31
Reprezentacija znanja
1 1 W1,1 1 1
W 2,1
0 2 ,1 2
W3
1
4,
W
1 3 3
0 4 4
Slika
Ovčije boginje
Jaka prehlada
Male boginje
Veliki kašalj
Meningitis
Rubeole
Zauške
Grip
Groznica Da Da Da Da
Osip Da Da Da Da
Glavobolja Da Da
Curenje nosa Da Da Da Da Da
Konjuktivitis Da Da
Kašalj Da Da Da Da
Jak bol u telu Da
Osetljivost na svetlost Da
Bol u grlu Da Da Da
Kijavica Da Da Da
Otekle pljuvačne žlezde Da
Krvave oči Da
Ukrućeni zglobovi Da
Povećane limfne žlezde iza uha Da
Otpor na sisanje kiselog Da
32
Reprezentacija znanja
Nenormalna pljuvačka Da
Otekli krajnici Da
Suva usta Da
Slabost u telu Da
Trovanje Da Da
Dijareja Da
Svrab Da
Gubitak apetita Da
33
Reprezentacija znanja
Rešenje
Neuronska mreža treba da ima 35 ulaza, svaki ulaz odgovara jednom
pixelu matrice 5x7, vrednost 1 predstavlja crnu boju dok 0 belu.
Izlazni sloj neuronske mreže treba da ima onoliko neurona koliko
ima slova. Svakom neuronu tog sloja se pridružuje jedno slovo tako
da u toku eksploatacije neuron koji je najjače pobuđen u stvari
predstavlja prepoznato slovo.
U nastavku su izdvojeni delovi karakteristični za rešenje a kompletno
rešenje nalazi se u REFERENCA_NA_SAJT
void PseudoKompetitivno::obucavanje() {
int i = 0;
for(int i=0; i<broj_izlaza; i++){
double nagrada = 0.0;
double kazna = 0.0;
for(int j = 0;j<broj_ulaza; j++){
if(alphabet[j][i] == 1)
nagrada++;
else
kazna++;
}
if(nagrada != 0)
nagrada = 1.0/nagrada;
if(kazna != 0)
kazna = -1.0/kazna;
for(int j = 0;j<broj_ulaza; j++){
if(alphabet[j][i] == 1)
W[j][i] = nagrada;
else
W[j][i] = kazna;
}
}
}
34
Reprezentacija znanja
UKLJUČITI C++
Na sličan način moguće je i u programskom jeziku Java imple-
mentirati prethodno opisan algoritam. Neuronska mreža u ovom
primeru treba da obezbedi prepoznavanje slova opisanih sličicom 5x7
pixela.
35
Reprezentacija znanja
rešavanju većeg skupa problema. Nedostatak ovog algoritma je u
tome što aktivaciona funcija mora da bude diferencijabilna, a
prilikom obučavanja dobijeno stanje ne mora i da bude najbolje.
Back-propagation algoritam
iteracija
uzorak
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, izračunavanje izlaza, izračunavanje
greške i korekcija težina.
Izračunavanje izlaza obavlja se po formulama:
∑ ∑ (t j − a j )
1 2
E=
2 uzorci j∈U n
za neurone u izlaznom sloju:
δ j = f ' (net j ) ⋅ (t j − a j ) ,
gde je t j željeni izlaz, a j je stvarni izlaz
36
Reprezentacija znanja
za neurone u skrivenim slojevima:
δ i = f ' (neti ) ⋅ ∑δ W
i∈U s +1
j i, j
∆ p W i , j = ηδ ( p)
j a i( p ) + β ∆ q W i , j gde su p i q indexi uzoraka, η
brzina obučavanja, δ (j p ) je uticaj greške u j-tom neuronu, β uticaj
prethodnih promjena, ∆ qWi , j prethodna promjena.
pragovi aktivacija (bias) računa se po formuli
∆ pθ u = ηδ (j p ) + β∆ pθ u
Wi , j = Wi , j + ∆ pWi , j i θ u = θ u + ∆ pθ u
Primer 1: XOR funkcija
program bp;
const
type
37
Reprezentacija znanja
{Tip u kojem se opisuje jedan sloj}
TSloj = record
n:integer; {Stvaran broj neurona u sloju.}
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;
var
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}
obucavajuciSkup[4,2,1] := 0;
end;
38
Reprezentacija znanja
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];
greska := greska+sqr(slojevi[slojeviN].sigma[v]);
end;
{Greska u svim ostalim slojevima}
for s:=slojeviN-1 downto 1 do
for u:=1 to slojevi[s].n do
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;
izracunajGreske := greska;
end;
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;
{ Glavni program.}
var
i, pokusaj:integer;
greska :real;
begin
pokusaj:=1;
Inicijalizacija; {Inicijalizacija obucavajuceg skupa.}
repeat
InicijalizacijaTezina; {Postavljanje matrice tezina i pragova
aktivacija.}
greska := obucavanje;
Inc(pokusaj);
until (pokusaj>BROJPOKUSAJA) or (greska <MAXGRESKA);
{ Ispis rezultata. }
for i:=1 to uzorciN do
begin
postaviUlaz(i);
IzracunajIzlaz;
writeln(i, ' ', slojevi[slojeviN].izlaz[1]);
end;
readln;
end.
41
Reprezentacija znanja
Zadaci za vežbu
1. Dizajnirati i implementirati ekspertni sistem za
dijagnosticiranje kvara na automobilu na osnovu dvoslojne neuralne
mreže i kompetitivnog algoritma za obučavanje. Sistem treba da
obezbedi postavljanje dijagnoze na osnovu uočenih simptoma kvara.
Postaviti tabelu sa 10 simptoma i kvarova, omogućiti jednostavno
dodavanje novih simptoma i kvarova, jednostavan i pristupačan
korisnički interfejs i čuvanje rezultata rada.
2. Pomoću neuralne mreže simulirati rad sistema čije je
ponašanje opisano sledećim 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 mrežu i back-
propagation algoritam obučavanja.
3. Dizajnirati i implementirati ekspertni sistem za
dijagnosticiranje kvara na automobilu na osnovu troslojne feed-
forward neuralne mreže i back-propagation algoritma za obučavanje.
Sistem treba da obezbedi postavljanje dijagnoze na osnovu uočenih
simptoma kvara. Izlaze kodirati NBCD kodom. Postaviti tabelu sa 10
simptoma i kvarova, omogućiti jednostavno dodavanje novih
simptoma i kvarova, jednostavan i pristupačan korisnički interfejs i
čuvanje rezultata rada.
4. Pomoću neuralne mreže 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 mrežu i back-propagation
algoritam obučavanja.
42
Reprezentacija znanja
jednostavan i pristupačan korisnicki interfejs i čuvanje rezultata
rada.
7. Dizajnirati i implementirati sistem za prepoznavanje slova na
osnovu dvoslojne neuralne mreže i kompetitivnog algoritma za
obučavanje. Ulaz u sistem predstavljaju slova srpske abecede
(latinica) predstavljena matricom 5x7. Izlaz iz sistema je verovatnoća
da je dato slovo na ulazu. Posle obučavanja, tačno slovo na ulazu
zamutiti za željeni procenat. Dizajnirati pristupačan korisnički
interfejs koji će omogućiti jednostavno zadavanje ulaznog slova,
koeficijenta zamućenja i prikazati tačno ulazno, zamućeno ulazno i
prepoznato izlazno slovo. Ulazne podatke učitavati iz odgovarajuće
datoteke.
8. Dizajnirati i implementirati sistem za prepoznavanje slova na
osnovu dvoslojne neuralne mreže i kompetitivnog algoritma za
obučavanje. Ulaz u sistem predstavljaju slova srpske azbuke (ćirilica)
predstavljena matricom 5x7. Izlaz iz sistema je verovatnoca da je
dato slovo na ulazu. Posle obučavanja, tačno slovo na ulazu zamutiti
za željeni procenat. Dizajnirati pristupačan korisnički interfejs koji će
omogućiti jednostavno zadavanje ulaznog slova, koeficijenta
zamućenja i prikazati tačno ulazno, zamućeno ulazno i prepoznato
izlazno slovo. Ulazne podatke učitavati iz odgovarajuce datoteke.
9. Dizajnirati i implementirati sistem za prepoznavanje slova na
osnovu troslojne feed-forward neuralne mreže i back-propagation
algoritma za obučavanje. Ulaz u sistem predstavljaju slova srpske
abecede (latinica) predstavljena matricom 5x7. Izlaz iz sistema je
verovatnoća da je dato slovo na ulazu. Posle obučavanja, tačno slovo
na ulazu zamutiti za željeni procenat. Dizajnirati pristupačan
korisnički interfejs koji će omogućiti jednostavno zadavanje ulaznog
slova, koeficijenta zamućenja i prikazati tačno ulazno, zamućeno
ulazno i prepoznato izlazno slovo. Ulazne podatke učitavati iz
odgovarajuće datoteke.
10. Dizajnirati i implementirati sistem za prepoznavanje slova na
osnovu troslojne feed-forward neuralne mreže i back-propagation
algoritma za obučavanje. Ulaz u sistem predstavljaju slova srpske
azbuke (ćirilica) predstavljena matricom 5x7. Izlaz iz sistema je
verovatnoca da je dato slovo na ulazu. Posle obučavanja, tačno slovo
na ulazu zamutiti za željeni procenat. Dizajnirati pristupačan
korisnički interfejs koji će omogućiti jednostavno zadavanje ulaznog
slova, koeficijenta zamućenja i prikazati tačno ulazno, zamućeno
43
Reprezentacija znanja
ulazno i prepoznato izlazno slovo. Ulazne podatke učitavati iz
odgovarajuće datoteke.
1. Dizajnirati i implementirati sistem za prepoznavanje slova na
osnovu troslojne feed-forward neuralne mreže i back-propagation
algoritma za obučavanje. Ulaz u sistem predstavljaju slova srpske
abecede (latinica) predstavljena matricom 5x7. Izlaz iz sistema je
verovatnoća da je dato slovo na ulazu. Slova na izlazu kodirati NBCD
kodom. Posle obučavanja, tačno slovo na ulazu zamutiti za željeni
procenat. Dizajnirati pristupačan korisnički interfejs koji će
omogućiti jednostavno zadavanje ulaznog slova, koeficijenta
zamućenja i prikazati tačno ulazno, zamućeno ulazno i prepoznato
izlazno slovo. Ulazne podatke učitavati iz odgovarajuće datoteke.
44
Reprezentacija znanja
45
Reprezentacija znanja
kazaćemo da čovek visok 184.5 pripada skupu visokih ljudi sa
stepenom 0.95.
Na ovaj način uvodimo nov koncept a to je funkcija pripadnosti. Tako
na primer skupu visokih ljudi pridružena je funkcija pripadnosti koja
opisuje stepen pripadnosti svakog elmenta tom skupu.
Na slici prikazana je funkcija pripadnosti skupu visokih ljudi.
Stepen pripadnosti
100%
0%
130 cm 185 cm Visina
Slika
Osnovne osobine fazi skupa su:
• normalnost
Maksimalna vrednost funkcije pripadnosti je 1.
• konveksnost
a) konveksan b) nekonveksan
• broj elemenata
Broj elemenata skupa računa sa kao zbir vrednosti
funkcije pripadnosti svakog elementa.
Kao i kod diskretnih skupova i ovde se definišu osnovne operacije
(unija, presek, negacija i komplement).
46
Reprezentacija znanja
≥ 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 drugačije. Na primer imamo skup
A={marko, nikola, steva} tada relacija dobar_drug može da bude
definisana na sledeći način:
47
Reprezentacija znanja
48
Reprezentacija znanja
0 1 0 0 0
x& − ( I + ml 2 )b m 2 gl 2 x I + ml 2
&x& 0 0 &
x 2
= I ( M + m) + Mml 2 I ( M + m) + Mml 2 ⋅ + I ( M + m) + Mml u
θ& 0 0 0 1 θ 0
&& − mlb mgl ( M + m) & ml
θ 0 I ( M + m) + Mml 2 I ( M + m) + Mml 2
0 θ
I ( M + m) + Mml 2
Slika 1 a
x
0 0 1 0 x& 0
y= + u
0 0 0 1 θ 0
&
θ
Slika 1 b
Na slici 2 prikazana je slika realnog sistema kojim se upravlja kao i
osnovne veličine koje ga opisuju.
N
b = 0 .1 koeficient trenja vozila
m/s
I = 0.006 kg ⋅ m 2 koeficient inercije štapa
l = 0 .3 m dužina štapa
F upravljačka sila
x pozicija vozila
θ ugao između štapa i
vertikale
Slika 2
Ulazi u fazi kontroler su ugao i ugaona brzina klatna. Izlaz iz fazi
kontrolera je upravljačka sila. Na slici 3. prikazan je šematski prikaz
upravljačkog modela.
Sistem je podeljen na dve celine. Prva celina predstavlja objekat
upravljanja (inverzno klatno), opisan matematičkim modelom. Druga
49
Reprezentacija znanja
celina je fazi kontroler koji treba da obezbedi željenu vrednost
upravljane veličine. Fazi upravljanje se sastoji od tri etape. Prva je
fazifikacija ulaznih veličina. Nakon fazifikacije sledi zaključivanje na
osnovu fazi pravila. Na kraju se vrednost upravljačke sile određuje u
modulu za defazifikaciju.
Matematički model .
θ
u .
x = Ax + Bu θ
Fazi kontroler
θF Fazifikacija
Defazifikacija u F θFM
uFM Zaključivanje
. .
Fazifikacija
θF θFM
Slika 3
Na slici 4. prikazan je izgled modula za fazifikaciju ulaznih veličina.
Fazifikacija je proces određivanja stepena pripadnosti elementima
fazi skupa. Funkcije pripadnosti fazi skupovima su trougaone
funkcije opisane sa tri veličine.
P Z N N
pripadnost[Z,1] pripadnost[Z,2] pripadnost[Z,3] Izlaz
∑ θ [i] ⋅ θ&
F F
koji predstavlja upravljačku veličinu. u [ k ] =
F
[ j ] , gde je
i, j
50
Reprezentacija znanja
U nastavku je dato rešenja na programskom jeziku Pascal. Potrebno
je proširiti 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 položaja, ugaone brzine i
upravljačke 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
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;
VAR skup : faziSkup);
BEGIN
IF (vrednost <= pripadnost[N,2]) THEN
skup[N]:=1
ELSE 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,1]) OR
(vrednost >= pripadnost[Z,3]) THEN
skup[Z]:=0
ELSE IF (vrednost > pripadnost[Z,1]) AND
(vrednost <= pripadnost[Z,2]) THEN
skup[Z]:=(vrednost-pripadnost[Z,1])/
(pripadnost[Z,2]-pripadnost[Z,1])
ELSE IF (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]) THEN
skup[P]:=0
ELSE IF (vrednost > pripadnost[P,1]) AND
(vrednost < pripadnost[P,2]) THEN
skup[P]:=(vrednost-pripadnost[P,1])/
(pripadnost[P,2]-pripadnost[P,1])
ELSE
skup[P]:=1;
END;
{ 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
uF[pravila[i,j]]:=uF[pravila[i,j]]+thetaF[i]*dthetaF[j];
END;
52
Reprezentacija znanja
defazifikacija:=skup[N]*pripadnost[N,2]+
skup[Z]*pripadnost[Z,2]+
skup[P]*pripadnost[P,2];
END;
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;
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 <= 1) DO
BEGIN
writeln(' u = ', u:4:2,' theta = ',(theta*180/Pi):4:2,
' dtheta = ',dtheta:4:2);
u:=faziKontroler(theta,dtheta);
matematickiModel(x,dx,theta,dtheta,u,ddx,ddtheta);
x:=x+dx*dt;
dx:=dx+ddx*dt;
theta:=theta+dtheta*dt;
dtheta:=dtheta+ddtheta*dt;
t:=t+dt;
END;
54
Tehnike rasuđivanja
write('Da li zelite jos jednom (d/n) ? ');
c:=readkey;
UNTIL (c IN ['n','N']);
END.
Zadaci za vežbu
1. Dizajnirati i implementirati sistem za upravljanje položajem
inverznog klatna čiji je matematički model dat u prethodnom
primeru. Fazi skupove organizovati tako da u svakom ima 5
vrednosti. Na ulazu zadati početno odstupanje položaja i
ugaone brzine klatna, kao i željeni krajnji položaj klatna (ugao
pod kojim će se klatno zaustaviti). Funkcije pripadnosti fazi
skupu modelirati kao trapezoidne funkcije opisane sa 4
veličine. Prikazati kretanje klatna i grafike promene položaja i
ugaone brzine klatna i upravljačke sile u vremenu.
3. Tehnike rasuđivanja
3.1. Pretraživanje
Brzina i kvalitet rešenja zavise od primenjenog algoritma za traženje
rešenja odnosno algoritma za pretraživanje. U ovom poglavlju biće
opisani najznačajniji algoritmi za pretragu u prostoru problema.
Naime, sam problem predstavlja stanje u «nekakvom» prostoru. Iz
jednog stanja moguće je preći u konačno mnogo i to uvek u
zavisnosti od nekog pravila. Recimo u šahu se figure pomeraju u
odnosu na pravila a položaji figura pre i posle pomeranja
predstavljaju dva moguća stanja.
Prvi zadatak svih pretraga je pronaći niz akcija ili koraka koje treba
obaviti da bi se iz početnog stanja stiglo do željenog stanja. U
principu moguće je naći više takvih nizova. Vrlo često se zahteva da
se prilikom rešavanja ovakvih problema vodi računa 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 više različitih mehanizama.
U složenim problemima broj stanja kao i mogućih akcija u pravilu je
velik pa je veoma važno odabrati algoritam koji može da pronađe
rešenje i pri tom zadovolji postavljene uslove.
55
Tehnike rasuđivanja
Lavirint je jedan jednostavan primer u kome je stanje u stvari
pozicija opisana koordinatama x i y a raspored zidova određuje
pravila po kojima je moguće iz jedne pozicije preći u drugu. Na slici
XXX prikazan je lavirint u kojem je potrebno naći put između tačaka
P i K.
56
Tehnike rasuđivanja
57
Tehnike rasuđivanja
58
Tehnike rasuđivanja
59
Tehnike rasuđivanja
if(markY+1<dimension) {
Action act = new Action(markX, markY+1, markX, markY);
retVal.add(act);
}
return retVal;
}
60
Tehnike rasuđivanja
return retVal;
}
61
Tehnike rasuđivanja
s.elements[2][0]=4;
s.elements[2][1]=7;
s.elements[2][2]=8;
s.markY = 0;
s.markX = 1;
return s;
}
}
Rezultat izvršavanja
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 rasuđivanja
4 7 8
.........
(2, 2) -> (2, 1)
1 2 3
4 5 6
7 8
63
Tehnike rasuđivanja
counter++;
if(s.isFinished()==true) {
return s;
} else {
Vector v = s.possibleActions();
for(int i=0; i<v.size(); i++) {
Action act = (Action)v.get(i);
State next = s.nextState(act);
String nextHashCode = next.toHash();
if(states.get(nextHashCode)==null) {
states.put(nextHashCode, "");
nodes.add(next);
}
}
nodes.remove(s);
}
}
return null;
}
....
}
A metoda main se sad menja u:
public static void main(String args[]) {
State s = initialState();
System.out.println(s);
counter = 0;
State solution = searchBreadthFirst(s);
if(solution!=null) {
System.out.println("---- Solution ----");
System.out.println("counter:"+counter);
solution.showPath();
} else {
System.out.println("---- ***** ----");
}
}
Rezultat izvršavanja
1 3
5 2 6
4 7 8
---- SOLVED----
counter:52
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
64
Tehnike rasuđivanja
(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
65
Tehnike rasuđivanja
}
Tada glavni program može da izgleda:
Rezultat izvršavanja:
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 rasuđivanja
Bidirekciona pretraga
Strategija:
• Krenuti sa rešavanjem zadatka algoritmom prvi u širinu ili
iterativni prvi u dubinu.
• Istovremeno razvijati rešenje korišćenjem pretrage prvi u
širinu ili iterativni prvi u dubinu.
• Ako se jedan od listova iz jednog stabla poklopi sa jednim od
listova drugog traženo rešenje je putanja od zadatka do
zajedničkog stanja ili hipoteze i putanja od tog stanja do
rešenja.
67
Tehnike rasuđivanja
nodesA.add(state);
nodesB.add(finalState);
String hashCodeA = state.toHash();
statesA.put(hashCodeA, state);
String hashCodeB = finalState.toHash();
statesB.put(hashCodeB, finalState);
while((counter<10000)||(solved==false)) {
counter++;
// from start
State s = (State)nodesA.get(0);
String hc = s.toHash();
State inter = (State)statesB.get(hc);
if(inter!=null) {
System.out.println("------SOLVED-------");
s.showPath();
System.out.println("-------------------");
inter.showPath();
return inter;
} else {
Vector v = s.possibleActions();
for(int i=0; i<v.size(); i++) {
Action act = (Action)v.get(i);
State next = s.nextState(act);
String nextHashCode = next.toHash();
if(statesA.get(nextHashCode)==null) {
statesA.put(nextHashCode, next);
nodesA.add(next);
}
}
nodesA.remove(s);
}
// from end
s = (State)nodesB.get(0);
hc = s.toHash();
inter = (State)statesA.get(hc);
if(inter!=null) {
System.out.println("------SOLVED-------");
s.showPath();
System.out.println("-------------------");
inter.showPath();
return inter;
} else {
Vector v = s.possibleActions();
for(int i=0; i<v.size(); i++) {
Action act = (Action)v.get(i);
State next = s.nextState(act);
String nextHashCode = next.toHash();
if(statesB.get(nextHashCode)==null) {
statesB.put(nextHashCode, next);
nodesB.add(next);
}
}
nodesB.remove(s);
}
}
68
Tehnike rasuđivanja
return null;
}
....
}
Glavni program može 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 izvršavanja:
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 rasuđivanja
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
70
Tehnike rasuđivanja
for(int i=0; i<dimension; i++) {
for(int j=0; j<dimension; j++) {
if(elements[i][j] == (i*dimension+j+1) ) {
retVal++;
}
}
}
return retVal;
}
public static State searchAStar(State state) {
Hashtable states = new Hashtable();
Vector nodes = new Vector();
boolean solved = false;
nodes.add(state);
String hashCode = state.toHash();
states.put(hashCode, "");
Comparator c = new StateComparator();
while(solved==false||nodes.size()>0) {
State s = (State)nodes.get(0);
counter++;
if(s.isFinished()==true) {
return s;
} else {
Vector v = s.possibleActions();
for(int i=0; i<v.size(); i++) {
Action act = (Action)v.get(i);
State next = s.nextState(act);
String nextHashCode = next.toHash();
if(states.get(nextHashCode)==null) {
states.put(nextHashCode, "");
nodes.add(next);
}
}
nodes.remove(s);
Collections.sort(nodes, c);
}
}
return null;
}
.....
}
Rezultat izvršavanja:
1 3
5 2 6
4 7 8
---- SOLVED----
counter:6
1 3
5 2 6
4 7 8
(1, 1) -> (1, 0)
1 2 3
71
Tehnike rasuđivanja
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;
72
Tehnike rasuđivanja
}
}
Zadaci za vežbu
1. Napisati program kojim se određuje postupak za rešavanje
slagalice 4x4. Programski implementirati algoritme prvi u
dubinu, prvi u širinu, iterativni prvi u dubinu, bidirekcioni i
A*. U rešenju treba da se nalazi početno stanje, krajnje
stanje, sve akcije koje od početnog vode ka krajnjem stanju i
broj koraka koji su obavljeni da bi se dobilo rešenje.
2. Ako je lavirint opisan slikom XXXX. Napisati program kojim
se pronalazi najkraći put između ulaza i izlaza.
3. Napisati program koji pronalazi položaje 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 mrežom prikazanom na slici
XXXXY odrediti
a. Listu gradova koji se nalaze na najkraćoj putanji
između grada A i grada Z.
b. Putanju kojom bi se trabalo kretati da se obiđu svi
gradovi i pređe najkraći put.
73
Tehnike rasuđivanja
Slika XXXs
5. Napisati program kojim se određuju potezi koje šahista treba
da obavi da bi skakač sa pozicije B2 prešao na poziciju F2.
Slika
74
Tehnike rasuđivanja
3.2. Dedukcija
75
Tehnike rasuđivanja
S 2 = { X=brat(ana), Y=otac(ana) }
A * S 2 : drug(brat(ana), otac(ana)).
A = B * S3
A: p(a):-q(a), r(a,b).
B: p(X, b).
C = A * S3 = B * S 3 ;
C: p(a, b).
76
Tehnike rasuđivanja
S 4 je opštiji od S5
Varijanta: Varijanta nekog terma A je instanca te strukture koja je
dobijena primenom supstitucije koja sadrži samo promenljive.
Primer:
p(X):-q(X), r(X).
P(Y):-q(Y), r(Y).
p(K):-q(K), r(K).
S6 = { X=Y }
S7 = { X=K }
Proces ujedinjavanja dva terma:
1. Dve strukture su ujedinjive ako imaju iste funktore i ako su
svi argumenti jedne ujedinjive sa argumentima druge.
Primeri:
drug(a, b).
drugar(a, b).
Dve strukture nisu ujedinjive zato što nemaju isti broj argumenata.
brz(X).
brz(pas(X)).
77
Tehnike rasuđivanja
Ove dve nisu ujedinjive zato što argumenti X i pas(X) nisu ujedinjivi.
Međutim, ujedinjavanje je moguće izvršiti između prve klauzule i
varijante druge (preimenovanje promenljivih).
brz(X).
brz(pas(Y)).
78
Tehnike rasuđivanja
79
Tehnike rasuđivanja
potomaka. Međutim, ako C1* ima konačno stablo pretraživanja
ali bez grane uspeha onda je potomak cilj ?-C2, ..., Cn
4. Potomak koji nema ni jednog elementa naziva se prazan cilj []
Čvor uspeha je čvor koji sadrži prazan cilj. Grana stabla koje
završavaju na čvoru uspeha nazivaju se grane uspeha. Čvor koji
sadrži ne prazan cilj a nema potomaka naziva se čvor neuspeha.
Grana neuspeha je grana koja završava na čvoru neuspeha.
Primer 1:
(k1) p(X, Y):-q(X), r(X, Y).
(k2) p(d, 4).
(k3) q(a).
(k4) q(b).
(k5) q(c).
(k6) r(a, 1).
(k7) r(a, 2).
(k8) r(c, 3).
80
Tehnike rasuđivanja
(k1) (k2)
S7={X=d, Y=4}
Odgovor: Odgovor:
Odgovor: X=c, Y=3
X=1, Y=1 X=a, Y=2
Slika 2.X1
Primer 2:
Za prikazano porodično stablo napisati skup činjenica i pravila koji
opisuju vezu roditelj (r) i vezu predak (p). Nakon toga nacrtati stablo
pretraživanja koje se formira kako bi se izračunao odgovor na pitanje
«Kome je ivan preda?».
Rеšenje 1:
(k1) r(ivan, toma).
(k2) r(mara, toma).
(k3) r(toma, petar).
(k4,1) p(X, Y):-r(X,Y).
(k5,1) p(X, Y):-r(X,Z), P(Z, Y).
81
Tehnike rasuđivanja
82
Tehnike rasuđivanja
(1) ?-p(ivan, X).
k4,2*S1: p(X1,Y1):-r(X1, Y1).
S1={X=X1, Y=Y1} k5,2*S1: p(X1,Y1):-r(X1, Z),p(Z,Y1).
S2={X1=X} (k5,2*S1)*S2 (k4,2*S1)*S2
(11)
83
Tehnike rasuđivanja
(1) ?-p(ivan, X).
S1={X=X1, Y=Y1} S2={X1=X}
k5,3*S1: p(X1,Y1):-r(X1, Z),p(Z,Y1).
k4,3*S1: p(X1,Y1):-r(X1, Y1).
(k5,3*S1)*S2
(k4,3*S1)*S2
(2) ?-r(ivan, X). (4) ?-p(Z, X),r(ivan,Z).
S3={X=toma} (k5,3*S1)*S2
(k4,3)
(k1)
(3) ?-[]. (5) ?-r(Z, X),r(ivan,Z). (10) ?-p(Z1, X),r(Z, Z1),r(ivan, Z).
(6) ?-r(ivan, ivan). (8) ?-r(ivan, toma). (11) ?-r(Z1, X),r(Z,Z1),r(ivan, Z). .....
(k1)
Čvor
neuspeha! S5={Z=mara, X=toma}
(9) ?-[].
(k2) S9={Z1=toma, X=petar}
Odgovor:
(7) ?-r(ivan, mara). X=petar S7={Z1=ivan, X=toma}
(k1) (k3)
S8={Z1=mara, X=toma}
Čvor (12) ?-r(Z,ivan),r(ivan, Z).
(13) ?-r(Z,toma),r(ivan, Z).
neuspeha! (k2)
Čvor Čvor
neuspeha! neuspeha!
(12) ?-r(Z,mara),r(ivan, Z).
Čvor
neuspeha!
84
Inteligentni agenti
4. Inteligentni agenti
Agent kao koncept definiše se na mnogo načina. Međutim, skoro sve
definicije opisuju agente kao objekte koji mogu da vide okolinu,
objekte i druge agente preko svojih senzora. Mogu da komuniciraju
sa drugim objektima ili agentima u okolini. Poseduju osobinu
pokretljivosti i obavezno imaju cilj koji treba da ispune. Ponekad
nekoliko agenata imaju zajednički zadatak pa je neophodno da
postoji njihova međusobna koordinacija. Takođe, agenti mogu da
budu osposobljeni za rešavanje određenog zadatka ili problema, i
tada oni predstavljaju servis koji ostali agenti mogu da koriste kako
bi rešili svoj zadatak.
Prethodnom definicijom obuhvaćen je veoma velik broj različitih
uređaja i programskih paketa. U daljem radu ograničićemo se na
agente koji pored prethodnih osobina poseduju i određenu
inteligenciju. Naime, agent da bi ispunio zadati cilj mora da donosi
odluke. Agenti koji te odluke donose na način opisan tehnikama
računarske inteligencije nazivaju se inteligentni agenti.
Za potrebe modeliranja i implementacije agenata pojedine celine se
odvajaju u module (modul za kretanje, modul za odlučivanje, modul
za komunikaciju, modul za izvršavanje akcija, senzori itd.). U
programskoj implementaciji inteligentnih agenata koristi se nekoliko
disciplina: objektno orijentisano modeliranje, računarska
inteligencija, modeliranje konkurentnog ponašanja, modeliranje
protokola za komunikaciju itd.
85
Inteligentni agenti
«Pronađi objekat 1 i odnesi ga agentu 2. Agent 2 treba da sačuva
objekat 1 i da ga kasnije na zahtev brzo pronađe.»
Karakteristična struktura inteligentnog agenta prikazana je na slici
4.2.
86
Inteligentni agenti
FIPA specifikacije su kolekcije standarda kojima se opisuje način
povezivanja i koordinacije raznolikih agentskih struktura.
Paralelno sa definisanjem specifikacija mnoge kompanije razvijaju
sopstvena okruženja za podršku agent orijentisanom programiranju.
Tako je na primer IBM T.J.Watson Research Center istraživački
centar pokrenuo projekat kojim se razvija okruženje ABLE (Agent
Building and Learning Environment), JAF (The Java Agent
Framework) je projekat MAS laboratorije
(http://mas.cs.umass.edu/), kojim je takođe implementirano
okruženje za razvoj inteligentnih agenata. Pored ova dva vrlo ozbilja
projekta IBM alphaWorks je pokrenuo i projekat ROBOCODE
(http://robocode.alphaworks.ibm.com/home/home.html), kojim je
moguće na jednostavan način kreirati agente i pratiti njihovo
ponašanje u okruženju u kojem se nalaze.
U nastavku će biti opisano ROBOCODE okruženje.
4.1. Robocode
Robocode projekat je razvijen u edukativne svrhe i njegova namena je
da se na atraktivnom primeru promoviše razvoj agent orijentisanog
programiranja u programskom jeziku Java.
Samo okruženje je zamišljeno kao virtuelno bojno polje u kojem se
takmiče inteligentni agenti (tenkovi). Takmičenje predstavlja
simulaciju međusobnog ponašanja više implementiranih agenata ili
timova. Osnovne funkcije kao i objekti definisani su u ROBOCODE
API-ju. Samo jezgro moguće je proširivati raznim tehnikama za
odlučivanje.
87
Inteligentni agenti
88
Inteligentni agenti
Pokretanje simulacije obavlja se kreiranjem nove bitke (Battle->New).
Za opis simulacije, odnosno bitke potrebno je izabrati koji sve roboti
učestvuju u takmičenju i koliko rundi će trajati takmičenje.
89
90
_Robot BulletMissedEv ent WinEv ent RobotDeathEv ent HitWallEv ent
Robot
+bullet
+bullet
Ev ent
+bullet HitRobotEv ent
_Adv ancedRobot HitByBulletEv ent
ScannedRobotEv ent
+condition
Condition
+robot Mov eCompleteCondition
Adv ancedRobot +robot
+robot
+robot
«interface» RobocodeFileWriter
TeamRobot
Droid RobocodeFileOutputStream
TurnCompleteCondition
Inteligentni agenti
Vrlo jednostavan robot koji se kreće po ivicama kvadrata stranice 50
(jedinica mere rastojanja u prostoru) opisan je klasom Robot1.java.
package ovi;
import robocode.*;
package ovi;
import robocode.*;
public class Robot2 extends Robot {
public void run() {
while(true) {
turnGunRight(360);
}
}
public void onScannedRobot(ScannedRobotEvent e) {
fire(1);
}
}
91
Inteligentni agenti
Ovo su bila dva jednostavna primera na kojima su ilustrovane
mogućnosti kretanja robota, pomeranja senzora i izvršnih uređaja.
Primer robota koji najkraćim putem ide prema donjem levom uglu
prikazan je klasom Robot5.java
package ovi;
import robocode.*;
heading
getY()
X
getX()
92
Inteligentni agenti
Pored metoda za kretanje i proveru stanja postoje i metode koje se
pozivaju kao rezultat određenog događaja. Jedan od takvih događaja
je i događaj kad radar (senzor) primeti drugog robota
(ScannedRobotEvent). Tom prilikom poziva se metoda onScannedRobot
u kojoj je moguće napisati reakciju na događaj. Na primer, možemo
odrediti apsolutnu poziciju robota. ScannedRobotEvent pored
relativnog ugla između radara i smera kretanja sadrži i informaciju o
udaljenosti, brzini drugog robota itd.
package ovi;
import robocode.*;
93
Inteligentni agenti
Jedan od veoma važnih proces u projektovanju agenata jeste
koordinacija delovanja. Koordinacija se postiže komunikacijom koja
se odvija između pojedinih agenata tima ili istovremeno svih.
U Robocode okruženju klasom TeamRobot opisan je robot koji pored
osobina običnog robota ima i metode slanja i primanja poruka.
Naime poruka može u svakom trenutku da se pošalje bilo kojem
agentu ekipe, metodom sendMessage, dok se primanje poruka
obrađuje kao događaj onMessageReceived. U nastavku je dat primer
dve klase koje pripadaju istom timu.
Robot61.java
package ovi;
import robocode.*;
Robot62.java
package ovi;
import robocode.*;
public class Robot62 extends TeamRobot{
public void run() {
while(true) {
ahead(10);
}
}
public void onMessageReceived(MessageEvent event) {
out.println(event.getSender() +
" poslao poruku: " + event.getMessage());
}
}
94
Inteligentni agenti
Vežba 3. Implementirajte tim koji se sastoji od tri robota (1, 2 i 3).
Prvi (1) u početku emituje poruke o poziciji sastanka a druga dva (2,
3) po prijemu poruka kreću ka tom mestu. Po stizanju u blizinu
roboti javljaju robotu 1 da su stigli. Po pristizanju svi zajedno se
upućuju na mesto koje definiše agent 1.
Vežba 4. Implementirajte tim koji se sastoji od četiri robota. Dva
služe za osmatranje i ne pomeraju se. Njihovi radari stalno skeniraju
okolinu. Poruke o stanju okoline šalju robotima čiji je zadatak da se
kreću i pucaju prema neprijateljskim robotima. U slučaju uništenja
oba izviđačka robota jedan od preostalih pokretnih preuzima ulogu
izviđača.
95
Literatura
5. Literatura
[1] HTML 4.0 Reference,
http://www.w3.org/TR/REC-html40/
[2] Java Native Interface Specification, JDK 1.1.8 dokumentacija
[3] Java Server Pages, http://java.sun.com/products/jsp/
[4] Eckel, B., Thinking in Java, revision 9, August 1997.
[5] Extensible Markup Language (XML),
http://www.w3.org/TR/REC-xml
[6] Nauck, D., Klawon, F., Kruse, R., Neuro-Fuzzy Systems,
John Wiley& Sons, 1
[7] Russell S.J., Norvig P., Artificial Intelligence A modern
approach, Prentice-Hall Internatinoal, Inc.
97
99