Demo 1: Sisä- ja ulkopistemenetelmät



Samankaltaiset tiedostot
. Kun p = 1, jono suppenee raja-arvoon 1. Jos p = 2, jono hajaantuu. Jono suppenee siis lineaarisesti. Vastaavasti jonolle r k+1 = r k, suhde on r k+1

Demo 1: Simplex-menetelmä

TEKNILLINEN KORKEAKOULU Systeemianalyysin laboratorio. Kimmo Berg. Mat Optimointioppi. 9. harjoitus - ratkaisut

Luento 11: Rajoitusehdot. Ulkopistemenetelmät

Harjoitus 4: Matlab - Optimization Toolbox

Harjoitus 9: Optimointi I (Matlab)

Matriisit ovat matlabin perustietotyyppejä. Yksinkertaisimmillaan voimme esitellä ja tallentaa 1x1 vektorin seuraavasti: >> a = 9.81 a = 9.

Tässä dokumentissa on ensimmäisten harjoitusten malliratkaisut MATLABskripteinä. Voit kokeilla itse niiden ajamista ja toimintaa MATLABissa.

Harjoitus 9: Optimointi I (Matlab)

MS-A0204 Differentiaali- ja integraalilaskenta 2 (ELEC2) Luento 7: Pienimmän neliösumman menetelmä ja Newtonin menetelmä.

Harjoitus 1: Matlab. Harjoitus 1: Matlab. Mat Sovelletun matematiikan tietokonetyöt 1. Syksy 2006

Luento 10: Optimointitehtävien numeerinen ratkaiseminen; optimointi ilman rajoitusehtoja

MS-A0003/A0005 Matriisilaskenta Laskuharjoitus 1 / vko 44

Kimppu-suodatus-menetelmä

Numeeriset menetelmät

Talousmatematiikan perusteet: Luento 14. Rajoittamaton optimointi Hessen matriisi Ominaisarvot Ääriarvon laadun tarkastelu

Osakesalkun optimointi. Anni Halkola Turun yliopisto 2016

Matriisilaskenta Laskuharjoitus 1 - Ratkaisut / vko 37

Matematiikan tukikurssi, kurssikerta 3

Talousmatematiikan perusteet: Luento 13. Rajoittamaton optimointi Hessen matriisi Ominaisarvot ja vektorit Ääriarvon laadun tarkastelu

plot(f(x), x=-5..5, y= )

Kun yhtälöä ei voi ratkaista tarkasti (esim yhtälölle x-sinx = 1 ei ole tarkkaa ratkaisua), voidaan sille etsiä likiarvo.

mlnonlinequ, Epälineaariset yhtälöt

Matematiikan tukikurssi

Malliratkaisut Demot

Harjoitus 7 -- Ratkaisut

Kuva 1: Funktion f tasa-arvokäyriä. Ratkaisu. Suurin kasvunopeus on gradientin suuntaan. 6x 0,2

Mapu 1. Laskuharjoitus 3, Tehtävä 1

Matriiseista. Emmi Koljonen

mlvektori 1. Muista, että Jacobin matriisi koostuu vektori- tai skalaariarvoisen funktion F ensimmäisistä

Zeon PDF Driver Trial

Matematiikan tukikurssi

Numeeriset menetelmät

MATEMATIIKAN KOE PITKÄ OPPIMÄÄRÄ Merkitään f(x) =x 3 x. Laske a) f( 2), b) f (3) ja c) YLIOPPILASTUTKINTO- LAUTAKUNTA

MS-A0204 Differentiaali- ja integraalilaskenta 2 (ELEC2) Luento 6: Ääriarvojen luokittelu. Lagrangen kertojat.

Derivaatan sovellukset (ääriarvotehtävät ym.)

Malliratkaisut Demot

Malliratkaisut Demo 1

BM20A5840 Usean muuttujan funktiot ja sarjat Harjoitus 7, Kevät 2018

, on säännöllinen 2-ulotteinen pinta. Määrää T x0 pisteessä x 0 = (0, 1, 1).

Piiri K 1 K 2 K 3 K 4 R R

Talousmatematiikan perusteet: Luento 15. Rajoitettu optimointi Lagrangen menetelmä Lagrangen kerroin ja varjohinta

Epälineaaristen pienimmän neliösumman tehtävien ratkaiseminen numeerisilla optimointimenetelmillä

12. Hessen matriisi. Ääriarvoteoriaa

Lineaarinen optimointi. Harjoitus 6-7, Olkoon A R m n, x, c R ja b R m. Osoita, että LP-tehtävän. c T x = min!

Optimaalisuusehdot. Yleinen minimointitehtävä (NLP): min f(x) kun g i (x) 0 h j (x) = 0

Numeeriset menetelmät

Luento 9: Newtonin iteraation sovellus: optimointiongelma

Malliratkaisut Demo 4

4 Yleinen potenssifunktio ja polynomifunktio

