13
Univerzitet Crne Gore Mašinski fakultet Podgorica Decembar 2014. godine Optimizacija u mehanici konstrukcija Seminarski rad Optimizacija funkcija primijenom gradijentnih metoda Predmetni nastavnik: Prof. dr Olivera Jovanović Student: Grubiša Luka 04/14

Optimizacija u mehanici konstrukcija

Embed Size (px)

DESCRIPTION

Optimizacija, MATLAB

Citation preview

Page 1: Optimizacija u mehanici konstrukcija

Univerzitet Crne Gore Mašinski fakultet

Podgorica

Decembar 2014. godine

Optimizacija u mehanici konstrukcija

Seminarski rad

Optimizacija funkcija primijenom gradijentnih metoda

Predmetni nastavnik: Prof. dr Olivera Jovanović

Student:

Grubiša Luka

04/14

Page 2: Optimizacija u mehanici konstrukcija

Optimizacija funkcija primijenom gradijentnih metoda studijska 2014./2015.

Sadržaj Gradijentne metode .................................................................................. 2. Primjer 1. .................................................................................. 4. Primjer 2. .................................................................................. 8. Literatura .................................................................................. 12.

1

Page 3: Optimizacija u mehanici konstrukcija

Optimizacija funkcija primijenom gradijentnih metoda studijska 2014./2015.

GRADIJENTNE METODE Posmatrajmo problem bezuslovne optimizacije:

( )min ,x Rnf x ∈

gdje je : nf R R→ zadata realna funkcija definisana na nR . Metode bezuslovne optimizacije se mogu podijeliti u dvije klase: metode sa računanjem izvoda i metode bez računanja izvoda. Jasno je da se prva klasa metoda primijenjuje samo na diferencijabilne funkcije, dok se metode druge klase mogu primijeniti i u slučaju nediferencijabilnih fukncija. U praksi se metode druge klase koriste i u slučajevima kada je funkcija diferencijabilna, ali je računanje njenih izvoda komplikovano i zahtijeva značajne vremenske ili memorijske resurse. Metode druge klase se takođe koriste kada je nemoguće tačno odrediti izvode, recimo, kada je funkcija zadata tablično. Metode bezuslovne optimizacije su uglavnom iterativnog tipa. Osnovna ideja je da se generiše niz tačaka n

kx R∈ , na sljedeći način:

1 , k 0,1,2,3,...k k kx x h d+ = + ⋅ =

gdje je k nd R∈ vektor koji određuje pravac kretanja iz tačke xk, a 0h > realni parametar koji određuje dužinu koraka iz tačke xk u pravcu vektora dk.

Slika 1: Generisanje niza

Niz vektora k nd R∈ i parametara h R∈ obično biramo tako da niz vrijednosti f(xk) monotono opada i konvergira nekom od lokalnih minimuma funkcije f(x) u Rn.

hdk

2

Page 4: Optimizacija u mehanici konstrukcija

Optimizacija funkcija primijenom gradijentnih metoda studijska 2014./2015.

Zajednička karakteristika gradijentnih metoda je da koriste gradijent date funkcije f za rješavanje problema bezuslovne optimizacije, po čemu su i dobile naziv. Primijena standardne gradijentne metode svodi se na rješavanje sistema diferencijalnih jednačina:

( ) ( ) ( ), 1,2,...,j

j

x f xk j n

t x∂ ∂

= ± ⋅ =∂ ∂

gdje je 1 2( , ,..., )nx x x x= , skup promjenljivih kome za t0=0 odgovara 0 0 0 0

1 2( , ,..., )nx x x x= .

Ako se traži maksimum funkcije, pomijeranje tačke u odnosu na x0 vrši se u smjeru gradijenta, tj. uzima se znak plus (+), a ako se traži minimum, pomijeranje se vrši u suprotnom smjeru, čemu odgovara znak minus (-). Standardni numerički postupak za rješavanje se može definisati u 3 koraka:

• u prvom koraku se proizvoljno bira početna tačka x0; • u drugom koraku se provjerava vrijednost parcijalnih izvoda za tačku xk u opštem

slučaju (k=0,1,2,...), tj. ako je ( )

0, 1,2,...,j

