440 likes | 774 Views
P redavanje. Predmet Metodi optimizacije. Tema Statička optimizacija, numeričke metode višedimenzione optimizacije. 20 11 godina. Univerzitet u Novom Sadu , Fakultet tehničkih nauka , Katedra za Automatiku i upravljanje sistemima. Statička optimizacija, višedimenziona optimizacija.
E N D
Predavanje Predmet Metodi optimizacije Tema Statička optimizacija, numeričke metode višedimenzione optimizacije 2011 godina Univerzitet u Novom Sadu, Fakultet tehničkih nauka, Katedra za Automatiku i upravljanje sistemima
Statička optimizacija, višedimenziona optimizacija Višedimeziona optimizacija Numeričko rešavanje Analitičko rešavanje Indirektne metode Metode direktnog pretraživanja
Metode direktnog pretraživanja Osnovna ideja ovih metoda Odrediti tačku (ili tačke) u kojima funkcija ima optimalnu vrednost bez korišćenja izvoda funkcije • Hook - Jeves - ova metoda • Nelder - Mead - ova metoda • Powell - ova metoda
Hook – Jeeves - ova metoda • Koraci:1. Pretraživanje po koordinatnim osama2. Skok3. Pretraživanje u okolini skoka
Hook – Jeeves - ova metoda Pretraživanje po koordinatnim osama Početna tačka Pretražuje se po pravcimaDolazi se do tekuće tačke ti
Hook – Jeeves - ova metoda Skok • Nakon pretraživanja po n pravaca dobijamo tačku tn • Iz ove tačke vršimo skok i dobijamo tačku tB • Ako skok ne uspe – KRAJ ITERACIJE!
Hook – Jeeves - ova metoda Pretraživanje u okolini skoka • Novu baznu tačku dobijamo pretraživanjem po koordinatnim osama u okolini skoka (tačke tB) • Ceo postupak se ponavlja dok ima poboljšanja po pravcima di ; u suprotnom smanjujemo l • Kriterijum zaustavljanja l<e
d2 d1 Hook – Jeeves - ova metoda Grafički prikaz osnova metode Pretraživanje u pozitivnom smeru ose d2 USPEŠNO Skok USPEŠAN Pretraživanje u okolini skoka USPEŠNO KRAJ ITERACIJE!!! Pretraživanje u pozitivnom smeru ose d1 NEUSPEŠNO Pretraživanje u negativnom smeru ose d1 USPEŠNO
function [x, f, cnt] = HookJeev( fun, x0, d, dmin ) % Metoda HOOK-JEEVES za minimizaciju f-je više promenljivih bez ograničenja % fun - funkcija cilja % x0 - početno pogađanje; d - početni korak; dmin - krajnja dužina koraka (uslov zaustavljanja) % x - izračunat minimum; f - vrednost u minimumu; cnt - broj poziva fun n = length(x0); % broj promenljivih e = eye(n) * d; % pravci kretanja - ose x = x0; f = feval(fun,x); % prva bazna tačka cnt = 1; % broj izračunavanja f-je cilja while e(1,1) > dmin % glavna petlja (traje dok je korak veći od dmin) t = x; % tekuća tačka for i=1:n % po svim promenljivim (po svim osama) % pozitivan smer z = t + e(:,i); y = feval(fun,z); cnt=cnt+1; if y < f t = z; f = y; % prihvata se (“-“ smer se onda ne razmatra) else % negativan smer z = t - e(:,i); y = feval(fun,z); cnt=cnt+1; if y < f t = z; f = y; % prihvata se end end end% ako oba smera “ne uspeju” uzima se sledeća osa
if all(t==x) % tekuća tačka se nije pomerila iz bazne tačke... e = e * 0.5; % te se smanjuje korak else % skok u pravcu “spuštanja terena” - probam x1 = t + (t-x); y1 = feval(fun,x1); cnt=cnt+1; x = t; % x=nova bazna tačka, ako skok ne uspe if y1 < f % skok delimično uspeo, još se traži prva tačka u okolini x1 gde je f(z) manje nego u tački x for i=1:n % po svim koordinatama % pozitivan smer z = x1 + e(:,i); y = feval(fun,z); cnt=cnt+1; if y < y1 x = z; f = y; break; % bingo, nova bazna tačka, iskačem iz for petlje end % negativan smer (ovde se ne stiže ako “uspe pozitivan smer”) z = x1 - e(:,i); y = feval(fun,z); cnt=cnt+1; if y < y1 x = z; f = y; break; % bingo, imam baznu tačku end end% ako ni jedan od pravaca (osa) ne daje bolje... % rešenje od tačke x, ona postaje nova bazna tačka end end end % kraj glavne petlje.
Primer Pretraživanje po pravcima Hook-Jeeves - ovom metodom polazeći iz tačke (0,0) odrediti minimum funkcije
Primer Skok Pretraživanje u okolini skoka
Primer • Izgled funkcije
Primer 2 • Traženje minimuma funkcije f = 2x12 + x22 –3 iz početne tačke (-2,-2) • Izgled funkcije
Primer 2 Skok NEUSPEŠAN, KRAJ ITERACIJE i KRAJ PRETRAGE! Pretraživanje po x1 + NEUSPEŠNO Pretraživanje po x1 + Skok NEUSPEŠAN, KRAJ ITERACIJE! Pretraživanje po x2 + Skok Pretraživanje po x1 + Pretraživanje po x2 + Pretraživanje u okolini skoka KRAJ 1. ITERACIJE! Početna tačka Pretraživanje po x2 +
Nelder – Mead – ova metoda • Formira se geometrijsko telo – Simplex sa n+1 temena, n je dimenzionalnost problema • Uoče se temena sa najmanjom vrednošću funkcije VL i najvećom VH • Simplex se pomera u prostoru pomoću osnovnih transformacija dok se ne pronađe najbolje rešenje
Nelder – Mead – ova metoda • Osnovne transformacije su:Refleksija EkspanzijaKontrakcijaSkupljanje
Start Odredi se početni Simplex Nađe se najgora tačka vh i odredi težište ostatka vbar Refleksija vr=vbar+alfa*(vbar-vh) yr=f(vr) ne ne ne yr<yl vh=vr yr<yh-1 yr>yh da da da Ekspanzija Kontrakcija ve= vbar+gama*(vbar-vh) vc= vbar+beta*(vh-vbar) ye=f(ve) yc=f(vc) ne da ye<yl yc>yh da vh=vr ne Skupljanje v=(v+vl)/2 vh=ve vh=vc Test kraja ne da min=vl Kraj? Stop
function [x,fx,cnt] = NeldMead(fun,x,xtol,ftol,maxit) % Nelder-Mead alg. minimizacije f-je vise promenljivih bez ograničenja % fun - ime funkcije f(x) % x - početna tačka % xtol, ftol, maxit - kriterijumi zaustavljanja n = prod(size(x)); % broj promenljivih maxit = maxit*n; % maksimlno dozvoljen broj računanja f-je % Postavljanje početnog simplex-a xin = x(:); % xin je vektor kolona v = xin; fv = feval(fun,v); % prvo teme i vrednost f-je u temenu for j = 1:n % dodatnih N temena (ne smeju se poklapati) y = xin; if y(j) ~= 0 y(j) = 1.05*y(j); % pomeranje j-te koordinate za 5% else% ili y(j) = 0.00025; % npr. 0.00025 (po preporuci iz lit.) end v = [v y]; % dodaj teme (vertex) fv = [fv feval(fun,y)]; % i vrednost f-je u temenu end% dimenzija v=(n) x (n+1) [fv,j] = sort(fv); % sortiranje temena prema vrednosti f-je u njima v = v(:,j); % rasporedi temena: 1. je najniže,... N+1. najvišlje cnt = n+1; % broj poziva f-je
alpha = 1; beta = 1/2; gamma = 2; onesn = ones(1,n); ot = 2:n+1; % sva temena bez najnižeg on = 1:n; % sva temena, bez najvišljeg - koje treba pomeriti % radi dok dijametar simplex-a ne bude manji od xtol ili razlika vrednosti f-je u temenima manja od ftol % ili dok broj izračunavanja f-je ne premaši maxit while cnt < maxit % glavna petlja if max(max(abs(v(:,ot)-v(:,onesn)))) <= xtol & ... max(abs(fv(1)-fv(ot))) <= ftol break% prekid petlje end % korak Nelder-Mead simplex algoritma vbar = (sum(v(:,on)')/n)'; % težište (ne računa se najvišlje teme) vr = (1+alpha)*vbar - alpha*v(:,n+1); % refleksija (uvek se proba) fr = feval(fun,vr); cnt = cnt+1; vk = vr; fk = fr; if fr < fv(n) % nova tačka ispod do-najvišlje tačke? if fr < fv(1) % nova tačka je ispod najniže? ve = gamma*vr + (1-gamma)*vbar; % ekspanzija - proba fe = feval(fun,ve); cnt = cnt+1; if fe < fv(1) % i posle ekspanzije imam još nižu tačku? vk = ve; fk = fe; % ekspanzija usvojena end end% ako reflektovana tačka nije najniža, a niža je od do-najvišlje, usvaja se
else% reflektovana tačka nije bolja od do-najvišlje vt = v(:,n+1); ft = fv(n+1); % najvišlja tačka (teme) if fr < ft % refl. tačka se poredi sa najvišljom ... vt = vr; ft = fr; % i za sada zamenjuje najvišlju end vc = beta*vt + (1-beta)*vbar; % kontrakcija - proba fc = feval(fun,vc); cnt = cnt+1; if fc < fv(n) % test kontrakcije vk = vc; fk = fc; % kontrakcija uspela else % ni refleksina ni kontrakcija ne daju nizu tačku od najvišlje for j = 2:n % polovljenje, najniže teme je i dalje 1. % moraju se izračunati nova temena simplex-a i vrednosti f-je u njima v(:,j) = (v(:,1) + v(:,j))/2; fv(j) = feval(fun,v(:,j)); end vk = (v(:,1) + v(:,n+1))/2; % najvišlje teme je izdvojeno zbog progr. rešenja fk = feval(fun,vk); cnt = cnt+n; end end v(:,n+1) = vk; % zamena temena sa max. vrednosti fv(n+1) = fk; [fv,j] = sort(fv); % ponovo sortiranje v = v(:,j); end% kraj glavne petlje
x(:) = v(:,1); % epilog fx = fv(1); if cnt == maxit disp(['Upozorenje: Maksimalan broj iteracija (', ... int2str(maxit),') je premasen']); end
Primer 1 VH Ekspanzija Refleksija VL Tekući simplex Kontrakcija Skupljanje
Primer 2 • Traženje minimuma funkcije f = 2x12 + x22 –3 iz početne tačke (-2,-2) • Izgled funkcije
Primer 2 Ekspanzija ve = -1.8000 = -2 + 2(-2+2.1) -2.1500 = -2.05 + 2(-2.05+2) fe = 8.1025 fe < fv(1) – uspela ekspanzija Inicijalni simplex v = -2.0000 -2.0000 -2.1000 -2.0000 -2.1000 -2.0000 fv = 9.0000 9.4100 9.8200 Iteracija 1. Težiste vt= -2.0000 = (-2-2)/2 -2.0500 = (-2-2.1)/2 • Zamenjujem maksimum • v = • -2.0000 -2.0000 -1.8000 • -2.0000 -2.1000 -2.1500 • fv = • 9.0000 9.4100 8.1025 • Sortiram temena simplex-a • v = • -1.8000 -2.0000 -2.0000 • -2.1500 -2.0000 -2.1000 • Refleksija • vr = • -1.9000 = -2 + 1(-2+2.1) • -2.1000 = -2.05 +1 (-2.05+2) • fr = • 8.6300 • fr < fv(1), uspela refleksija
Powell – ova metoda • Na početku su poznati: • Početno pogađanje x0 • Početni pravci: ui(0), i=1,2,…n koji se obično poklapaju sa osama • kriterijum zaustavljanja • U svakoj iteraciji se vrši: • n+1 pretraga po pravcima (konjugovanim vektorima) sa optimalnim, a ne fiksnim korakom • jedan od konjugovanih vektora se zamenjuje novim
e 2 e 2 u v x 2 2 e u 1 x x 0 1 e Powell – ova metoda Pretraga po novom pravcu v KRAJ ITERACIJE Pretraga po e2 Pretraga po novom pravcu u KRAJ ITERACIJE Pretraga po u Pretraga po e2 Početna tačka Pretraga po e1
function [x,f,it]=Powell(fun,x0,epsilon) % Metoda Powell za minimizaciju f-je vise promenljivih bez ogranicenja % fun - funkcija cilja % x0 - pocetno pogadjanje % epsilon - uslov zaustavljanja n = length(x0); % broj promenljivih u = eye(n); % početni “konjugovani pravci” x = x0; x1 = x0+2*epsilon; % x1 je vrednost iz predhodne iteracije it = 0; % broj iteracija while max(abs(x-x1)) > epsilon it = it+1; ti = x; % tekuća tačka for i = 1:n % pos svim pravcima teta = parabola(fun,u(:,i),ti,epsilon); % linijska pretraga ti = ti + teta*u(:,i); % pomeranje u minimum na pravcu end u = [u(:,2:n) ti-x]; % prvi vektor ispada i dodaje se novi x1 = x; teta = parabola(fun,u(:,n),ti,epsilon); % n+1. pretraga, (umesto ti može x1) x = ti + teta*u(:,n); % minimum, (umesto ti može x1) end f = feval(fun,x);
Primer Powell-ovom metodom polazeći iz tačke (0,0) odrediti minimum funkcije 1. iteracija: pretraživanje po pravcu u1:
pretraživanje po pravcu u2: Primer pretraživanje po novom pravcu u3:
Primer Izgled funkcije
Primer Početna tačka Pretraga po x1 Pretraga po novom pravcu u KRAJ ITERACIJE Pretraga po x2 TAČNO rešenje posle dve iteracije, funkcija je kvadratna forma!
Primer 2 • Odrediti minimum funkcije f(x1,x2) = (x1-2)^4 + (x1-2)^2 * x2^2 + (x2+1)^2 Powell-ovom metodom polazeći iz tačke [2.9 , 0.9] Izgled funkcije
Metode promeljive metrike • Matrica H(xk)-1se aproksimira sa H’(xk)-1 • i u svakoj iteraciji koriguje za H’(xk)-1 H’(xk+1)-1 = H’(xk)-1 + H’(xk)-1 • početna vrednost H’(0)-1 = I • xk+1 = xk +k ·sk sk = – H’(xk)-1 ·f(xk) Računanje H’(xk)-1 odredjuje metod promenljive metrike • Broyden • Davidon-Fletcher-Powell (DFP) • Broyden-Fletcher-Goldfarb-Shanno (BFGS) • …
Broyden, DFP i BFGS metode • Broyden • DFP • BFGS