TEKNILLINEN TIEDEKUNTA, MATEMATIIKAN JAOS

n. asteen polynomilla on enintään n nollakohtaa ja enintään n - 1 ääriarvokohtaa.

Luento 8: Epälineaarinen optimointi

Johdatus tekoälyn taustalla olevaan matematiikkaan

Matematiikan tukikurssi

min x x2 2 x 1 + x 2 1 = 0 (1) 2x1 1, h = f = 4x 2 2x1 + v = 0 4x 2 + v = 0 min x x3 2 x1 = ± v/3 = ±a x 2 = ± v/3 = ±a, a > 0 0 6x 2

MS-A0207 Differentiaali- ja integraalilaskenta 2 (Chem) Yhteenveto, osa I

Matemaattisen analyysin tukikurssi

Hannu Mäkiö. kertolasku * jakolasku / potenssiin korotus ^ Syöte Geogebran vastaus

Differentiaali- ja integraalilaskenta 2 Laskuharjoitus 4 / vko 40

MS-A0107 Differentiaali- ja integraalilaskenta 1 (CHEM)

Harjoitus 3 ( )

Juuri 12 Tehtävien ratkaisut Kustannusosakeyhtiö Otava päivitetty

MS-A0205/MS-A0206 Differentiaali- ja integraalilaskenta 2 Luento 8: Newtonin iteraatio. Taso- ja avaruusintegraalit

Malliratkaisut Demot

Harjoitus 10: Mathematica

1 Kertaus. Lineaarinen optimointitehtävä on muotoa:

Luento 9: Yhtälörajoitukset optimoinnissa

Harjoitus 8: Excel - Optimointi

Harjoitus 3 ( )

Oletetaan ensin, että tangenttitaso on olemassa. Nyt pinnalla S on koordinaattiesitys ψ, jolle pätee että kaikilla x V U

Matematiikan tukikurssi

Ellipsoidimenetelmä. Samuli Leppänen Kokonaislukuoptimointi. S ysteemianalyysin Laboratorio

Numeerinen analyysi Harjoitus 3 / Kevät 2017

Malliratkaisut Demo 4

Luento 8: Epälineaarinen optimointi

Keskeiset tulokset heikko duaalisuus (duaaliaukko, 6.2.1) vahva duaalisuus (6.2.4) satulapisteominaisuus (6.2.5) yhteys KKT ehtoihin (6.2.

Este- ja sakkofunktiomenetelmät

Matematiikan tukikurssi

2 Osittaisderivaattojen sovelluksia

FUNKTION KUVAAJAN PIIRTÄMINEN

Reaalilukuvälit, leikkaus ja unioni (1/2)

BM20A5840 Usean muuttujan funktiot ja sarjat Harjoitus 1, Kevät 2018

f(x, y) = x 2 y 2 f(0, t) = t 2 < 0 < t 2 = f(t, 0) kaikilla t 0.

Kirjallisuuskatsaus sisäpistemenetelmiin ja niiden soveltamiseen eri optimointiluokille (valmiin työn esittely)

PRELIMINÄÄRIKOE PITKÄ MATEMATIIKKA

Juuri 12 Tehtävien ratkaisut Kustannusosakeyhtiö Otava päivitetty

1. Lineaarinen optimointi

Harjoitus 6 ( )

Matematiikan tukikurssi

Harjoitus 6 ( )

Osakesalkun optimointi

Vektorianalyysi II (MAT21020), syksy 2018

z 1+i (a) f (z) = 3z 4 5z 3 + 2z (b) f (z) = z 4z + 1 f (z) = 12z 3 15z 2 + 2

Lineaarinen optimointitehtävä

TIES592 Monitavoiteoptimointi ja teollisten prosessien hallinta. Yliassistentti Jussi Hakanen syksy 2010

MAA Jussi Tyni Lue ohjeet huolellisesti! Tee pisteytysruudukko konseptin yläkertaan. Muista kirjoittaa nimesi. Kysymyspaperin saa pitää.

Demo 1: Excelin Solver -liitännäinen

Numeeriset menetelmät TIEA381. Luento 8. Kirsi Valjus. Jyväskylän yliopisto. Luento 8 () Numeeriset menetelmät / 35

jakokulmassa x 4 x 8 x 3x

Transkriptio:

Mat-2.2105 Optimoinnin perusteet Malliratkaisut 11 Ehtamo Demo 1: Sisä- ja ulkopistemenetelmät a) Ratkaise tehtävä min (x 1 2) 4 + (x 1 2x 2 ) 2 s.e. x 2 = x 2 1 käyttäen kvadraattista ulkopuolista sakkofunktiota. Tarkastele miten sakkoparametrin kasvatusnopeus vaikuttaa iteraation suppenemiseen. b) Ratkaise tehtävä min (x 1 2) 4 + (x 1 2x 2 ) 2 käyttäen estefunktiota s.e. x 2 x 2 1 1 g(x), missä g(x) 0. Tarkastele esteparametrin vaikutusta iteraation suppenemiseen. Ratkaisu a) Rajoitetun tehtävän ratkaiseminen numeerisesti on usein hankalaa. Yksi menetelmä tällaisen tehtävän ratkaisemiseksi on käyttää sakkofunktiota. Menetelmässä kohdefunktioon f(x) lisätään sakkotermi p(x), joka on lähellä nollaa kun rajoitteet ovat voimassa. Vastaavasti kun rajoitteet eivät ole voimassa, sakkotermin arvo on suuri. Jos tehtävän rajoite on muotoa h(x) = 0, voidaan sakkotermiksi valita esimerkiksi p(x) = µh(x) 2 Kerrointa µ kutsutaan sakkokertoimeksi. Mitä suurempi sakkokertoimen arvo on, sitä paremmin tehtävä vastaa alkuperäistä rajoitettua optimointitehtävää. Nyt kaikki funkion h(x) poikkeamat nollasta aiheuttavat suuren laskun kohdefunktion arvoon. Huomaa. Maksimoitaessa valitaan vastaavasti p(x) = µh(x) 1

