Zadatak za treću lab. vježbu
Ova se vježba, osim implementacije u C++-u, izvodi i uporabom programskog
paketa MATLAB.
1. C++
Načiniti progamsku
implementaciju jedne od metoda optimiranja funkcija više varijabli:
- postupci bez uporabe derivacija:
- simplex postupak po Nelderu i Meadu
- Powellov postupak
- postupak po Boxu za probleme s ograničenjima
- gradijentni postupci (s uporabom
derivacija):
- postupak po Fletcheru i Powellu
Dodatni
zahtjevi za pojedine postupke:
- simplex postupak po Nelderu i Meadu
Potrebno je
omogućiti da se bez prevođenja programa mogu definirati: vrijednosti
koeficijenata a, b i g, preciznost e te početna točka pretraživanja.
Pretpostavljene vrijednosti: a = 1, b = 0.5, g = 2, e = 10-9
Postupak primijeniti na funkcije f1, f2, f3, f4
- Powellov postupak
Potrebno je
omogućiti da se bez prevođenja programa mogu definirati: preciznost e te početna točka pretraživanja.
Pretpostavljene
vrijednosti: e = 10-9
Postupak primijeniti na funkciju f1 ili f3
- postupak po Boxu za probleme s ograničenjima
Potrebno je
omogućiti da se bez prevođenja programa mogu definirati: preciznost e, koeficijent refleksije a te početna točka pretraživanja.
Pretpostavljene
vrijednosti: e = 10-9, a = 1.3
Postupak primijeniti na funkciju f2 uz ograničenja: (x2-x1
>= 0), (x1-2 <=
0)
- postupak po Fletcheru i Powellu
Potrebno je omogućiti da se bez prevođenja programa mogu
definirati: preciznost eps i vektor e te početna točka pretraživanja.
Pretpostavljene
vrijednosti: eps
= 10-9, elementi vektora e jednaki iznosu eps.
Postupak primijeniti na funkciju f1 ili f3
2. MATLAB
Potrebno je odabrati dvije optimizacijske funkcije (na dnu stranice),
definirati ih kao funkcije u MATLABU i pronaći njihov minimum uporabom ugrađenih
MATLABovih funkcija. Neke od funkcija za optimiranje su sljedeće:
- fminbnd: minimum funkcije jedne varijable;
koristi algoritam zlatnog reza i kvadratne interpolacije
- fminsearch: minimum funkcije više varijabli; koristi simplex postupak po Nelderu i Meadu
- fminunc: minimum funkcije više
varijabli; ova funkcija može, ovisno o proslijeđenim parametrima, uporabiti
nekoliko optimizacijskih algoritama, između ostaloga i postupak po Fletcheru i
Powellu, poopćeni Newtonov postupak, metoda najbržeg spusta itd.
Optimizacijske funkcije se u MATLAB-u mogu definirati u posebnim .m
datotekama, kao u sljedećem primjeru:
function f = apr_primjer(x) %
mora biti u prvom retku!
% Bezvezna funkcija dvije varijable
f = x(1) + x(2);
Datoteku je potrebno nazvati istim imenom kao i funkcija (apr_primjer.m). Iz
MATLAB-a se funkciji tada može pristupiti sa:
apr_primjer([1,1])
Osim .m datoteka sa definicijom funkcija, također napisati i skriptu u kojoj
se pozivima navedenih ugrađenih funkcija pronalaze minimumi. Rješenja u MATLAB-u
možete usporediti sa onima dobivenim vašim programom. BONUS: moguće
je zaraditi dodatni 1 bod ako odabrane 2-dim funkcije i nacrtate (3D graf), ali
samo u tjednu u kojemu vježba vrijedi 3 boda.
Recommended reading u MATLAB Helpu (pored navedenih ugrađenih
funkcija):
- DEMOS: Optimization: Minimization of the "banana function" - funkcija
f1
od ponuđene četiri!
- MATLAB: Mathematics: Function Functions: Minimizing Functions and Finding
Zeros
- Optimization Toolbox: Standard Algorithms: Unconstrained Optimization
3. Optimizacijske funkcije
(traži se minimum!):
f1(x,y) = 10*(x2-y)2+(1-x)2
(Rjesenje: X = (1,1) )
f2(x,y)
= (x-4)2 + 4(y-2)2
(Rjesenje: X = (4,2) )
f3(x1,x2,x3,x4,x5)
= (x1-p1)2 + (x2-p2)2 + ... + (x5-p5)2
gdje su p1, p2, .. p5 parametri koji se učitavaju iz datoteke u
obliku vektora.
(Rjesenje: X = (p1,p2,...,p5) )
f4(x,y) = |(x-y)*(x+y)| + (x2+y2)0.5
(Rjesenje: X = (0,0) )