TEKNILLINEN KORKEAKOULU Systeemianalyysin laboratorio Mat-2.139 Optimointioppi Kimmo Berg 9. harjoitus - ratkaisut 1. a) Viivahakutehtävä pisteessä x suuntaan d on missä min f(x + λd), λ f(x + λd) = (x + λd) t H(x + λd)/2 + c t (x + λd) = (d t Hd)λ 2 /2 + (x t Hd + c t d)λ + vakio. Asettamalla derivaatta λ:n suhteen nollaksi saadaan minimi (huom f(x + λd) on konveksi): df(x + λd) = (d t Hd)λ + d t Hx + c t d = 0, dλ mistä tulee ratkaisuksi λ = (x t H + c t )d/(d t Hd) = f(x) t d/(d t Hd). b) Sekanttiehto matriisille D j+1 on D k+1 (x k+1 x k ) = f(x k+1 ) f(x k ). Laskemalla gradientit nähdään, että f(x k+1 ) f(x k ) = Hx k+1 + c Hx k c = H(x k+1 x k ). Tehtävässä H oletettiin positiividefiniitiksi, joten sekanttiyhtälö voidaan H:lle kirjoittaa muotoon x k+1 x k = H 1 [ f(x k+1 ) f(x k )]. 2. Malli: y = f(x, a) + ǫ, missä y on havaittu riippuva suure, x on riippumattomat muuttujat (vektori), a on estimoitavat parametrit (vektori), ja ǫ on satunnaiskomponentti (virhetermi). Mittausten y i, x i (i = 1,..., n) avulla voidaan annetuille parametreille laskea virheet ǫ i = y i f(x i, a). Nyt voidaan muodostaa epälineaarinen pienimmän neliösumman tehtävä: min a n ǫ 2 i = n [y i f(x i, a)] 2. a) Nyt x = x, a = (,, ) ja f = + x + x 2, n n min ǫ 2 i = (y i ( + x i + x 2 i ))2 = y [1.x.x 2 ] a Tehtävä saatiin siis muotoon min x A x b 2, missä A = ja b = y. 1 2 1 x 1.. x 2 1. 1 x n x 2 n, x =
Ratkaisu tälle tehtävälle saadaan yhtälöstä A A x = A b, josta tiettyjen oletusten vallitessa saadaan x = (A A) 1 A b (ks. laskuharjoitustehtävä 5/1). Sijoitetaan b = (2 2 12 27 60 90) ja A = 1 0 0 1 1 1 1 2 4 1 3 9 1 4 16 1 5 25 = x = 2.929 1.293 4.036. b) min i ǫ i = i y i ( + x i + x 2 i) Muunnetaan LP-ongelmaksi: min 6 ǫ i s.e. y i ( + x i + x 2 i ) ǫ i, i = 1,...,6 y i ( + x i + x 2 i) ǫ i, i = 1,...,6 ǫ i 0, i = 1,...,6,, rajoittamattomia, tai min 6 ǫ i + ǫ + i s.e. y i ( + x i + x 2 i ) + ǫ i ǫ + i = 0, i = 1,..., 6 ǫ i, ǫ+ i 0, i = 1,..., 6,, rajoittamattomia. Ratkaise tehtävät Excelin Solverilla (ks. excel-tiedosto kurssin webbisivulta; tehtävällä on kaksi ratkaisua: (2,0.6,-3.8) tai (2,3.4333,-4.3667)). c) min {max 1 i 6 { y i ( + x i + x 2 i) }}. Muunnetaan LP-ongelmaksi: min u s.e. y i ( + x i + x 2 i ) u, i = 1,...,6 y i ( + x i + x 2 i) u, i = 1,...,6, u 0,, rajoittamattomia 4.75 Ratkaisuksi saadaan = 0.5. 4 3. a) Tarkoitus on siis ratkoa optimointitehtävä min 7 ( x1 + y i x 2 + yi 2 x ) 2 3 b i, missä x j muuttujia, b i ja y i annettu data. Ratkaisu saadaan edellisen tehtävän malliin matriisilaskulla tai Matlabin lsqlin funktion avulla. 2
b) Ratkaistaan epälineaarinen tehtävä m ( ) min yi x 1 t i x 2 e x 3t i 2, missä x j muuttujia, y i ja t i annettu data. Ratkaisua voi hakea Matlabin lsqnonlin funktion avulla joko Levenberg-Marquardt tai Gauss-Newton menetelmällä. Tehtävä suppenee ainakin kahteen eri lokaaliin minimiin aloituspisteestä riippuen. Ks. kuva. 6 Urheilijan näytteet ja soviteet 5 4 konsentraatio y 3 2 1 0 0 1 2 3 4 5 6 7 8 9 10 11 aika t 4. Matlab luokittelee Optimization Toolboxissa funktiot minimointiin, yhtälönratkaisuun (fsolve) ja pienimmän neliösumman (PNS) tehtäviin. Minimointialgoritmeja löytyy rajoittamattomaan optimointiin (fminunc, joka käyttää gradientteja, ja fminsearch, joka käyttää konveksin tehtävän simplex algoritmia), lineaarisiin (LP) tehtäviin (linprog), kvadraattisiin (QP) tehtäviin (quadprog) ja rajoitettuun optimointiin (fmincon). Tehtävän luonne määrää pitkälti mitä funktiota kannattaa optimoinnissa käyttää. Funktioihin syötettävät argumentit ovat funktioriippuvaisia; yhteisiä argumentteja ovat vain kohdefunktio, alkuarvaus ja options. Huomattavaa on että funktiot palauttavat löydetyn pisteen lisäksi muuta optimoinnin kannalta mielenkiintoista tietoa, kunhan ne vain osaa poimia. Esimerkiksi [x,fval,exitflag,output,lambda,grad,hessian]=fmincon(...) palauttaa löydetyn pisteen kohdefunktion arvon (fval), gradientin (grad), Hessen matriisin (hessian), Lagrangen kertoimet (lambda) ja tietoa optimoinnista (output; iteraatioiden lukumäärän, funktion evaluontien lukumäärän, käytetyn algoritmin yms.). Tietoa iteroinnista saadaan lisäksi määrittelemällä output-funktio (plottauksia iteroinnin kuluessa ja muuta rekvisiittaa). Tällöin pitää options:iin kertoa 3
output-funktion nimi options=optimset( OutputFcn, omaoutput ) ja kirjoittaa kyseinen funktio function stop=omaoutput(x,optimvalues,state) %x on iter.piste,optimvalues.fval on funktion arvo x:ssä, %ks.myös.searchdirection,.iteration,.gradient,.lambda, yms. stop=[];%jos true, niin algoritmi pysähtyy, muutoin jatketaan optimointia switch state case init %setup for plots and guis case interrupt %check conditions to see whether optimization should quit case iter %make updates to plot or guis as needed case done %cleanup of plots, guis, or final plot otherwise Optimointifunktioon syötettävä options määrää mm. käytettävän algoritmin ja sen parametrit. Esim. options=optimset( Display, iter, MaxIter,100, MaxFunEvals,1000); näyttää tietoja optimoinnin kuluessa, rajoittaa iteraatioiden määrän sataan ja funktion evaluoinnit tuhanteen. Matlab evaluoi gradientin differenssiapproksimaation avulla. Jos taas gradientit halutaan laskea tarkasti, tulee gradientit (ja mahdollisesti Hessen matriisi) laskea kohdefunktiossa, eli esim. function [f,g,h]=funktio(x) f=... if nargout > 1 %jos funktion kutsuja pyytää kahta argumenttia g=... if nargout >2 %jos tarvitaan kolme argumenttia H=... Tämän lisäksi optimointifunktiolle tulee kertoa että gradientit olisi tarjolla, options=optimset( GradObj, on ). Samalla tavalla voidaan toimia epälineaaristen rajoitusehtojen kohdalla, function [c,ceq,gc,gceq]=funktio(x) ja options=optimset( GradConstr, on ). Vakiona Matlab käyttää rajoittamattomassa tehtävässä kvasi-newton menetelmää BFGS päivityksellä ja rajoitetussa tehtävässä toistettua kvadraattista ohjelmointia (SQP). Kvasi-Newton päivitystä voidaan kuitenkin muuttaa DFP:ksi tai jyrkimmän laskusuunnan menetelmäksi, options=optimset( HessUpdate, dfp ) (tai steepdesc ). Viivahaun menetelmiä ovat joko kuutiollinen (vakio kun gradientit tarkkoja) 4
tai neliöllis-kuutiollinen (vakio kun gradientit evaluoidaan), options=optimset( LineSearchType, cubicpoly ) (tai quadcubic ). 5. ip=konjgrad( f2a, df2a,[2;2]); figure x1=-1:0.05:2; x2=x1; vv=[-1.2-1 -0.5 0 1 3 5]; plotcon( ff2a,x1,x2,vv,ip ); 5