1.5 1 x2 0.5 0 0 0.5 1 1.5 2 2.5 x 1 Ratkaistaan tehtävä aluksi sakkoparametrin arvolla µ = 0.1. Tällöin sakkofunktion vaikutus on lähes olematon, ja tehtävän ratkaisuksi saadaan piste (2, 1). Piste on merkitty kuvaan punaisella rastilla. Kerrotaan sakkoparametri 10:llä, käytetään edellistä pistettä alkuarvauksena, ja ratkaistaan tehtävä uudestaan. Nyt sakkotermin vaikutus on suurempi ja tehtävän optimi on lähempänä rajoitussuoraa. Näin jatkamalla saadaan kuvan ympyröillä merkityt pisteet. Iteraatio suppenee rajoitekäyrältä löytyvään pisteeseen, joka on likimain (0, 9; 0, 9). Miksi sakkoparametrille ei anneta heti suurta arvoa? Seuraavaan kuvaan on piirretty kohdefunktion f(x) + p(x) = f(x) + µh(x) vakiokäyriä kun µ = 10. Vakiokäyrät muodostavat kapean laakson. Edellisissä laskuharjoituksissa todettiin, että tämänkaltainen kohdefunktio on monille optimointimenetelmille haastava. Kasvattamalla parametriä hitaasti laakson pitkulaisuus ei haittaa, sillä osatehtävien aloituspisteet saadaan valmiiksi lähelle optimia. 2

1.5 1 0.5 0 0 0.5 1 1.5 2 2.5 b) Estefunktiomenetelmä on vastaava kuin sakkofunktiomenetelmä, mutta sitä sovelletaan epäyhtälörajoitteellisiin tehtäviin. Estefunktion tulee olla sellainen, että kun tarkasteltava piste on lähellä rajoitetun alueen reunaa, estefunktion arvo kasvaa reunan suuntaan voimakkaasti. Eräs mahdollinen estefunktio on p(x) = µ/g(x), missä g(x) on rajoitefunktio ja µ on esteparametri. 3 2.5 2 x2 1.5 1 0.5 0 0 0.5 1 1.5 2 2.5 x 1 Valitaan aluksi µ = 100. Piste on merkitty kuvaan punaisella rastilla. Estefunktion vaikutus on suuri, jolloin optimi on kaukana rajoitteen reunasta. Pienennetään kerrointa kymmenesosaan ja ratkaistaan tehtävä uudestaan, jolloin saadaan ympyröillä 3

merkityt pisteet. Iteraatio suppenee rajoitusehdon reunalta löytyvään pisteeseen, joka on likimäärin (0, 9; 0, 9). Miksi esteparametriä ei laiteta heti aluksi hyvin pieneksi? Samoin kuin sakkofunktiomenetelmä, liian pienet esteparametrien arvot vaikeuttavat osatehtävien numeerista ratkaisua. Kun esteparametri on hyvin pieni, estefunktion arvo on likimain nolla. Poikkeuksena tähän kuitenkin alueen reunalla estefunktion arvo kasvaa kohti ääretöntä riippumatta parametrin suuruudesta. Jos nousu on liian äkillinen ja jyrkkä, saattaa optimointialgoritmi hypätä estefunktion toiselle puolelle. Seuraavassa kuvassa näemme tehtävän kohdefunktion ja estefunktion arvot x 1 :n funktiona kun muuttuja x 2 on kiinnitetty arvoon 1 ja esteparametrille on annettu arvo µ = 1. Käypä alue on punaisen katkoviivan vasemmalla puolella. Optimi löytyy likimain pisteestä x 1 = 0, 8. Kun sakkoparametriä pienennetään, optimi siirtyy lähemmäksi alueen reunaa. Huomaa. Jos optimointialgoritmi joutuu käyvän alueen ulkopuolelle, saattaa algoritmi päätyä rajoittamattoman tehtävän optimiin. Näin ei kuitenkaan välttämättä käy, jos piste on vain hieman epäkäyvän alueen puolella. Estefunktio saa suuria negatiivisia arvoja reunan toisella puolella, jolloin optimointialgoritmi ohjaa iteraation takaisin käyvän alueen reunalle. 25 20 15 f(x) 1/g(x) 10 5 0 5 10 0 0.5 1 1.5 2 2.5 x 1 Demo 2: Optimointi MATLAB -ohjelmistolla Tutustaan MATLAB -ohjelmistoon ja sen Optimization Toolboxin funktiohin. a) Tutustu MATLAB:n muuttujiin. Varmista että osaat tallentaa muuttujaan arvon, lukea muuttujan arvon, ja käyttää muuttujaa lausekkeissa. b) Tee funktio, joka laskee lausekkeen (x 1 2) 2 + (x 2 3) 2. c) Laske b) kohdan funktion minimipiste d) Laske b) kohdan funktion minimipiste rajoitusehdolla x 2 x 2 1 4

