2 OPTIMIZACIONI PROBLEMI EZ OGRANIČENJA · promenljivima jednaki su nula Rešavanjem prethodnih...

Preview:

Citation preview

2 OPTIMIZACIONI PROBLEMI BEZ OGRANIČENJA Matematičk i zapis neograničenog optimizacionog problema glasi

min ( )x

f x (15)

gde vektor 1 2

T

nx x x x predstavlja optimizacione promenljive, a ( )f

predstavlja funkciju cilja (kriterijumsku funkciju).

Cilj je da se odredi vektor x tako da je vrednost funkcije cilja minimalna. Ovaj

optimizacioni problem predstavlja minimizacioni problem.

Maksimizacioni problem (funkcija ( )f treba da dosegne maksimalnu vrednost)

rešava se preko minimizacionog problema koristeći funkciju ( )f .

35

2.1 ANALITIČKA REŠENJA I METODE ZA GRAFIČKO REŠAVANJE

MINIMIZACIONOG PROBLEMA Iz matematike je poznato da dovoljni uslovi za neograničeni optimizacioni

problem glase: u optimalnoj tački x prvi izvodi funkcije cilja po optimizacionim

promenljivima jednaki su nula

Rešavanjem prethodnih jednačina dobijaju se ekstremne tačke od kojih neke

mogu biti optimalne.

Rezavanje ovih jednačina može biti teško u slučaju optimizacionih problema sa

većim brojem promenljivih.

Grafičkim metodama mogu se rešiti optimizacioni problemi sa jednom i dve

promenljive, dok sa tri i više promenljivih ne mogu.

36

Primer 7. Koristeći grafičke i analitičke metode ispitati optimalnost funkcije iz

Primera 1.

Rešenje.

1. Analitičko rešenje

syms t

y=exp(-3*t)*sin(4*t+2)+4*exp(-0.5*t)*cos(2*t)-0.5;

y1=diff(y,t); % odredjuje prvi izvod

figure, ezplot(y1,[0,4]), grid % crta prvi izvod

t1=vpasolve(y1,t,1.5); % odredjuje prvu nulu prvog izvoda

t2=vpasolve(y1,t,3); % odredjuje drugu nulu prvog izvoda

y2=diff(y1); % odredjuje drugi izvod

y2_1=subs(y2,t,t1); % odredjuje vrednost 2. izvoda u prvoj

% ekstemnoj tacki

y2_2=subs(y2,t,t2); % odredjuje vrednost 2. izvoda u drugoj

% ekstemnoj tacki

37

if y2_1 < 0

fprintf('Maksimum: (%6.2f,%6.2f)\n',t1, subs(y,t,t1))

else

fprintf('Minimum: (%6.2f,%6.2f)\n',t1, subs(y,t,t1))

end

if y2_2 < 0

fprintf('Maksimum: (%6.2f,%6.2f)\n',t2, subs(y,t,t2))

else

fprintf('Minimum: (%6.2f,%6.2f)\n',t2, subs(y,t,t2))

end

figure, ezplot(y,[0,4]), grid % crta funkciju

hold on

plot(t1,subs(y,t,t1),'o',t2,subs(y,t,t2),'o') % oznacava tacke

% minimuma i maksimuma

hold off

38

39

2.2 NUMERIŠKO REŠAVANJE OPTIMIZACIONIH PROBLEMA BEZ OGRANIČENJA

U Matlabu i Optimization Toolbox podržane su redom sledeće funkcije za

neograničenu optimizaciju: fminsearch, fminunc.

40

Primer 8a. Odrediti minimum funkcije

Rešenje.

1. Korišćenje fminsearch()

syms x

% Anonimna funkcija

f=@(x)(x(1)^2-2*x(1))*exp(-x(1)^2-x(2)^2-x(1)*x(2));

% Pocetni uslov

x0=[2; 1];

% Rešavanje optimizacije

xmin=fminsearch(f,x0);

% Prikaz rezultata

xmin

fprintf('Minimalna vrednost: %10.6f \n',f(xmin))

41

2. Korišćenje fminunc()

syms x

% Anonimna funkcija

f=@(x)(x(1)^2-2*x(1))*exp(-x(1)^2-x(2)^2-x(1)*x(2));

% Pocetni uslov

x0=[2; 1];

% Rešavanje optimizacije

OPT=optimset; % uzima podrazumevane vrednosti za options

OPT.Display='iter'; % Prikazuje vrednosti tokom iteracija

xmin = fminunc(f,x0,OPT);

% Prikaz rezultata

xmin

fprintf('Minimalna vrednost: %10.6f \n',f(xmin))

42

MINIIZACIJA FUNKCIJE ZADATE POMOĆU M-FAJLA

