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(!)
Kuvitteellinen prosessi Staattinen vahvistus = 1
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
Populaatio 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);
Siirretään parhaimmat parametriyhdistelmät vasemmalle Komentoja: Sort(hyvyysvektori) Find(pienimmän arvon indeksi)
Säästetään ne parhaimmat ja lisätään niiden risteytykset ja/tai mutaatiot Sorry, crossover puuttuu vielä kokonaan... Ei ole ihan oppikirjan mukainen GA
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
Hyvyysarvot saadaan askelvasteesta
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)
Valitaan taas se paras käyrä, tosin ei aina niin helppoa
Yritetään valita pois ne vasteet, joissa on eniten sitä ärsyttävää undershoottia...
Miten dataa pitäisi tulkita? Ovatko keskiarvot nyt ne optimaaliset? 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 2.5956 3.9824 2.3048
No kokeillaan! (Ei ihan riittänyt undershootin eliminoimiseen, tarvittaisiin ehkä vähän enemmän training-data yritteitä kuin 4 ?) Eli nyt ollaan opetettu GA:lle että vasteet tulee olla tämännäköiset. Ei kuitenkaan saisi vaikuttaa PID-parametrien hyvyyteen.
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...
To be continued...