Ratkaisu Matlab on numeerinen laskentaohjelmisto. Yksi keskeisimpiä eroja muihin vastaaviin ohjelmistoihin on se, että kaikki muuttujat ovat matriiseja. Peruslaskutoimitukset, kuten kertolasku, toimivat matriisien normaalien kertolaskusääntöjen mukaan. Vektorit ovat yksisarakkeisia matriiseja, ja skalaarit 1 1 matriiseja. Matlabin komentoja voi kirjoittaa joko suoraan Matlabin komentokehotteeseen tai erillisiin tiedostoihin. Matlab-tiedostot ovat nimeltään m-tiedostoja (m-files) ja ne tunnistaa tiedostopäätteestä.m. Tiedoston voi luoda tai sitä voi muokata kirjoittamalla komentokehotteeseen edit tiedosto.m, joka avaa erillisen muokkausikkunan. Tiedostoja voi ajaa painamalla muokkausikkunassa F5, jolloin tiedoston rivit ajetaan järjestyksessä aivan kuin ne olisi yksitellen kirjoitettu suoraan komentokehotteeseen. a) Matlabissa voit tallentaa muuttujaan arvon =-merkillä. Esimerkiksi, jos haluat tallentaa muuttujaan a arvon 5, kirjoita a = 5. Arvo voi olla myös matemattinen lauseke, esimerkiksi 3+4, pi*2 tai sin(4+sqrt(6)). Sijoituksen jälkeen Matlab näyttää juuri tallennetun muuttujan arvon. Jos et halua, että Matlab näyttää sijoituksen tuloksen, vaan on hiljaa, lisää komennon perään puolipiste (;). Voit tarkistaa minkä tahansa muuttujan arvon kirjoittamalla sen komentokehotteeseen ja painamalla enter. Muuttujia voidaan käyttää myös lausekkeissa aivan kuin mitä tahansa numeroa. Esimerkki: Tallennetaan ensiksi muuttujaan a arvo 5, ja sen jälkeen lasketaan muuttujalle b arvo 3*a+5. Tämä tapahtuu komentamalla: a=5; b=3 a+5 Matriisit ja vektorit merkitään hakasulkeilla. Merkintä alkaa [, jonka jälkeen tulee ensimmäisen rivin alkiot eroteltuna joko pilkuilla tai välilyönneillä. Tämän jälkeen luodaan uusi rivi puolipisteellä. Loppuun tulee ]. Esimerkiksi matriisit ja vektorit A = [ 1 2 3 4 Syötetään Matlabiin komennoilla: ] [ 5 b = 6 ] c = [ 7 8 ] A = [ 1, 2 ; 3, 4 ] ; b = [ 5 ; 6 ] ; c = [ 7, 8 ] ; Huomaa. Matlab käyttää oletuksena peruslaskutoimituksissa matriisilaskutoimituksia. Jos haluat suorittaa matriisille tai vektorille jonkin laskutoimituksen alkioittain, lisää piste laskutoimituksen eteen. Esimerkiksi: a.*b tai a.^2. Matriisit ja vektorit voi transponoida heittomerkillä ( ), esimerkiksi a. Voit viitata matriisin alkioihin lisäämällä sulut ja haluamasi indeksit. Matriisin A rivin 3 ja sarakkeen 2 alkioon viitataan A(3,2). b) Matlab osaa kasan valmiita funktioita, joista esimerkkinä tavalliset sin(), cos(), log() ja exp(). Tietoa kustakin funktiosta ja sen käyttötavasta saat komennolla help funktionnimi. Voit myös luoda omia funktioita. Tätä varten luo uusi m-tiedosto, jolla on sama nimi kuin luotavalla funktiolla. Esimerkiksi funktiota laske varten sinun täytyy luoda tiedosto laske.m. Tiedosto täytyy aloittaa funktiomääritteellä 5