f xj n

x∂

= =∂

, tada xk predstavlja

rješenje problema. U slučaju da su parcijalni izvodi različiti od nule, izračunavaju se vrijednosti optimalnog koraka (ukoliko on prethodno nije usvojen) i prelazi na sljedeći korak;

• u trećem koraku se izračunava novo rješenje, tj. nova tačka 1 , k 0,1,2,3,...k k kx x h d+ = + ⋅ = . Zatim se prelazi na izvršenje drugog koraka,

uzimajući da je xk=xk+1. Ovaj iterativni postupak je konvergentan ukoliko postoji rješenje problema.

Slika 2.: Konstrukcija iterativnog niza metodom najbržeg spusta

3

Page 5: Optimizacija u mehanici konstrukcija

Optimizacija funkcija primijenom gradijentnih metoda studijska 2014./2015.

Primijenu standardne gradijentne metode ćemo prikazati na par primjera. Primjer 1. Gradijentnom metodom odrediti maksimum funkcije ( ) 2 2

1 1 2 24 2 2 8f x x x x x= − − +

pri čemu iteracioni proces otpočeti od tačke x0=(0,0). Za rješavanje ovog i sličnih problema, napisan je jedan opšti kod u MATLAB-u koji rješava zadatu funkciju, prvo određujući optimalnu vrijednost koraka, a zatim izračunava maksimum ili minimum zadate f-je. Kod, takođe, crta grafik funkcije u tri dimenzije. % OPTIMIZACIJA U MEHANICI KONSTRUKCIJA %Odredjivanje maksimuma i minimuma funkcije gradijentnom metodom clear all; clc; x1 = sym('x1'); x2 = sym('x2'); f = input('Unesite funkciju: ') x0 = input('Unesite koordinate pocetne tacke: ') df1 = diff(f, x1); %racunanje parcijalnog izvoda funkcije po promjenljivoj x1 df2 = diff(f, x2); %racunanje parcijalnog izvoda funkcije po promjenljivoj x2 d1 = subs(df1, {x1, x2}, {x0(1), x0(2)}); %zamjena konkretnih vrijednosti u izraz za izracunati izvod d2 = subs(df2, {x1, x2}, {x0(1), x0(2)}); %zamjena konkretnih vrijednosti u izraz za izracunati izvod %Racunanje optimalnog koraka syms h; fh = subs(f, {x1, x2}, {x0(1) + h*d1, x0(2) + h*d2}); dfh = diff(fh, h); dfh == 0; h = solve(dfh); h = vpa(h); h = double(h); display(['Optimalna vrijednost koraka je h=', num2str(h),]) a = x0(1); b = x0(2);

4

Page 6: Optimizacija u mehanici konstrukcija

Optimizacija funkcija primijenom gradijentnih metoda studijska 2014./2015.

%Odluka o racunanju maksimuma, odnosno minimuma funkcije Opcija = input('Za odredjivanje minimuma funkcije kucajte 1, a za odredjivanje maksimuma kucajte 2: ') %Iteracioni proces za odredjivanje minimuma f-je if (Opcija == 1) while (abs(d1)>10^(-4) | abs(d2)>10^(-4)) d1 = subs(df1, {x1, x2}, {a, b}); d2 = subs(df2, {x1, x2}, {a, b}); disp(['[x1, x2]: [' num2str(a), ',' num2str(b), ']']) disp(['[d1, d2]: [' num2str(d1), ',' num2str(d2), ']']) f1 = subs(f, {x1, x2}, {a, b}); disp(['f(0): ' num2str(subs(f1))]) disp([' ']) a = a - h.*d1; b = b - h.*d2; end end %Iteracioni proces za odredjivanje maksimuma f-je if (Opcija == 2) while (abs(d1)>10^(-4) | abs(d2)>10^(-4)) d1 = subs(df1, {x1, x2}, {a, b}); d2 = subs(df2, {x1, x2}, {a, b}); disp(['[x1, x2]: [' num2str(a), ',' num2str(b), ']']) disp(['[d1, d2]: [' num2str(d1), ',' num2str(d2), ']']) f1 = subs(f, {x1, x2}, {a, b}); disp(['f(0): ' num2str(subs(f1))]) disp([' ']) a = a + h.*d1; b = b + h.*d2; end end %Crtanje grafika f-je figure(1) [A,B] = meshgrid(-10:.5:10); f = subs(f, {x1, x2}, {A, B}); mesh(A,B,f,'EdgeColor','black') print(gcf, '-dpng', '-r500', 'Dijagram 1.png'); figure(2) surf(A,B,f) colormap hsv

