Documente Academic
Documente Profesional
Documente Cultură
Rezolvarea Numerică A Problemelor de Optimizare
Rezolvarea Numerică A Problemelor de Optimizare
113
(9.1.1)
n care cu g(x, ..., pa) = 0, g0(x0, ..., y0) = 0 i gf(xf, ..., yf) = 0 au fost exprimate
RTE, iar cu h(x, ..., pa) 0 au fost exprimate RTI.
B) Criteriul de optimizare. Criteriul de optimizare este exprimat n general prin
funcia obiectiv (numit i funcie criteriu sau funcie cost i abreviat FO) i
reflect atitudinea fa de FO, imprimat de problema de optimizare (PO).
FO servete la evaluarea numeric a diferitelor decizii, iar atitudinea
fa de FO trebuie s specifice sensul de variaie dorit al FO, minimizare sau
maximizare.
Funcia obiectiv este de regul o funcional notat cu J:
J : 0f R ,
(9.1.2)
= (t 0 , x 0 , t f , x f ) + E (x(t ), u (t ), t )dt .
(9.1.3)
t0
114
(9.1.4)
J=
(9.1.5)
t0
k f 1
E k (x k , u k ) ,
(9.1.6)
k = k0
(9.1.7)
criteriul de optimizare.
Mulimea U reprezint mulimea comenzilor admisibile, adic
mulimea funciilor de comand care apar n mulimea 0 f a proceselor
admisibile. Dac mulimea U este compact, n cazul minimizrii poate fi
exprimat rezultatul:
u = arg min J (u), u U .
(9.1.8)
Altfel spus, comanda optimal este acea funcie de comand admisibil care
minimizeaz funcia obiectiv J.
n cazul sistemelor discrete, n care comanda optimal este reprezentat
de un ir de vectori {u k 0 , u k 0 +1 , ! , u kf 1 } aplicat secvenial la intrarea
115
(9.1.9)
(9.2.1)
(9.2.2)
(9.2.3)
(9.2.4)
116
(9.2.5)
|| f v ( v k ) ||= 0
lim
k
(9.2.6)
f
v 2
f
, v = [v1
v n v = v *
v2
T
! vn ] .
(9.2.7)
117
2
v1
2 f
*
f vv ( v ) = v 2 v1
"
2
f
v n v1
2 f
v1v 2
2 f
v 22
2 f
v n v 2
2 f
v1 v n
2 f
"
, v = [v1
v 2 v n
2 f
"
v n2 v = v *
"
v2
T
! vn ] .
(9.2.8)
= f ( v k ), f
k +1
= f ( v k + s k d k ), g k = f v ( v k ), G k = f vv ( v k ) .
(9.2.9)
(9.3.1)
(9.3.2)
118
f ( v k + s k d k ) = min f ( v k + s d k ) .
(9.3.3)
s 0
(9.3.4)
Deci condiia (9.3.3) poate fi scris sub forma simpl (9.3.5) de problem cu
restricii de tip egalitate (PRE):
PRE : s k = arg min f 1 ( s ) .
(9.3.5)
s 0
a i + bi
.
2
(9.3.6)
1 + 5
3 5
, G = 1 F =
,
2
2
(9.3.7)
119
8. Se calculeaz Li = bi ai.
Dac Li , atunci se calculeaz s k =
a i + bi
i algoritmul este terminat.
2
(9.3.8)
(9.3.9)
c1
.
2c 2
(9.3.10)
+ f (s
k 1
)( s
k 2
s ) + f ( s )( s
k 1
k 2
(9.3.11)
)}
120
(9.3.12)
k +1
s k (g k ) T d k ,
(9.3.13)
(9.3.14)
k +1
s k (g k ) T d k .
(9.3.15)
121
+ (g k ) T s k d k + (1 / 2)( s k d k ) T G k ( s k d k ) =
= f
+ (g k ) T s k d k + (1 / 2)( s k ) 2 (d k ) T G k d k
(9.3.16)
(9.3.17)
(9.3.18)
(9.3.19)
(9.3.20)
122
(9.3.21)
Notnd:
y k = f v ( v k +1 ) f v ( v k ) = g k +1 g k
(9.3.22)
(9.3.23)
(9.3.24)
|| A || F =
a ij 2
(9.3.25)
i =1 j =1
1
k T
(t ) t k
[(y k B k t k )(t k ) T + t k (y k B k t k ) T ]
(y k B k t k ) T t k
[(t k ) T t k ] 2
.
k
(9.3.26)
k T
t (t )
1
k T
(y ) t k
[(y k B k t k )(y k ) T + y k (y k B k t k ) T ]
(y k B k t k ) T t k
[(y k ) T t k ] 2
;
k
(9.3.27)
k T
y (y )
- formula Broyden-Fletcher-Goldfarb-Shanno:
B k +1 = B k +
1
k T
(y ) t
y k (y k ) T
1
k T
k k
(t ) B t
B k t k (t k ) T B k ;
(9.3.28)
(9.3.29)
123
H k +1 y k = t k .
(9.3.30)
(9.3.31)
f (v k + s k d k )
n vecintarea
f ( v k + s k d k ) f ( v k ) + (g k ) T s k d k .
(9.3.32)
ns,
(g k ) T s k d k = s k (g k ) T d k s k || g k || 2 , d k ,
(9.3.33)
egalitatea avnd loc numai n cazul (9.3.31). Prin urmare, pentru orice pas sk >
0 alegerea direciei de cutare conform relaiei (9.3.31) asigur local
descreterea maxim posibil a funciei obiectiv f.
Algoritmul de calcul al punctului de minim v prin metoda
gradientului este prezentat n cele ce urmeaz:
0. Se alege un punct iniial v0 Rn astfel nct mulimea { v Rn | f(v) f(v0) }
s fie mrginit.
1. Se iniializeaz k = 0.
2. Se calculeaz g k = f v ( v k ) .
Dac || g k ||= 0 , atunci v = v k i algoritmul este oprit.
Altfel, se alege direcia d k = g k i se trece la pasul 3.
3. Se determin pasul sk utiliznd unul din algoritmii din paragrafele A sau B.
4. Se calculeaz v k +1 = v k + s k d k , se actualizeaz k prin nlocuirea lui k cu k+1
i se revine la pasul 2.
F. Metodele de gradient conjugat. Aceste metode au principalul avantaj c au
o convergen bun, iar numrul de operaii aritmetice necesare pe iteraie este
relativ redus. Prin urmare, aceste metode sunt utilizabile i n rezolvarea unor
PO de dimensiuni mari.
124
(9.3.34)
(g k ) T g k
(g k 1 ) T g k 1
(9.3.35)
(g k ) T (g k g k 1 )
(g k 1 ) T g k 1
(9.3.36)
(g k ) T (g k g k 1 )
(g k g k 1 ) T d k 1
(9.3.37)
125
f (v k + s k d k ) f
+ s k (g k ) T d k + (1 / 2)(s k ) 2 (d k ) T G k d k .
(9.4.1)
(9.4.2)
(9.4.3)
(9.4.4)
(9.4.5)
(9.4.6)
126
+ (g k ) T d + (1 / 2)d T G k d ,
supus la || d || k ,
(9.4.7)
n care k este o margine dat, care specific raza sferei cu centrul n vk, unde
este valabil aproximarea k (d) pentru f ( v k + d) .
Poate fi observat faptul c n cadrul acestei metode lungimea pasului
este egal cu unitatea.
Algoritmul general al metodei regiunii de ncredere pentru PFR
pornete cu elementele date: v0 Rn, 0 > 0, 0 < < 1 i const n parcurgerea
urmtorilor pai:
0. Iniializare. k = 0.
1. Test de convergen. Dac sunt satisfcute condiiile de convergen,
algoritmul este terminat cu soluia vk.
Altfel, se trece la pasul 2.
2. Determinarea direciei de cutare. Se calculeaz direcia de cutare dk ca
soluie a PO (9.4.7).
3. Calculul raportului dintre reducerea efectiv i cea predictat de model. Se
calculeaz:
k =
f (v k + d k ) f (v k )
k (d k ) k (0)
(9.4.8)
Altfel, v k +1 = v k .
5. Actualizarea modelului. Se actualizeaz k, se actualizeaz k prin nlocuire a
lui k cu k+1 i se revine la pasul 1.
Pentru aceast metod este caracteristic faptul c problema determinrii
direciei de cutare depinde numai de parametrul de control k. Deci, nu sunt
necesare modificri ale modelului local pentru controlul lungimii pasului, iar
toate ajustrile sunt efectuate automat prin actualizarea lui k (la pasul 5) pe
baza informaiei coninute n k .
127
(9.5.1)
c2
... c n ] .
j =1, n
(9.5.2)
j =1
128
s ( D k ) 2 (c A T k )
|| D k (c A T k ) ||
(9.5.3)
unde prin norma matricei a fost notat cea mai mare valoare singular a
acesteia, vectorul k este dat de (9.5.4):
k = [ A(Dk ) 2 AT ]1 A(Dk ) 2 c ,
(9.5.4)
D k (c A T k )
k
v j (c j A j )
|| , supus la (c j A j T k ) > 0, j = 1, n ,
(9.5.5)
129
Cromozomi
1100010101
0000100010
1000000001
0001100010
1101110101
0001000100
130
Funcie de
evaluare
9
7
6
5
5
4
7
8
9
10
1111111000
0000000001
1100001000
1111111111
3
3
2
1
Total: 45
131
132
133
,
l 1
(9.6.1)
fS
n
fi
(9.6.2)
i =1
1 n
fi .
n i =1
(9.6.3)
fS
f med
(9.6.4)
n ipoteza (9.6.5):
f S > f med ,
(9.6.5)
(9.6.6)
134
fS
1 p c
,
f med
l 1
(9.6.7)
135
(9.6.8)
136
137
function fit=fevaluare(v)
% Functie utilizata in definirea
% functiei de evaluare (performanta)
%
% v este variabila (elementul programabil).
%
% fit este valoarea functiei de evaluare.
%
fit=v.^3+3*v.^2;
Pentru a calcula valorile funciei de evaluare pentru populaia iniial
obinut anterior i reprezentat sub form de numere reale salvate n matricea
valreala, este apelat funcia fevaluare conform urmtoarei secvene de
comenzi Matlab:
>> fit=fevaluare(valreala)
fit =
96.7298
30.5043
79.1675
43.9525
60.6764
Funcia de evaluare total aferent ntregii populaii are valoarea:
>> sum(fit)
ans =
311.0304
Deci, valoarea cea mai performant este 3.7778 cu o valoare a funciei
de evaluare egal cu 96.7298, care corespunde cromozomului (irului) 1 al
populaiei.
Pentru a selecta prinii noii populaii este aplicat principiul ruletei,
descris anterior, conform cruia procentajul de selecie acordat unui anumit
cromozom este direct proporional cu valoarea funciei sale de evaluare. Pentru
vectorul de funcii de evaluare fit obinut, calculul procentajului este efectuat
conform urmtoarei secvene de comenzi:
>> procent=fit/sum(fit)*100
procent =
31.0998
9.8075
25.4533
14.1313
19.5082
>> sum(procent)
ans =
100
Prin urmare, ansele de selecie ca prini a cromozomilor 1, 2, 3, 4 i 5
sunt egale cu procentele 31.0998, 9.8075, 25.4533, 14.1313 i respectiv
19.5082, acestea fiind procentajele din circumferin exterioar a ruletei
corespunztoare celor 5 cromozomi.
Pentru efectuarea seleciei prinilor noii populaii este dezvoltat mai
nti funcia Matlab fitness, destinat calculului valorii funciei de evaluare
[P2]:
function [fit,fitsum]=fitness(cromozomi,funceval,a,b)
% Functie utilizata in calculul functiei de
% evaluare (performanta)
% a unei populatii (de cromozomi)
%
% cromozomi este matricea continand populatia
% de cromozomi,
% funceval este numele functiei Matlab
% in care este definita functia de evaluare,
% a si b sunt limitele intervalului caruia
% ii apartin valorile reale ale cromozomilor.
138
%
% fit este vectorul cu valorile functiei
% de evaluare pentru cromozomii populatiei,
% fitsum este suma valorilor functiei de
% evaluare, calculata pentru toti cromozomii.
%
[nrcrom lungcrom]=size(cromozomi); % dimensiuni
%
populatie
for i=1:nrcrom,
v(i)=fbinreal(cromozomi(i,:),a,b);
fit(i)=feval(funceval,v(i));
end
fitsum=sum(fit);
Apoi este dezvoltat funcia Matlab fselect, prezentat n continuare,
care implementeaz selecia prinilor noii populaii (generaiei urmtoare)
conform principiului ruletei i apeleaz funcia fitness:
function cromnoi=fselect(cromozomi,funceval,a,b)
% Functie utilizata in selectia celui mai
% bun cromozom pentru generatia urmatoare
%
% cromozomi este matricea continand populatia
% de cromozomi din care se face selectia,
% funceval este numele functiei Matlab
% in care este definita functia de evaluare
% (performanta),
% a si b sunt limitele intervalului caruia
% ii apartin valorile reale ale cromozomilor.
%
% cromnoi este matricea obtinuta continand
% cromozomii generatiei urmatoare.
%
[nrcrom lungcrom]=size(cromozomi); % dimensiuni
%
populatie
fit=[ ];
%
% Calculul functiei de evaluare:
[fit,fitsum]=fitness(cromozomi,funceval,a,b);
for cromind=1:nrcrom,
sval(cromind)=sum(fit(1,1:cromind));
end
%
% Selectia conform valorilor functiei de evaluare:
parnume=[ ];
for i=1:nrcrom,
rval=floor(fitsum*rand);
if rval<sval(1),
parnume=[parnume 1];
else
for j=1:nrcrom-1,
sl=sval(j);
su=sval(j)+fit(j+1);
if (rval>=sl) & (rval<=su),
parnume=[parnume j+1];
end
end
139
end
end
cromnoi(1:nrcrom,:)=cromozomi(parnume,:);
Aplicnd funcia fselect, este rezolvat selecia n vederea aplicrii
pasului de reproducere i sunt obinui urmtorii cromozomi:
>> popselect=fselect(cromozomi,'fevaluare',2,4)
popselect =
1
0
1
1
1
1 (cromozom 3)
1
0
0
1
0
0 (cromozom 5)
1
0
1
1
1
1 (cromozom 3)
1
0
1
1
1
1 (cromozom 3)
1
0
0
1
0
0 (cromozom 5)
Poate fi observat c au fost favorizai n procesul de selecie
cromozomul 3 care a fost triplicat i cromozomul 5 care a fost duplicat.
Pentru noua populaie, salvat n matricea popselect, funciile de
evaluare obin urmtoarele valori:
>> [fit,fitsum]=fitness(popselect,'fevaluare',2,4)
fit =
79.1675
fitsum =
358.8553
60.6764
79.1675
79.1675
60.6764
140
u=u-1;
end
%
% Selectia procentajului de reprodus aleator:
while length(indrep)~=u,
i=round(rand*nrcrom);
if i==0,
i=1;
end
if ind(i)~=-1,
indrep=[indrep i];
ind(i)=-1;
end
end
%
% Efectuare incrucisare cu un singur
% punct de incrucisare:
for i=1:2:u-1,
splitpos=floor(rand*lungcrom);
if splitpos==0,
splitpos=1;
end
i1=indrep(i);
i2=indrep(i+1);
genetemp=cromozomi(i1,splitpos+1:lungcrom);
crom1(i1,splitpos+1:lungcrom)=...
cromozomi(i2,splitpos+1:lungcrom);
crom1(i2,splitpos+1:lungcrom)=genetemp;
end
Aceast funcie este aplicat populaiei din matricea popselect,
rezultatul fiind obinut sub forma noii generaii salvate n matricea gennoua:
>> gennoua=freprod(popselect,.6)
gennoua =
1
0
1
1
1
1 (cromozom 3)
1
0
0
1
0
1 (cromozom obinut din
cromozomul 3 i 5)
1
0
1
1
1
0 (cromozom obinut din
cromozomul 3 i 5)
1
0
1
1
1
1 (cromozom 3)
1
0
0
1
0
0 (cromozom 5)
Poate fi observat faptul c noii membri ai populaiei (cromozomii
succesori) au fost obinui din cromozomii prini, 3 i 5, aplicnd ncruciarea
cu un singur punct de ncruciare a = 5.
Valorile funciilor de evaluare pentru noua generaie sunt:
>> [fit,fitsum]=fitness(gennoua,'fevaluare',2,4)
fit =
79.1675
62.2283
77.3545
79.1675
60.6764
fitsum =
358.5942
De data aceasta suma valorilor funciei de evaluare nu a mai fost
mbuntit.
n final, este efectuat mutaia nainte de a repeat acest ciclu de pai din
cadrul AG. Mutaia este implementat n funcia Matlab fmutatie:
141
function crom1=fmutatie(cromozomi,rata)
% Functie utilizata in mutatia unei
% populatii (de cromozomi) cu o anumita rata
%
% cromozomi este matricea continand populatia
% de cromozomi supusa mutatiei,
% rata este rata (probabilitatea) mutatiei,
%
% crom1 este matricea obtinuta continand
% populatia de cromozomi ca rezulta al
% mutatiei.
%
[nrcrom lungcrom]=size(cromozomi); % dimensiuni
%
populatie
crom1=cromozomi;
for i=1:nrcrom,
for j=1:lungcrom,
if rand<=rata,
if cromozomi(i,j)==1,
crom1(i,j)=0;
else
crom1(i,j)=1;
end
end
end
end
Aplicnd aceast funcie cu o valoare foarte mic a ratei de mutaie,
ansele de modificare a populaiei ntr-o singur generaie vor fi foarte mici.
Acest lucru este ilustrat n continuare, pentru o rat de mutaie de 0.005:
>> gen2=fmutatie(gennoua,.005)
gen2 =
1
0
1
1
1
1
1
0
0
1
0
1
1
0
1
1
1
0
1
0
1
1
1
1
1
0
0
1
0
0
Poate fi observat c nu a avut loc nici-o mutaie, obinndu-se aceeai
populaie, salvat n matricea gen2.
Trebuie menionat c n pasul de reproducere pot fi aplicai toi
operatorii genetici.
La acest moment s-a ncheiat producerea unei noi generaii. Apoi,
urmrind paii AG, aceleai procese de selecie i reproducere (utiliznd
operatorii genetici) vor fi repetate construindu-se noi generaii pn la
epuizarea timpului de cutare a soluiei optimale.
Pentru implementarea unui AG este dezvoltat funcia falggen
prezentat n continuare, care nglobeaz toi paii AG apelnd funciile Matlab
prezentate anterior n vederea rezolvrii unei probleme de maximizare:
function [valv,fmax]=falggen(fun,domeniu,biti,...
dimpop,numgenera,rata,propor)
% Functie utilizata in determinarea maximului
% unei functii utilizand algoritmi genetici
%
% fun este functia Matlab definita de utilizator
% continand expresia functiei obiectiv, functie
142
143
valv =
3.9059
fmax =
105.3556
ntruct soluia exact a PO este v = 4 , rezultatul obinut este rezonabil.
Observaie: Fiecare nou rulare a funciei falggen, care implementeaz
un AG utilizat n rezolvarea aceleiai PO, poate genera rezultate diferite
datorit naturii aleatoare a procesului de aplicare a operatorilor genetici.
n concluzie, dei sunt relativ leni n execuie, algoritmii genetici pot fi
aplicai n rezolvarea unor PO dificile cum sunt cele care au mai multe puncte
de extreme sau cele n care este cerut un punct de optim global. ntruct
algoritmii care implementeaz metodele numerice standard n rezolvarea
acestor probleme de optimizare pot conduce la eec, timpul mai lung de
execuie al AG este pe deplin compensat n astfel de situaii.
Funciile prezentate pot fi implementate i n alte variante. Astfel, de
exemplu, poate fi utilizat ncruciarea cu mai multe puncte de ncruciare, sau
selecia bazat pe principiul ruletei poate fi implementat n manier diferit
fa de cea prezentat. De asemenea, pot fi utilizate toolbox-uri Matlab
specializate n implementarea AG pentru rezolvarea PO i nu numai cum sunt
GAOT ori FLEXGA.
vopt=fminunc(fun,v0,options)
[vopt,valf]= fminunc(fun,v0,options)
144
145
146
end
%
% Solutia:
sol=v1; % valoarea optimala a variabilei v
% Numarul de iteratii este in variabila nriter
gradi=df; % gradientul functiei obiectiv in punctual
% v optimal
disp('Numarul de iteratii='); disp(nriter);
disp('Solutia optimala='); disp(v1);
disp('Gradientul in solutia optimala='); disp(df);
Observaii: 1. Funcia fmincg necesit definirea de ctre utilizator a trei
funcii Matlab.
2. n cadrul acestei funcii a fost utilizat funcia Matlab fminbnd
pentru rezolvarea problemei de optimizare unidimensional avnd ca soluie
valoarea optimal a pasului de cutare. Aceast funcie este nsoit de funcia
Matlab optimset, prezentat anterior, prin care sunt stabilite valorile unor
parametri afereni funciei fminbnd.
3. n cazul problemelor de optimizare la care funcia obiectiv este
complicat trebuie modificat corespunztor funcia de cutare liniar a pasului
optimal.
Funcia fmincg va fi aplicat n cele ce urmeaz n cadrul exemplului
9.1.
Exemplul 9.1: S se rezolve prin metoda gradientului conjugat n
versiunea Fletcher-Reeves urmtoarea PO [P2]:
PFR : v = arg min J = f ( v ) =
v
4
2
4
2
v1 16v1 + 5v1 v 2 16v 2 + 5v 2
+
,
2
2
v = [v1 v 2 ]T R 2 .
147
148
fractie(i)=reznorm/(v(i)*...
(cp(i)-A(:,i)'*lambda));
else
fractie(i)=inf;
end
end
pas=min(fractie)-alpha;
v1=v-pas*D2*rezdual/reznorm;
v=v1; contlista=0; B=[]; lista=[]; cb=[];
for k=1:n,
if v(k)>eps,
contlista=contlista+1;
lista=[lista k];
end
end
%
% Urmeaza partea doar pentru probleme
% nedegenerate:
if contlista==m,
for k=lista,
B=[B A(:,k)]; cb=[cb cp(k)];
end
solprimal=b'/B'; solv=solprimal;
break
end
iter=iter+1;
end
solf=cp*v;
i=1; fprintf('\nSolutia optimala=');
for j=lista,
fprintf('\nv(%1.0f)=%8.4f\',j,solv(i));
i=i+1;
end
fprintf('\nCelelalte variabile sunt ...
nule\n');
disp('Numarul de iteratii='); disp(iter);
disp('Valoarea minima a functiei obiectiv=');
disp(solf);
Funcia fbarnes va fi aplicat n continuare n cadrul exemplului 9.2.
Exemplul 9.2: S se rezolve prin metoda lui metoda lui Karmakar n
varianta lui Barnes urmtoarea problem de programare liniar [P2]:
PREI : v = arg max J = f ( v ) = 2v1 + v 2 + 4v 3 , v = [v1
v
v2
v 3 ]T R 3 ,
supus la:
v1 + v 2 + v 3 7 ,
v1 + 2v 2 + 3v3 12 ,
v1 , v 2 , v 3 0 .
149
v2
v3
v4
v 5 ]T R 5 ,
supus la:
v1 + v 2 + v 3 + v 4 = 7 ,
v1 + 2v 2 + 3v 3 + v 5 = 12 ,
v1 , v 2 , v3 , v 4 , v5 0 .
150