function y = laske(x), missä x on funktion parametri ja y on palautusarvo. Näitä muuttujanimiä käytetään kuitenkin vain kyseisessä m-tiedostossa. Voit kirjoittaa funktion toteutuksen function-rivin jälkeen. Kun funktion suoritus loppuu, palautettaan palautusarvomuuttujan arvo. Funktio f(x) = (x 1 2) 2 + (x 2 3) 2 voidaan määrittää seuraavasti: f u n c t i o n y = f ( x ) y = ( x ( 1 ) 2)ˆ2 + ( x ( 2 ) 3) ˆ 2 ; c) Matlabissa on valmiina laajat optimointikirjastot. Esittelemme tässä 2 funktiota, joista ensin rajoittamattomiin tehtäviin tarkoitettu fminunc. fminunc vaatii vähintään 2 parametriä, joista ensimmäinen on optimoitava funktio, ja toinen alkuarvaus. Funktiot annetaan parametrinä kirjoittamalla aluksi @ ja tämän jälkeen funktion nimi. Lasketaan nyt b) -kohdassa määritellyn funktion minimikohta käyttäen alkuarvauksena pistettä x 0 = [0, 0]: x_opt = fminunc ( @f, [ 0 ; 0 ] ) Tämä palauttaa optimipisteen ja tallentaa sen muuttujaan x_opt. Rajoitteellista optimointia varten Matlabissa on olemassa erillinen fminconfunktio. Funktiolle voidaan antaa parametreinä monia erilaisia rajoitteita, ja tarkan järjestyksen voi tarkistaa komennolla help fmincon. Ainoastaan kaksi ensimmäistä parametriä, kohdefunktio ja alkuarvaus, ovat pakollisia, mutta näiden lisäksi voidaan antaa seuraavia parametrejä: Lineaariset epäyhtälörajoitteet (Ax b), lineaariset yhtälörajoitteet (Ax = b), ylä- ja alarajat (LB x UB) ja epälineaarinen rajoite (nonlcon). Epälineaarista rajoitetta lukuunottamatta rajoitteet annetaan funktiolle kerroinmatriisien -ja vektroreiden A, b jne. muodossa. Epälineaarisia rajoitteita varten täytyy luoda uusi funktio. Funktiolla tulee olla kaksi paluuarvoa: C ja Ceq. C tulee olla käyvällä alueella negatiivinen ja Ceq nolla. Jos rajoitteita on useampia, tulee paluuarvojen olla vektoreita, jonka alkiot vastaavat kutakin rajoitetta. Esimerkiksi rajoitetta x 2 x 2 1 varten luodaan seuraava funktio (tiedostoon rajoite.m): f u n c t i o n [ C, Ceq ] = rajoite ( x ) Ceq = [ ] ; C = x ( 1 ) ˆ2 x ( 2 ) ; Nyt voimme laskea kohdefunktion minimin komennolla fmincon ( @f, [ 0 ; 0 ], [ ], [ ], [ ], [ ], [ ], [ ], @rajoite ) ; Koska lineaarisia rajoitteita ei ole, ne tulee merkitä tyhjinää matriiseina ja vektoreina ([]). 6

Tehtävä 1: Funktion minimikohdan etsiminen a) Etsi funktion (x 1 2) 4 + (x 1 2x 2 ) 2 minimi. b) Etsi a) kohdan funktion minimi rajoitusehdoilla x 1 + 2x 2 3 3x 1 + 4x 2 1 c) Etsi a) kohdan funktion minimi rajoitusehdolla x 1 x 2 2 + 4 Ratkaisu a) Kirjoitetaan kohdefunktiolle oma m-tiedosto (kohde.m): f u n c t i o n y = kohde ( x ) y = ( x ( 1 ) 2)ˆ4 + ( x ( 1 ) 2 x ( 2 ) ) ˆ 2 ; Tämän jälkeen käytetään rajoittamattoman tehtävän ratkaisemiseen tarkoitettua fminunc-funktiota: x_opt = fminunc ( @kohde, [ 0 ; 0 ] ) Alkuarvauksena on käytetty pistettä x 0 = (0, 0). b) Tehtävä on rajoitettu tehtävä, ja se kannattaa ratkaista Matlabin fminconfunktiolla. Funktio haluaa lineaariset rajoitteet muodossa Ax b, joten selvitetään, mitkä ovat tämän tehtävän vastaavat matriisit A ja b. Matriisi A saadaan suoraan eri muuttujien kertoimista ja vektori b epäyhtälöiden oikealta puolelta: A = [ 1 2 3 4 ] [ 3, b = 1 Matlabiin nämä voidaan syöttää komennoilla: ] A = [ 1, 2 ; 3, 4 ] ; b = [ 3 ; 1 ] ; Nyt voimme ratkaista optimin komennolla x_opt = fmincon ( @kohde, [ 0 ; 0 ], A, b ) c) Rajoite on epälineaarinen, joten sitä varten täytyy luoda uusi m-tiedosto (rajoite2.m) f u n c t i o n [ C, Ceq ] = rajoite2 ( x ) Ceq = [ ] ; C = x ( 1 ) + x ( 2 ) ˆ2 + 4 ; Tämän jälkeen optimi löytyy komennolla 7

