210 likes | 319 Vues
PID-säätimen parametrien optimointi GA:lla. (Oma projekti/harjoitustyö). Alkuperäinen prosessi. Toimiiko GA? Näyttää ainakin lupaavalta Johtunee siitä, että k.o. säätöongelma on liian yksin-kertainen... ...lisäksi voi ihan randomillakin saada hyviä tuloksia(!).
E N D
PID-säätimen parametrien optimointi GA:lla (Oma projekti/harjoitustyö)
Toimiiko GA? Näyttää ainakin lupaavalta Johtunee siitä, että k.o. säätöongelma on liian yksin-kertainen... ...lisäksi voi ihan randomillakin saada hyviä tuloksia(!)
Perus-PID:n toteutus Matlabin työpöydällä Laplace-muodossa • Gsys=tf(1,[1 2 3 1]); % prosessi • Gpid=tf([Ti(i)*Td(i) Ti(i) 1],[Ti(i) 0]); % säädin • Golt=Gsys*Gtype; % total system Open loop • Gcl=feedback(Kp(i)*Golt,1); % Closed loop • step(Gcl) % Piirtää askelvasteen • info=stepinfo(Gcl) % Purkaa hyvyysarvot askelvasteesta (struct)
Heti hankalampi tapaus, undershoottia esiintyy vaikka väkisin
P =(20*rand(1,length)+0.001).*(rand(1,length)+0.001).*(rand(1,length)+0.001); I =(10*rand(1,length)+0.001).*(rand(1,length)+0.001).*(rand(1,length)+0.001); D =(10*rand(1,length)+0.001).*(rand(1,length)+0.001).*(rand(1,length)+0.001); Populaatio
Sorry, crossover puuttuu vielä kokonaan... Ei ole ihan oppikirjan mukainen GA Säästetään ne parhaimmat ja lisätään niiden risteytykset ja/tai mutaatiot
Ongelmia... • Crossover: geenien vaihto ja rulettivalinta • P, I ja D riippuvaisia toisistaan => Ei voida useamman optimointikerran jälkeen yksinkertaisesti olettaa kromosomien (vastaavien parametrien) keskiarvojen olevan ne ”optimaaliset”. Pitäisi ehkä huomioida geenien väliset suhteet esim. P:I:D 1:0.9:0.6 tai P/I, P/D, I/D ja sovittaa sopivat vakiot • Hyvyysfunktion painoarvojen valinta
Hyvyysfunktio Halutaan siis minimoida kaikki hyvyysarvot. Summataan ne yhteen eri painoarvoilla, esim. 1*Risetime+2*Overshoot+3*Undershoot+ 1.5*Settlingtime Pienin summa = paras parametriyhdistelmä Parametrit riippuvaisia toisistaan?
Peruskriteerit täyttävät askelvasteet • Liikaa undershoottia! => säädetään painoarvo suuremmaksi • GA:lle pitää opettaa millainen vaste on ”hyvä” vaste – toinen GA?
Hyvyysfunktio ”GA”valitaan se vaste, joka näyttää parhaimmalta (training data)
Eli kaikilla vasteilla on nyt samat PID-parametrit, mutta eri hyvyysfunktion painoarvot (random)
Yritetään valita pois ne vasteet, joissa on eniten sitä ärsyttävää undershoottia...
Parameter_R = 0.9364 1.3335 0.7735 1.5160 Parameter_S = 0.8356 4.7717 2.3711 2.4042 Parameter_O = 6.0054 5.8083 1.7413 2.3746 Parameter_U = 0.6490 2.4100 0.9179 5.2424 keskiarvo = 1.1399 keskiarvo = 2.5956 keskiarvo = 3.9824 keskiarvo = 2.3048 Miten dataa pitäisi tulkita? Ovatko keskiarvot nyt ne optimaaliset?
Eli nyt ollaan opetettu GA:lle että vasteet tulee olla tämännäköiset. Ei kuitenkaan saisi vaikuttaa PID-parametrien hyvyyteen. No kokeillaan!(Ei ihan riittänyt undershootin eliminoimiseen, tarvittaisiin ehkä vähän enemmän training-data yritteitä kuin 4 ?)
Miten voidaan parantaa? • Suurempi elitismi, vähemmän uusia satunnais-kromosomeja • Palikkahypoteesi saattaa olla se toimivin => • Crossover eliittien välillä rulettivalinta-periaatteella, suurimmat todennäköisyydet niille parhaimmille (vasemmassa laidassa) • Iteraatioiden edetessä kasvava mutatointiarvo (ja todennäköisyys?). Etsitään tällä tavalla parempia arvoja optimin lähistöllä • Miten ne alan ”gurut” ovat tätä toteuttaneet? Googlaamalla löytää vaikka kuinka paljon...