x0=[2; 1];

xmin = fminsearch(@fun_cilja1,x0);

xmin

fprintf('Minimalna vrednost: %10.6f \n',fun_cilja1(xmin))

function f = fun_cilja1(x)

f=(x(1)^2-2*x(1))*exp(-x(1)^2-x(2)^2-x(1)*x(2));

end

43

2.3 GLOBALNI I LOKALNI MINIMUMI

Globalni minimum funkcije y = f (x) na intervalu [ , ]a b je najveća vrednost

koju funkcija y = f (x) postiže na tom intervalu.

Analogno se definiše i globalni maksimum.

44

Primer 9. Posmatrajmo funkciju

Nacrtati ovu funkciju i izračunati tačke minimuma iz različitih početnih uslova.

Rešenje.

f=@(t)exp(-2*t).*cos(10*t)+exp(-3*(t+2)).*sin(2*t);

fplot(f,[0 4])

t0=0.2; [t1,f1]=fminsearch(f,t0)

t0=0.8; [t2,f2]=fminsearch(f,t0)

t0=1.5; [t3,f3]=fminsearch(f,t0)

t0=2.2; [t4,f4]=fminsearch(f,t0)

hold on

plot(t1,f1,'o',t2,f2,'o',t3,f3,'o',t4,f4,'o')

hold off

Zaključ: Za različite početne tačke, dobijaju se različite optimalne tačke.

Dobijene optimalne tačke nazivaju se lokalni minimumi. Globalni i lokalni

minimumi se mogu prikazati na krivoj.

45

U Matab-u (Global Optimization Toolbox) postoje specijalizovane funkcije za

nalaženje globalnog minimuma, kao što su: patternsearch, ga i GlobalSearch.

46

2.4 REŠAVANJE OPTIMIZACIONIH PROBLEMA KORIŠĆENJEM

GRADIJENATA FUNKCIJE Kada brzina konvergencije optimizacionog problema postane spora, mogu se koristiti informacije o gradijentu funkcije kako bi se ovaj proces ubrzao.

Primer 10. Za datu funkciju naći minimum.

Rešenje.

% Grafik funkcije

[x,y]=meshgrid(0.5:0.01:1.5);

z=100*(y.^2-x).^2+(1-x).^2;

contour3(x,y,z,100),

zlim([0,310])

f=@(x)100*(x(2)-x(1)^2)^2+(1-x(1))^2;

ff=optimset;

ff.TolX=1e-10;

ff.TolFun=1e-20;

47

%Poziv funkcije bez koriscenja gradijenta

x=fminunc(f,[0;0],ff)

% Odredjivanje gradijenta

syms x1 x2;

f=100*(x2-x1^2)^2+(1-x1)^2;

J=jacobian(f,[x1,x2])

% Poziv funkcije sa gradijentom

ff.GradObj='on';

x=fminunc(@fun_sa_Jacobian,[0;0],ff)

% Funkcija + gradijent

function [y,Gy]=fun_sa_Jacobian(x)

y=100*(x(2)-x(1)^2)^2+(1-x(1))^2;

Gy=[-400*(x(2)-x(1)^2)*x(1)-2+2*x(1); 200*x(2)-

200*x(1)^2];

end

48

Grafik funkcije z=100*(y.^2-x).^2+(1-x).^2 dobijen pomoću contour3.

49

3 OPTIMIZACIONI PROBLEMI SA OGRANIČENJIMA Ukoliko nametnemo ograničenja po promenljivim, dobija se sledeći

optimizacioni problem sa ograničenjima

gde ispod min stoje ograničenja.

Opšti opis optimizacionog problema glasi

gde je 1 2

T

nx x x x vektor promenljivih, a ( ) 0G x predstavlja ograničenje.

Ograničenja mogu biti tipa nejednakosti ili jednakosti, koja mogu biti linearna

ili nelinearna. Takođe postoje ograničenja po slobodnim promenljivim.

Oblast rešenja x koja zadovoljava ograničenja ( ) 0G x naziva se “dopustivi

region” (feasible region).

50

3.1 REŠAVANJE PROBLEMA LINEARNOG PROGRAMIRANJA Problemi linearnog programiranja predstavljaju specijalni slučaj ograničenih

problema programiranja čija funkcija cilja, kao i ograničenja su linearne

funkcije po x .

Opšti matematički opis je:

Ograničenja su podeljena na:

linearna ograničenja tipa jednakosti eq eq

A x B ,

linearna ograničenja tipa nejednakosti Ax B

ograničenja po promenljivim m M

x x x

Postoji veliki broj algoritama za ovu vrstu optimizacije. Simpleks algoritam je

jedan od najefikasnijih i implementiran je u Matlab funkciji linprog().