x_opt=fmincon ( @kohde, [ 0 ; 0 ], [ ], [ ], [ ], [ ], [ ], [ ], @rajoite2 ) Tehtävä 2: Kuvaajien piirtäminen Piirrä funktion e (n 3n2 ) 4 x 2 kuvaaja välillä [ 2, 2]. Ratkaise funktion maksimi, ja merkitse maksimi kuvaajaan. Ratkaisu Kirjoitetaan ensiksi funktiolle oma m-tiedosto (fun.m): f u n c t i o n y = fun ( n ) y = exp( (n 3 n. ˆ 2 ). ˆ 4 ) n. ˆ 2 ; Huomaa. Funktio on nyt kirjoitettu käyttäen piste-operaattoreita. Tämä on tehty sen vuoksi, että funktio halutaan evaluoida useassa pisteessä yhtäaikaa. Nyt voidaan eri pisteet antaa funktiolle vektorina ja funktio palauttaa saman kokoisen vektorin, jonka arvot vastaavat funktion arvoja syötevektorin pisteissä. Seuraavaksi piirretään funktion kuvaaja. Matlabissa kuvaajien piirtämistä varten täytyy piirrettävien pisteiden arvot laskea etukäteen. Kun kuvaaja halutaan pirtää muuttujan n arvoilla [ 2, 2], täytyy ensiksi määrittää vektori, jossa on kaikki halutut arvot. Matlabissa tälläinen vektori luodaan komenolla n = 2 : 0. 1 : 2 ; Kaksoispisteellä erotetaan vektorin aloituspiste, diskretointiväli ja lopetuspiste. Nyt voimme vielä laskea funktion arvot kussakin näistä pisteistä komennolla y = fun ( n ) ; Kuvan piirtäminen tapahtuu plot-komennolla. Parametreinä se vaatii piirrettävien pisteiden x- ja y-koordinaatit. Piirretään funktion kuvaaja komennolla p l o t ( n, y ) Voit antaa kuvaajalle myös lisämääreitä y-koordinaattivektorin jälkeen lisäämällä merkkijono-parametrin. Esimerkiksi komento p l o t ( n, y, ' kx : ' ) piirtää kuvaajan mustalla (k) katkoviivalla (:) ja merkitsee datapisteet rasteilla (x). Voit käyttää myös muita värejä (esim. r = punainen, b = sininen, g = vihreä, jne), viivatyyppejä (esim. - = yhtenäinen viiva, -. = viiva-pisteviiva, jne) ja merkkejä (esim. o = ympryrä,. = piste, jne.). Merkitään kuvaajaan vielä optimipiste. Aluksi meidän täytyy selvittää, mikä piste on kyseessä. Tämä selviää komennolla 8

x_opt = fminunc ( @ ( x ) fun ( x ), 4) Kohdefunktio täytyy antaa nyt hieman eri tavalla sillä haluamme löytää funktion maksimin. Kirjoita @-merkin jälkeen sulut ja muuttujannimi, minkä jälkeen voit kirjoittaa kohdefunktion lausekkeen. Nyt kohdefunktioksi valitaan -fun(x), eli kohdefunktiomme evaluoituna pisteessä x ja miinusmerkki funktion edessä muutta arvot negatiivisiksi. Näin minimointialgoritmi löytää varsinaisen kohdefunktion maksimin. Toinen parametri (4) on käytetty alkuarvaus. Lasketaan vielä kohdefunktion arvo tässä pisteessä: y_opt = fun(x_opt);. Tämän jälkeen piste voidaan piirtää kuvaajaan komennoilla hold on ; p l o t ( x_opt, y_opt, ' ro ' ) Komento hold on tarvitaan, koska oletuksena Matlab pyyhkii edellisen kuvan pois kun seuraava plot-komento annetaan. Komento hold on jättää vanhat kuvat piirtoikkunaan. Asetuksen saa palautettua takaisin komennolla hold off. Tehtävä 3: Iteratiiviset menetelmät Kirjoita Matlab-funktio, joka ratkaisee funktion minimikohdan käyttäen Newtonin menetelmää. Minimointi tehdään vain yhden muuttujan suhteen. Voit käyttää testaamiseen jotain yksinkertaista funktiota, jonka optimi tunnetaan tarkasti. Esimerkiksi funktiota f(x) = cos x, käyttäen aloituspisteenä x 0 = 1. Ratkaisu Newtonin iteraatio perustuu funktion derivaatan nollakohdan etsimiseen sovittamalla derivaattaan suora, joka tangeeraa derivaatan kuvaajaa sen hetkisessä iteraatiopisteessä. Menetelmä aloitetaan valitsemalla jokin aloituspiste x 0, jonka jälkeen seuraavat pisteet lasketaan kaavalla x k + 1 = x k f (x k ) f (x k ). Matlabia varten voimme kirjoittaa aluksi funktion, joka laskee seuraavan iteraatiopisteen, kun sille annetaan parametrinä iteraatiopiste x k. Kirjoitetaan funktio tiedostoon newton.m: f u n c t i o n x2 = newton ( x ) x2 = x df ( x ) /ddf ( x ) ; Tässä df ja ddf ovat laskettavan funktion derivaatta ja toinen derivaatta. Näitä varten täytyy luonnollisesti luoda omat m-tiedostot. Esimerkkifunktiona käytetään nyt f(x) = cos(x). Tämän deriaatta on f (x) = sin(x) ja toinen derivaatta f (x) = cos(x). Kirjoitetaan vastaavat m-tiedostot: df.m: 9