5

Page 7: Optimizacija u mehanici konstrukcija

Optimizacija funkcija primijenom gradijentnih metoda studijska 2014./2015.

print(gcf, '-dpng', '-r500', 'Dijagram 2.png'); Nakon pokretanja ovog programa, u komandnom prozoru se dobijaju sljedeći podaci: Unesite funkciju: 4.*x1 - 2.*x1.^2 - 2.*x2.^2 + 8.*x2 f = - 2*x1^2 + 4*x1 - 2*x2^2 + 8*x2 Unesite koordinate pocetne tacke: [0, 0] x0 = 0 0 Optimalna vrijednost koraka je h=0.25 Za odredjivanje minimuma funkcije kucajte 1, a za odredjivanje maksimuma kucajte 2: 2 Opcija = 2 [x1, x2]: [0,0] [d1, d2]: [4,8] f(0): 0 [x1, x2]: [1,2] [d1, d2]: [0,0] f(0): 10 Primjećuje se da se proračunom optimalnog koraka vrlo brzo (već nakon jedne iteracije) dobija tačka u kojoj funkcija dostiže maksimum, kao i vrijednost funkcije u toj tački.

Rezultate možemo prikaati i tabelarno:

Iteracija f(xk) x1k x2

k d1k d2

k hk

0 0 0 0 4 8 0.25 1 10 1 2 0 0 0.25

6

Page 8: Optimizacija u mehanici konstrukcija

Optimizacija funkcija primijenom gradijentnih metoda studijska 2014./2015.

Kod napisan u matlabu takođe crta izgled funkcije u tri dimenzije:

Slika 3: Izgled zadate funkcije u x-y-z koordinatnom sistemu

7

Page 9: Optimizacija u mehanici konstrukcija

Optimizacija funkcija primijenom gradijentnih metoda studijska 2014./2015.

Primjer 2. Gradijentnom metodom odrediti vrijednost funkcije ( ) 2 2 3 4

1 2 1 1min 2 2 1 2 2f x x x x x x x= ⋅ + − ⋅ ⋅ + ⋅ +

u prve tri iteracije, pri čemu iteracioni proces otpočeti od tačke x0=(0,1) sa usvojenim korakom h=0.10.

Za rješavanje ovog problema se može koristiti prethodni kod, uz određene izmjene. Kao prvo, ne treba računati optimalnu vrijednost koraka, s obzirom da je zadat korak kojim treba raditi optimizaciju. Takođe, iteracioni proces ne treba raditi do pronalaženja minimuma, već je potrebno sprovesti prve tri iteracije i prikazati rezultate. Uzevši ovo u obzir, modifikovani kod izgleda ovako: % OPTIMIZACIJA U MEHANICI KONSTRUKCIJA %Odredjivanje maksimuma i minimuma funkcije gradijentnom metodom clear all; clc; x1 = sym('x1'); x2 = sym('x2'); f = input('Unesite funkciju: ') x0 = input('Unesite koordinate pocetne tacke: ') h = input('Unesite vrijednost koraka: ') df1 = diff(f, x1); %racunanje parcijalnog izvoda funkcije po promjenljivoj x1 df2 = diff(f, x2); %racunanje parcijalnog izvoda funkcije po promjenljivoj x2 d1 = subs(df1, {x1, x2}, {x0(1), x0(2)}); %zamjena konkretnih vrijednosti u izraz za izracunati izvod d2 = subs(df2, {x1, x2}, {x0(1), x0(2)}); %zamjena konkretnih vrijednosti u izraz za izracunati izvod a = x0(1); b = x0(2); Opcija = input('Za odredjivanje minimuma funkcije kucajte 1, a za odredjivanje maksimuma kucajte 2: ') %Iteracioni proces za odredjivanje minimuma f-je i = 1; if (Opcija == 1) while (i < 5) d1 = subs(df1, {x1, x2}, {a, b});