51

, , , ,eq eq

f A b A b imaju isto značenje kao u opisu optimizacionog problema, dok

su: ,m M

x lb x ub

52

Primer 12. Rešiti sledeći problem linearnog programiranja

Rešenje.

f=[-2 -1 -4 -3 -1];

A=[0 2 1 4 2; 3 4 5 -1 -1];

B=[54; 62];

Ae=[]; Be=[];

xm=[0, 0, 3.32, 0.678, 2.57];

xM=[inf, inf, inf, inf, inf];

ff=optimset;

ff.TolX=1e-15;

ff.TolFun=1e-10;

ff.TolCon=1e-9;

[x,f_opt,flag,izlaz]=linprog(f,A,B,Ae,Be,xm,xM,ff)

Primer 13. Rešiti sledeći problem linearnog programiranja

53

Rešenje.

% Uzimamo negativnu funkciju zbog max

f=-[3/4,-150,1/50,-6];

A=[1/4,-60,-1/50,9; 1/2,-90,-1/50,3]; B=[0;0];

Aeq=[]; Beq=[];

xm=[-5;-5;-5;-5];

xM=[Inf;Inf;1;Inf];

ff=optimset;

ff.TolX=1e-15; ff.TolFun=1e-10; TolCon=1e-9;

[x,f_opt,flag,izlaz]=linprog(f,A,B,Aeq,Beq,xm,xM,[0;0;0;0],ff)

54

3.2 REŠAVANJE PROBLEMA KVADRATNOG PROGRAMIRANJA Problemi kvadratnog programiranja su druga kategorija jednostavnih

optimizacionih problema sa ograničenjima.

U kvadratnom programiranju, funkcija cilja je kvadratna funkcija promenljive

x . Ograničenja su još uvek linearna.

Opšta forma kvadratnog programiranja je

Ovde se sa Tx Hx opisuju članovi tipa 2

ix i

i jx x .

U Matlabu postoji funkcija quadprog() koja rašava problem kvadratnog

programiranja.

55

x0 – početna vrednost za rešenje

56

Primer 14. Rešiti sledeći problem kvadratnog programiranja

Rešenje.

Najpre zapisujemo funkciju cilja u pogodnom obliku

% Uzimamo dvostruke koeficijente zbog (1/2)x’*H*x

H=diag([2,2,2,2]);

f=[-2,-4,-6,-8];

A=[1,1,1,1; 3,3,2,1];

B=[5;10];

Aeq=[]; Beq=[];

lb=[0 0 0 0];

[x,f_opt]=quadprog(H,f,A,B,Aeq,Beq,lb,[],[])

57

3.3 REŠAVANJE OPŠTIH NELINEARNIH OPTIMIZACIONIH PROBLEMA Opšti oblik nelinearnog optimizacionog problema je:

gde je 1 2

T

nx x x x vektor promenljivih, a

( ) 0G x predstavlja ograničenja koja mogu biti tipa nejednakosti (linearna,

nelinearna), tipa jednakosti (linearna, nelinearna) i ograničenja po slobodnim

promenljivim.

Prema tome, opšti oblik nelinearnog optimizacionog problema izgleda:

58

U Matlabu postoji funkcija fmincon() za rešavanje nelinearne optimizacije.

fun - m-funkcija ili anonimna funkcija kojom se opisuje funkcija cilja.

x0 - početna vrednost za rešenje.

A, b – linearna ograničenja tipa nejednakosti

Aeq, beq - linearna ograničenja tipa jednakosti

lb, ub – ograničenja po promenljivim

nonlcon - m-funkcija za opisivanje nelinearnih ograničenja:

prvi izlaz ove funkcije predstavlja nelinearna ograničenja tipa nejednakosti,

drugi izlaz ove funkcije predstavlja nelinearna ograničenja tipa jednakosti.

59

Primer 15. Rešiti sledeći problem nelinearnog programiranja

Rešenje 1.

f=@(x)1000-x(1)*x(1)-2*x(2)*x(2)-x(3)*x(3)-x(1)*x(2)-x(1)*x(3);

x0=[1;1;1];

xm=[0;0;0]; xM=[];

A=[]; B=[];

Aeq=[]; Beq=[];

[x,f_opt,c,d]=fmincon(f,x0,A,B,Aeq,Beq,xm,xM,@opt_con1)

function [c,ceq]=opt_con1(x)

% Nelinearna ogranicenja

% Ogranicenja tipa jednakosti

ceq=[x(1)*x(1)+x(2)*x(2)+x(3)*x(3)-25; …

8*x(1)+14*x(2)+7*x(3)-56];

c=[]; % Ogranicenja tipa nejednakosti

end

60