f u n c t i o n y = df ( x ) y = s i n ( x ) ; ddf.m: f u n c t i o n y = ddf ( x ) y = cos ( x ) ; Nyt voimme ratkaista optimin Newtonin menetelmällä. Asetetaan alkuarvaus x=4. Seuraavaksi lasketaan uusi piste käyttäen newton -funktiota: x = newton(x). Iteraatiota toistetaan, kunnes piste ei enää muutu merkittävästi. Alkuarvauksesta riippuen iteraation pitäisi päätyä funktion lokaaliin minimiin x = 0. Menetelmä kannattaa myös kirjoittaa kokonaisuudessaan yhdeksi funktioksi, joka ottaa parametrinään alkupisteen ja iteroi Newton-iteraatioita tarvittavan määrän. Tälläinen funktio on esimerkiksi: f u n c t i o n x_opt = newtonoptimoi ( x0 ) tol = 0. 0 0 1 ; %haluttu tarkkuus max_n = 1000; %suurin s a l l i t t u maara i t e r a a t i o i t a n = 0 ; %a l u s t e t a a n laskurimuuttuja x = x0 ; x_edellinen = 10000; while ( abs ( x x_edellinen ) > tol && n < max_n ) % t o i s t e t a a n, kunnes p i s t e i d e n valimatka % on t a r p e e k s i p i e n i t a i maksimi % i t e r a a t i o m a a r a saavutetaan x_edellinen = x ; %t a l l e n n e t a a n e d e l l i n e n arvo x = newton ( x ) %l a s k e t a a n uusi arvo n = n+1; %p a i v i t e t a a n l a s k u r i end x_opt = x Nyt voimme hakea optimin seuraavalla komennolla. Alkuarvauksena on käytetty arvoa x = 4. newtonoptimoi ( 4 ) 10

Tehtävä 4: Hakumenetelmät Kirjoita Matlab-funktio, joka ratkaisee (1-ulotteisen) funktion minimikohdan käyttäen puolitusmenetelmää. Voit testata algoritmia jälleen yksinkertaisella funktiolla, kuten f(x) = cos(x). Tarkasteltava väli kannattaa valita testivaiheessa niin, että iteraatio ei suppene välittömästi, esimerkiksi [ 2, 1]. Ratkaisu Hakumenetelmissä määritellään aluksi jokin väli, joka sitten jaetaan kahteen tai kolmeen osaan. Funktion arvoista välin ja eri osien päätepisteissä riippuen valitaan välille uudet päätepisteet. Tätä toistetaan, kunnes väli on riittävän kapea, ja optimin paikka tiedetään halutulla tarkkuudella. Puolitusmenetelmässä väli jaetaan kahteen osaan. Funktion arvo lasketaan välin päätepisteissä ja puolivälin molemmin puolin. Merkitään välin päätepisteitä a ja b, ja puoliväliä pisteellä c = a+b 2. Pisteet, joissa funktion arvo lasketaan puolivälin molemmin puolin ovat c ε ja c + ε. Tässä ε on jokin pieni luku. Nyt jos funktion arvo on suurempi pisteessä c ε kuin pisteessä c + ε, tiedetään että funktion minimi on välillä [c + ε, b]. Vastaavasti toisinpäin. Kirjoitetaan puolitushaku seuraavalla tavalla: f u n c t i o n x_opt = puolitushaku ( a, b ) tol = 0. 0 1 ; % haluttu tarkkuus ep = 0. 0 0 1 ; % p u o l i v a l i n molemmin puolin % l a s k e t t a v a e t a i s y y s ( e p s i l o n ) fa = puolituskohde ( a ) ; % f u n k t i o n arvot p a a t e p i s t e i s s a fb = puolituskohde ( b ) ; % kaytetaan kohdefunktiona % f u n k t i o t a puolituskohde L = b a ; % v a l i n pituus while ( L > tol ) % t o i s t e t a a n kunnes tarkkuus on r i i t t a v a c = ( a+b ) / 2 ; % p u o l i v a l i fc_ala = puolituskohde ( c ep ) ;%fun. arvo ennen p u o l i v a l i a fc_yla = puolituskohde ( c+ep ) ;%fun. arvo p u o l i v a l i n j a l k. i f ( fc_yla > fc_ala ) %j o s f u n k t i o saa suuremman arvon p u o l i v a l i n j a l k e e n b = c+ep ; e l s e a = c ep ; end L = b a ; disp ( [ a, b ] ) % naytetaan i t e r a a t i o p i s t e end x_opt = ( a+b ) / 2 ; Nyt voimme hakea funktion minimin kirjoittamalla funktiolle oman m-tiedoston (puolituskohde.m) ja ajamalla puolitushaku-funktion halutuilla välin päätepisteillä: 11