8

Page 10: Optimizacija u mehanici konstrukcija

Optimizacija funkcija primijenom gradijentnih metoda studijska 2014./2015.

d2 = subs(df2, {x1, x2}, {a, b}); disp(['[x1, x2]: [' num2str(a), ',' num2str(b), ']']) disp(['[d1, d2]: [' num2str(d1), ',' num2str(d2), ']']) f1 = subs(f, {x1, x2}, {a, b}); disp(['f(0): ' num2str(subs(f1))]) disp([' ']) a = a - h.*d1; b = b - h.*d2; i = i +1; end end %Iteracioni proces za odredjivanje maksimuma f-je if (Opcija == 2) while (abs(d1)>10^(-4) | abs(d2)>10^(-4)) d1 = subs(df1, {x1, x2}, {a, b}); d2 = subs(df2, {x1, x2}, {a, b}); disp(['[x1, x2]: [' num2str(a), ',' num2str(b), ']']) disp(['[d1, d2]: [' num2str(d1), ',' num2str(d2), ']']) f1 = subs(f, {x1, x2}, {a, b}); disp(['f(0): ' num2str(subs(f1))]) disp([' ']) a = a + h.*d1; b = b + h.*d2; end end %Crtanje grafika f-je figure(1) [A,B] = meshgrid(-10:.5:10); f = subs(f, {x1, x2}, {A, B}); mesh(A,B,f,'EdgeColor','black') print(gcf, '-dpng', '-r500', 'Dijagram min1.png'); figure(2) surf(A,B,f) colormap hsv print(gcf, '-dpng', '-r500', 'Dijagram min2.png');

9

Page 11: Optimizacija u mehanici konstrukcija

Optimizacija funkcija primijenom gradijentnih metoda studijska 2014./2015.

Nakon pokretanja ovog programa, u komandnom prozoru se dobijaju sljedeći podaci: Unesite funkciju: 2.*x1.^2 + x2.^2 - 2.*x1.*x2 + 2.*x1.^3 + x1.^4 f = x1^4 + 2*x1^3 + 2*x1^2 - 2*x1*x2 + x2^2 Unesite koordinate pocetne tacke: [0, 1] x0 = 0 1 Unesite vrijednost koraka: 0.10 h = 0.1000 Za odredjivanje minimuma funkcije kucajte 1, a za odredjivanje maksimuma kucajte 2: 1 Opcija = 1 [x1, x2]: [0,1] [d1, d2]: [-2,2] f(0): 1 [x1, x2]: [0.2,0.8] [d1, d2]: [-0.528,1.2] f(0): 0.4176 [x1, x2]: [0.2528,0.68] [d1, d2]: [0.099271,0.8544] f(0): 0.2828 [x1, x2]: [0.24287,0.59456] [d1, d2]: [0.1936,0.70337] f(0): 0.2148

10

Page 12: Optimizacija u mehanici konstrukcija

Optimizacija funkcija primijenom gradijentnih metoda studijska 2014./2015.

Rezultati iteracije se mogu prikazati tabelarno:

Iteracije f(xk) x1k x2

k d1k d2

k hk

0 1 0 1 -2 2 0.10 1 0.4176 0.2 0.8 -0.528 1.2 0.10 2 0.2828 0.2528 0.68 0.099271 0.8544 0.10 3 0.2148 0.24287 0.59456 0.1936 0.70337 0.10

Grafik zadate funkcije u tri dimenzije izgleda ovako:

Slika 4: Izgled zadate funkcije u x-y-z koordinatnom sistemu

11

Page 13: Optimizacija u mehanici konstrukcija

Optimizacija funkcija primijenom gradijentnih metoda studijska 2014./2015.

Literatura [1] Prof. dr Olivera Jovanović – „Optimizacione metode u konstrukcijama“, Podgorica, 2006. godine [2] Jovan Petrić – „Operaciona istraživanja“, Beograd, 1979. [3] Zorica Stanimirović – „Gradijentne metode“ [4] http://www.mathworks.com/help/matlab/

12