TALLINNA TEHNIKAÜLIKOOL
Infotehnoloogia teaduskond Automaatikainstituut
Automaatjuhtimise ja süsteemianalüüsi õppetool
Daniel
Tuulik 111618 IASM
Eksamiülesande lahenduse aruanne
Aines
ISS0022 Automaatjuhtimissüsteemide jätkukursus
Juhendaja : Eduard
Petlenkov Dotsent
Tallinn 2011 Ülesanne 1........................................................................................................................... 3 Ülesande püstitus ............................................................................................................ 3 Lahenduskäik .................................................................................................................. 3
Sisend - ja väljund katseandmete tekitamine ............................................................... 3 Närvivõrgu
treenimine ................................................................................................ 4
Regulaator ................................................................................................................... 4 Närvivõrgu treenimisalgoritmi ja peidetud kihi neuronite aktiveerimisfunktsiooni valik............................................................................................................................. 5 Minimaalse neuronite arvu leidmine .......................................................................... 7 Minimaalne lubatav sisend-väljundandmete vektorite pikkus.................................... 9
Ülesanne 2......................................................................................................................... 12 Ülesande täpsustamine.................................................................................................. 12 Lahendusmeetodite valik .............................................................................................. 12 Lahendusmeetodite
realiseerimine ................................................................................ 12 Esimese lahenduse
realisatsioon ............................................................................... 12 Teise lahenduse realisatsioon.................................................................................... 13 Katsete
planeerimine ja realiseerimine ning lahendusmeetodite võrdlus ja
parima realisatsiooni valik ........................................................................................................ 14 Osaliselt kaetud sümbolitega
testimine ..................................................................... 14
2 Ülesanne 1
Ülesande püstitus
On antud mittelineaarne dünaamiline
diskreetaja süsteem. Mittelineaarne funktsioon on
tundmatu. On mõõdetavad ainult selle süsteemi sisend ja väljund. Süsteem on
identifitseeritav ja juhitav vahemikus y [- 1; 1] .
Sünteesida regulaator antud süsteemi
juhtimiseks ja tõestada eksperimentaalselt
juhtimissüsteemi töövõimekust.
Juhtimissüsteem peab olema adaptiivne ning väljatöötatud lahenduste töövõimelisust
tuleb kontrollida ka objekti mittelineaarsel mudelil ja häiringute olukorras.
Lahenduskäik
Sisend- ja väljund katseandmete tekitamine
Pilt1. Katseandmete kogumine.
3 Närvivõrgu treenimine
td=1
N=size(output,1)
P=[output(3:N)';output(2:N-1)';output(1:N-2)']
T=input(2:N-1)'
global net_c
net_c=newff([-1 1; -1 1;)
net_c.trainParam.show=1;
net_c.trainFcn='traingd'; % kuna süsteem peab olema adaptiivne, siis
reaalajas toimiva närvivõrgu puhul sobib hästi.
net_c.trainParam.epochs=5000;
net_c=
train (net_c,P,T) % P - etalonsisend, T - etalonväljund
save temp_net.mat net_c % kui süsteem muutub mittestabiilseks (Liiga
suure häiringu tõttu näiteks) siis
%
load temp_net.mat net_c
Regulaator
function control =kontroller(u)
global net_c
inp=u(1:3);
error =u(4);
time=u(5);
control=sim(net_c,inp);
if time>10
net_c=adapt(net_c,inp,control+error);
end
4 Pilt 2. Adaptiivse kontrolleriga juhtimissüsteem.
Närvivõrgu treenimisalgoritmi ja peidetud kihi neuronite
aktiveerimisfunktsiooni valik
Valisin katseandmete vektori pikkuseks 101 elementi, kuna
katsetused näitasid, et palju
suurem
vektor ei anna olulist eelist aga näiteks poole väiksem vektor muutis regulaatori
palju ebatäpsemaks. Treenigusammude arvuks valisin 5000. Kuna sammude arvu
suurendamine olulist lisatäpsust ei andnud, siis sellest
piisab . Katsel toimub 200 sammu,
100-ndal sammul lisandub häiring 0,5.
Katsetuste tegemiseks valisin 15 neuronit peidetud kihis, mis esimestel katsetustel (tansig
ja traingd) osutus minimaalseks neuronite arvuks, et juhtimissüsteem
vastaks esitatud
kriteeriumitele.
5 Aktiveerimisfunktsioon tansig, treenimisalgoritm traingd:
Juhtimissüsteem vastab nõuetele:
Pilt 3. Aktiveerimisfunktsioon tansig, treenimisalgoritm traingd.
Aktiveerimisfunktsioon logsig, treenimisalgoritm traingd:
Ülereguleerimine on napilt piirides, reguleerimise aeg samuti väga napilt.
Pilt 4. Aktiveerimisfunktsioon logsig, treenimise
algoritm traingd.
6 Aktiveerimisfunktsioon tansig, treenimise algoritm trainlm
Algoritm trainlm on juba 100 tsükli järel saavutanud palju parema täpsuse kui traingd
samadel lähteandmetel 5000 tsükliga. Peale 1000 tsüklit täpsus eriti ei suurene.
Süsteem muutub ebastabiilseks, kuna meetod trainlm ei ole sobilik adaptiivse
juhtimissüsteemiga. Aktiveerimisfunktsiooni muutmine ei muuda seda olukorda, seega
logsig ei hakka katsetama.
Pilt 5
Parimaks osutub aktiveerimisfunktsioon tansig ja treenimise algoritm traingd.
Minimaalse neuronite arvu leidmine
See sõltub kindlasti ka treenimisest ja algandmete hulgast. Katsed viime läbi 5000
treeningtsükliga ja 101 elemendiga katseandmete vektoritega.
Proovime 10 neuroniga. Pilt on veel päris ilus, kui välja arvata üks koht (
step 130 paiku),
kus peale häiringut läheb ülereguleerimine üle 5%.
7 Pilt 6. tansig, traingd, 10 neuronit peidetud kihis.
Proovime 5 neuroniga. Pilt on ikka veel täitsa hea, aga reguleerimise aeg häiringu
kõrvaldamiseks läheb üle lubatud piiri (10td).
Pilt 7. tansig, traingd, 5 neuronit peidetud kihis.
8 Proovime 8 neuroniga. Ülereguleerimine jääb napilt lubatud
piiridesse , reguleerimise aeg
samuti. Seega on vastus käes. Selleks, et juhtimissüsteem vastaks seatud kriteeriumitele
on minimaalne neuronite arv peidetud kihis 8.
Pilt 8. Minimaalne neuronite arv (8).
Minimaalne lubatav sisend-väljundandmete vektorite pikkus
Selleks, et süsteem toimiks etteantud kriteeriumide alusel, ei ole võimalik katseandmeid
vähendada (8 neuroniga). Kuna kui seda teha, siis ei vasta süsteem enam kriteeriumitele.
Näiteks 51 elemendilise vektori korral on tulemus selline:
9 Pilt 9. Katseandmete vektor 51 elementi,
neuroneid 8.
Ka 6-elemendilise vektoriga on võimalik närvivõrku treenida ja see annab isegi mingi
tulemuse, mis suudab ka häiringuga toime tulla. Siiski väljaspool etteantud kriteeriume.
Pilt 10. Katseandmete vektor 6 elementi
10 Kaks elementi vektorites on minimaalne, millega saab närvivõrku treenida. Tulemus ei
ole just hea, aga kuidagimoodi isegi toimib.
Pilt 11. Katseandmete vektor 2 elementi.
11 Ülesanne 2
Ülesande täpsustamine
Luua süsteem, mis suudaks tuvastada etteantud vektorist kreeka tähti. Vektor antakse ette
näiteks pildi alusel,
jagades pildi piksliteks ja iga
piksli väärtus on vahemikus 0 .. 1, kus 0
tähistab valget ja 1 musta värvi. Ülejäänud väärtused 0 ja 1 vahel on hallskaala.
Lahendusmeetodite valik
Lahendan ülesande kahel meetodil. Mõlemad põhinevad närvivõrgul.
Esimene lahendus on supervised
learning , närvivõrgule antakse ette etalonväljund.
Teine lahendus on selflearning kus närvivõrk ise tuvastab sisendandmetest vastava hulga
erinevaid kombinatsioone.
Lahendusmeetodite realiseerimine
Esimese lahenduse realisatsioon
Fail kreeka_tahestik.m on antud. Sinna lisan lõppu targets maatriksi, mis on ühikmaatriks
suurusega 24. Järgmiseks loon närvivõrgu ja treenin selle. Närvivõrk etalonväljundiga on
tüüpi FF. Närvivõrku õpetatakse müraga (5%, 10%, 20%, 30%).
net=newff(minmax(greek_alphabet),'traingda')
net.trainParam.epochs=5000;
net.trainParam.show=25;
net.trainParam.min_grad=1e-12;
P=[greek_alphabet, greek_alphabet+randn(35,24)*0.05,... greek_alphabet+randn(35,24)*0.1,... greek_alphabet+randn(35,24)*0.2,... greek_alphabet+randn(35,24)*0.3,... ];
T=[targets targets targets targets targets ];
net=train(net,P,T)
Närvivõrgu peidetud kihi neuronite arvuks valin 12. 10 on liiga vähe, kuna 5000
õpetamistsükli järel ajab närvivõrk kaks tähte
segamini . Antud realisatsioon töötab 15%-
lise müra puhul suurepäraselt.
12 Teise lahenduse realisatsioon
Närvivõrgule antakse teada, et on vaja leida 24 erinevat
kombinatsiooni P maatriksi
hulgast. Õpetatakse samuti müraga nagu eelneva lahenduse puhul. Vajalik on 24 neuronit
(iga erineva tähe jaoks üks).
P=[greek_alphabet, greek_alphabet+randn(35,24)*0.05,... greek_alphabet+randn(35,24)*0.1,... greek_alphabet+randn(35,24)*0.2,... greek_alphabet+randn(35,24)*0.3,... ];
net_c=newc(minmax(greek_alphabet),24,0.01,0.00001) %0.01 learning
rate (kaalukoef muutumise kiirus), 0.00001, mida v2iksem, seda suurema t6en
jagunevad yhtlaselt
net_c.trainParam.epochs=100;
net_c.trainParam.show=1;
net_c=train(net_c,P)
Y=sim(net_c,greek_alphabet) %kontrollime, kas ei ole korduvaid väärtusi
Yc=vec2ind(Y)
Y = (11,1) 1 (23,2) 1 (22,3) 1 (21,4) 1 (16,5) 1 (15,6) 1 (3,7) 1 (13,8) 1 (6,9) 1 (14,10) 1 (9,11) 1 (17,12) 1 (7,13) 1 (24,14) 1 (4,15) 1 (18,16) 1 (8,17) 1 (2,18) 1 (20,19) 1 (5,20) 1 (12,21) 1 (1,22) 1 (10,23) 1 (19,24) 1
13 Katsete planeerimine ja realiseerimine ning lahendusmeetodite
võrdlus ja parima realisatsiooni valik
Testitakse mürakindlust . Müra sisestamiseks liidetakse tähtede maatriksile
samade dimensioonidega
random -genereeritud
maatriks , mis korrutatud läbi müra protsendiga
(näiteks 15% müra: 0.15). Tulemus simuleeritakse nävivõrgul ja vaadatakse, kas NN
tuvastas tähed õigesti.
Esimese lahenduse test:
test_data=greek_alphabet+randn(35,24)*0.15;
test=sim(net,test_data)
for i=1:24 m=max(test(:,i)); test_result(i)=
find (test(:,i)==m)
end
Teise lahenduse test:
Yc=vec2ind(Y) %võrdluseks
test_data2=greek_alphabet+randn(35,24)*0.32;
t=sim(net_c,test_data2);
test_out=vec2ind(t) %kontrollime, kas on sama mis Yc
Esimese lahenduse müraprotsendi piiriks jääb 20%. 21% müraga juba ajab segamini
tähed 7 ja 12 - Eta(H) ja Mu(M).
Teise lahenduse mürakindlus on 25%! Suurema müraga aetakse segamini tähed
Delta ja Lambda.
Osaliselt kaetud sümbolitega testimine
Selleks tekitasin "kattemaatriksi". Näiteks, on kaetud tähe alumine pikslirida:
cover = [1 1 1 1 1 ... 1 1 1 1 1 ... 1 1 1 1 1 ... 1 1 1 1 1 ... 1 1 1 1 1 ... 1 1 1 1 1 ... 0 0 0 0 0 ]';
cover_all = [cover, cover, cover, cover, cover, cover, cover, cover,
cover, cover,... cover, cover, cover, cover, cover, cover, cover, cover, cover,
cover, cover,... cover, cover, cover];
14 Realisatsioon1:
test_data=greek_alphabet.*cover_all
test=sim(net,test_data)
for i=1:24 m=max(test(:,i)); test_result(i)=find(test(:,i)==m)
end
Realisatsioon2:
test_data2=greek_alphabet.*cover_all
t=sim(net_c,test_data2);
test_out=vec2ind(t)
Selline olukord annab juba üsna vigaseid tulemusi mõlema lahenduskäigu puhul.
Katame ühe nurga:
cover = [1 1 1 1 1 ... 1 1 1 1 1 ... 1 1 1 1 1 ... 1 1 1 1 1 ... 1 1 1 1 0 ... 1 1 1 0 0 ... 1 1 0 0 0 ]';
jne sama tegevuskäik mis enne.
Ka see annab päris vigaseid tulemusi (test_out ja Yc peaksid olema võrdsed).
test_out = 11 8 22 21 8 15 8 8 6 14 21 17 7 8 22 22 8 22 20 5 12 1 10 19
Yc = 11 23 22 21 16 15 3 13 6 14 9 17 7 24 4 18 8 2 20 5 12 1 10 19
Katame väiksema nurga:
cover = [0 0 1 1 1 ... 0 1 1 1 1 ... 1 1 1 1 1 ... 1 1 1 1 1 ... 1 1 1 1 1 ... 1 1 1 1 1 ... 1 1 1 1 1 ]';
Realisatsioon1:
test_result = 1 2 3 4 6 6 7 8 9 10 11 12 13 14 8 16 17 6 19 20 21 22 23 24
Numbrid peaksid olema järjest 1-24. Esineb üsna mitu viga.
15 Realisatsioon2: SUCCSESS! Vigu ei esine!
test_out = 11 23 22 21 16 15 3 13 6 14 9 17 7 24 4 18 8 2 20 5 12 1 10 19
Yc = 11 23 22 21 16 15 3 13 6 14 9 17 7 24 4 18 8 2 20 5 12 1 10 19
Realisatsioon 2 puhul võib olla kaetud 3/35 pildist (8,5%), süsteem suudab tähe siiski
õigesti tuvastada. Proovisin ka lisaks ühte
suvalist pikslit
katta , kuid siis juba sain ühe
vigase tuvastuse 24-st.
Parimaks lahendusmeetodiks osutub ülaltoodu põhjal selflearning versioon. Ka
närvivõrgu treenimine on sellel juhtumil kiirem ja lihtsam.
16
Kõik kommentaarid