Rešenje 2. Pošto je drugo ograničenje tipa jednakosti linearno, ono se može

izbaciti iz nelinearnih ograničenja

ceq=[x(1)*x(1)+x(2)*x(2)+x(3)*x(3)-25; 8*x(1)+14*x(2)+7*x(3)-56];

i pridružiti linearnim ograničenjima.

f=@(x)1000-x(1)*x(1)-2*x(2)*x(2)-x(3)*x(3)-x(1)*x(2)-x(1)*x(3);

x0=[1;1;1];

xm=[0;0;0]; xM=[];

A=[]; B=[];

Aeq= [8,14,7]; Beq= 56;

[x,f_opt,c,d]=fmincon(f,x0,A,B,Aeq,Beq,xm,xM,@opt_con2)

function [c,ceq]=opt_con2(x) % Nelinearna ogranicenja

% Ogranicenja tipa jednakosti

ceq=x(1)*x(1)+x(2)*x(2)+x(3)*x(3)-25;

c=[]; % Ogranicenja tipa nejednakosti

end

61

Primer 16. Rešimo nelinearni problem iz Primera 15 koristeći gradijent.

Rešenje. Odredimo Jakobijan za funkciju cilja

syms x1 x2 x3;

f=1000-x1*x1-2*x2*x2-x3*x3-x1*x2-x1*x3;

J=jacobian(f,[x1,x2,x3])

Rezultat je:

J =

[ - 2*x1 - x2 - x3, - x1 - 4*x2, - x1 - 2*x3]

Program:

x0=[1;1;1]; xm=[0;0;0]; xM=[]; A=[]; B=[]; Aeq=[]; Beq=[];

x,f_opt,c,d]=fmincon(@opt_fun2,x0,A,B,Aeq,Beq,xm,xM,@opt_con1)

function [c,ceq]=opt_con1(x) % Nelinearna ogranicenja

% Ogranicenja tipa jednakosti

ceq=[x(1)*x(1)+x(2)*x(2)+x(3)*x(3)-25; 8*x(1)+14*x(2)+7*x(3)-56];

c=[]; % Ogranicenja tipa nejednakosti

end

function [y,Gy]=opt_fun2(x) % funkcija i njen Jakobijan

y=1000-x(1)*x(1)-2*x(2)*x(2)-x(3)*x(3)-x(1)*x(2)-x(1)*x(3);

Gy=[-2*x(1)-x(2)-x(3); -4*x(2)-x(1); -2*x(3)-x(1)];

end

62

3.4 OPTIMIZACIJA UZ POMOĆ GRAFIČKOG INTERFEJSA Da bi pokrenuli grafičku aplikaciju za optimizaciju koristimo funkciju

optimtool

Kao rezultat izvršavanja ove funkcije kreira se grafički prozor

63

64

Primer. Odrediti minimuma sledeće funkcije

pod uslovima

koristeći grafički interfejs. Početno pogađanje je

13x i

21x .

funkcija cilja

nelinearne nejednakosti

linearne nejednakosti

ograničenje

65

Rešenje.

1. Korak: Pišemo m-funkciju cilja objecfun.m:

function f = objecfun(x)

f = x(1)^2 + x(2)^2;

end

2. Korak: Pišemo m-funkciju nelinearnih ograničenja nonlconstr.m (sadrži ograničenja tipa nejednakosti i jednakosti):

function [c,ceq] = nonlconstr(x)

% Nelinearna ogranicenja

% Ograničenja tipa nejednakosti (<=0)

c = [-x(1)^2 - x(2)^2 + 1;

-9*x(1)^2 - x(2)^2 + 9;

-x(1)^2 + x(2);

-x(2)^2 + x(1)];

% Ogranicenja tipa jednakosti ne postoje

ceq = [];

end

66

3. Korak: Podešavamo i izvršavamo optimizacioni problem pomoću grafičkog interfejsa

67

68

69

70

Izborom opcije iz menija File/Generate Code može se snimiti Matlab programski kod u obliku m-funkcije koju smo nazvali Fun_minimizacija.m.

Ovaj kod vrši prethodu optimizaciju, pri čemu zahteva

1. početno pogađanje x0=[3; 1],

2. definisanje ciljne funkcije objecfun.m, 3. funkcije nelinearni nejednakosti nonlconstr.m 4. parametre linearnih nejednakosti Aineq=[-1 -1]; bineq=[-1]

5. parametre ograničenja lb=[0.5 -inf]

x0=[3; 1];

Aineq=[-1 -1];

bineq=[-1];

lb=[0.5 -inf];

[x,fval,exitflag,output,lambda,grad,hessian] =

Kod(x0,Aineq,bineq,lb)

71

Recommended