puolitushaku ( 2,1) Edellisen tehtävän kohdefunktio voidaan kirjoittaa m-tiedostoon puolituskohde.m: f u n c t i o n y = puolituskohde ( x ) y = cos ( x ) Tällä funktiolla iteraation pitäisi supeta pisteeseen x = 0. Tehtävä 5: Gradienttimenetelmä Kirjoita MATLAB-funktio, joka annetun (n-ulotteisen) funktion minimikohdan käyttäen gradienttimenetelmää. Voit käyttää viivahakuna esimerkiksi tehtävässä 3 kirjoittamaasi algoritmia tai MATLABin valmiita optimointifunktioita. Ratkaise algoritmillasi funktion minimikohta. x 2 + y 4 + 100e x+y Ratkaisu Kirjoitetaan aluksi haluttu kohdefunktio Matlab-tiedostoon (kohde3.m): f u n c t i o n y = kohde3 ( x ) y = x ( 1 ) ˆ2 + x ( 2 ) ˆ4 +100 exp( x ( 1 )+x ( 2 ) ) ; Gradienttimenetelmässä tarvitaan lisäksi funktion gradientti (kohde3grad.m): f u n c t i o n g = kohde3grad ( x ) g = [ 2 x ( 1 ) 100 exp( x ( 1 )+x ( 2 ) ) ; +x ( 2 ) ) ] ; 4 yˆ3 + 100 exp( x ( 1 ) Huomaa. Gradientti on nyt vektori, joten gradienttifunktion palautusarvo g on myös vektori. Gradienttimenetelmä laskee ensin kussakin iteraatiopisteessä funktion gradientin, ja tekee tässä suunnassa ns viivahaun: min f(x + αd), α missä d = f(x) on hakusuunta, ja α on kerroin, joka kertoo kuinka pitkälle hakusuunnassa mennään. Viivahaussa optimoidaan nimenomaan kerrointa α, joten se on yksiulotteinen optimointitehtävä. Gradienttimenetelmä voidaan ohjelmoida esimerkiksi seuraavasti. Luodaan funktio gradoptimoi, joka laskee funktion kohde3 minimin: 12

f u n c t i o n x_opt = gradoptimoi ( x0 ) tol = 0. 0 0 1 ; % l o p e t u s e h t o muutos = 1 ; % muuttuja, joka kertoo % i t e r a a t i o i d e n v a l i s e n muutoksen x = x0 ; %a l u s t e t a a n i t e r a a t i o m u u t t u j a while ( muutos > tol ) grad = kohde3grad ( x ) ; %g r a d i e n t t i i t e r a a t i o p i s t e e s s a d = grad ; %hakusuunta d on g r a d i e n t t i a_opt = fminunc ( @ ( a ) kohde3 ( x+a d ), 1) ; %viivahaku x = x + a_opt d ; %p a i v i t e t a a n uusi i t e r a a t i o p i s t e muutos = norm ( a_opt d ) ; %l a s k e t a a n s i i r r y t t y matka end x_opt = x ; Huomaa. fminunc ja fmincon -funktioille annettaville kohde- ja rajoitefunktioille ei tarvitse välttämättä luoda omia m-tiedostoja, vaan ne voidaan antaa myös käyttäen @-merkintää. @-merkinnässä @-merkin jälkeen sulkujen sisään tulee laskettavan funktion parametrit, ja tämän jälkeen laskettavan funktion lauseke. Esimerkiksi merkintä @(x) 2*x vastaa funktiota f(x) = 2x. Huomaa. Tässä esitetyllä gradienttimenetelmällä optimin saavuttaminen voi joskus olla hyvin vaikeaa, sillä kohdefunktion tasa-arvokäyrät voivat muodostaa pitkulaisen laakson. Gradienttimenetelmä jää tällöin sahaamaan edestakaisin laakson pohjalle, eikä pääse järkevässä ajassa riittävän lähelle optimia. 13