Documente Academic
Documente Profesional
Documente Cultură
2. fminbnd
Scop: rezolvă probleme de optimizare de tip o singura variabila apartinind unui
interval determinat
aşa încît
1
Argumentele de intrare:
fun : functia de minimizat fun este o functie care accepta un scalar x si returneaza un
scalarand returns a scalar f, care este functia obiectiv evaluata, calculata in punctul x.
Functia se poate scrie astfel:
x = fminbnd(@myfun,x1,x2)
unde myfun este o functie MATLAB asa incit
function f = myfun(x)
f = ... % calculeaza valoarea functiei in x.
fun poate fi si un obiect inline
x = fminbnd(inline('sin(x*x)'),x1,x2);
Optiuni:
Display tipurile afisarii 'off' nu se afiseaza iesirea; 'iter' se afiseaza iesirea dupa fiecare
iteratie; 'final' se afiseaza doar iesirea finala.
MaxFunEvals numarul maxim permis pentru evaluarile functiei
MaxIter numarul maxim permis pentru iteratii
TolX limita tolerantei pentru x
function f = myfun(x)
f = (x-3).^2 - 1;
-se apeleaza procedura de optimizare:
2
x = fminbnd(@myfun,0,5)
ea genereaza solutia x=3, pentru care se obtine minimul
Limitari de utilizare : procedura cere ca functia sa fie continua si ofera doar minimul
local. Se foloseste un algoritm de cautare bazat pe sectiunea de aur si interpolari de tip
parabolic. Daca solutia este aproape de granita domeniului de definitie, procedura
converge lent catre solutie.
3. fmincon
Scop: determina minimul unei functii neliniare, cu mai multe variabile, care are
constringeri de tip neliniar
in conditiile:
Sintaxa:
x = fmincon(fun,x0,A,b)
x = fmincon(fun,x0,A,b,Aeq,beq)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2, ...)
[x,fval] = fmincon(...)
[x,fval,exitflag] = fmincon(...)
[x,fval,exitflag,output] = fmincon(...)
[x,fval,exitflag,output,lambda] = fmincon(...)
[x,fval,exitflag,output,lambda,grad] = fmincon(...)
3
[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(...)
4
[x,fval,exitflag,output,lambda,grad] = fmincon(...) returneaza valoarea gradientului lui
fun pentru solutia x.
[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(...) returneaza valoarea
hessenianului lui fun pentru solutia x.
Argumentele de intrare:
fun functia de minimizat fun accepta un scalar x si returneaza un scalar f, ce
reprezinta functia obiectiv evaluata in punctul x. Functia fun se scrie:
x = fmincon(@myfun,x0,A,b)
unde myfun este o functie MATLAB:
function f = myfun(x)
f = ... % calculeaza valoarea functiei in x
fun poate fi calculata si in forma inline:.
x = fmincon(inline('norm(x)^2'),x0,A,b);
Daca gradientul lui fun poate fi calculat si in plus parametrul functiei GradObj este
'on', setat prin intermediul functiei options = optimset('GradObj','on'), atunci functia
fun trebuie sa returneze ca si al doilea argument al iesirii valoarea gardientului g, ca
un vector, calculat in punctul x. prin verificarea valorii lui nargout functia poate evita
calcului vectorului g cind fun este apelata doar cu un argument de iesire (in cazul in
care algoritmul de optimizare are nevoie doar de f si nu de g ):
function [f,g] = myfun(x)
f = ... % calculeaza valoarea functiei in x
if nargout > 1 % fun apelata doar cu doua argumente la iesire
g = ... % calculeaza valoarea gradientului in x
end
Gradientul contine derivatele partiale ale lui f in punctul x. Astfel componenta I a lui
g este derivata partiala f respectind in raport cu componenta i a lui x.
Daca matricea nessian se poate calcula si daca se seteaza parametrul Hessian 'on',
prin options = optimset('Hessian','on'), atunci functia fun trebuie sa returneze valoarea
hessianului H, care este o matrice simetrica in x , ca si el treilea argument de iesire.
Prin verificarea valorii lui nargoutse poate evita calculul lui H cind fun este apelata
doar cu unul sau doua argumente de iesire (in cazul in care algoritmul de optimizare
are nevoie de valorile lui f si g dar nu si de H).
function [f,g,H] = myfun(x)
5
f = ... % calculeaza valoarea functiei obiectiv in x
if nargout > 1 % fun apelata cu doua argumente de iesire
g = ... % gradientul functiei calculat in x
if nargout > 2
H = ... % hessianul evaluat in x
end
Matricea hessian este matricea derivatelor partiale de ordin doi al lui f in punctul x.
Astfel componenta (i, j) a lui H este derivata partiala a doua, in raport cu xi ,xj, .
Matricea hessian este prin definitia o matrice de tip simetric
6
Daca nonlcon returneaza un vector c cu m componente iar x are lungimea n,unde n
este lungimea lui x0, atunci gradientul GC pentru c(x) ieste o matrice de dimensiune
n-by-m, unde GC(i,j) este derivata partiala a lui is c(j) in concordanta cu x(i) (asa incit
coloana j a lui GC este gradientul constringerii j de tip inecuatie c(j)). Similar, daca
ceq contine p ccomponente, gradientul GCeq al lui ceq(x) este o matrice de
dimensiunea n-by-px, where GCeq(i,j) este derivata partiala a lui is ceq(j) in
concordanta cu x(i) (asa incit coloana j a lui GCeq este gradientul constringerii j de tip
ecuatie ceq(j))
Argumente de iesire:
exitflag descrie conditiile de iesire
>0 functia converge catre solutia x
0 numarul maxim de functii evaluate prin algoritm a fost depasit
<0 functia nu converge catre o solutie
lambda contine lagrangeanul pentru solutia x. Structura este:
lower limita inferioara lb
upper limita superioara ub
ineqlin inecuatii liniare
eqlin ecuatii liniare
ineqnonlin inecuatii neliniare
eqnonlin ecuatii neliniare
output contine informatii despre optimizare, avind structura:
iterations numarul de iteratii considerate
funcCount numarul evaluarilor functiei.
algorithm algoritm folosit
cgiterations numarul de iteratii tip PCG (doar pentru algoritmii tip large-
scale).
stepsize marimea finala a pasului (pentru algoritmii medium-scale).
firstorderopt masura optimului de ordin prim (pentru algoritmii tip large-
scale).
Optiuni:
LargeScale este posibila folosirea algoritmilor large-scale daca se seteaza pe 'on'.
si medium-scale daca se seteaza pe 'off'.
7
Parametrii folositi de algoritmii tip medium-scale si large-scale:
Diagnostics printeaza informatiile diagnostic despre functia minimizata
Display tipurile afisarii 'off' nu se afiseaza iesirea; 'iter' se afiseaza iesirea dupa fiecare
iteratie; 'final' se afiseaza doar iesirea finala.
GradObj gardientul pentru functia obiectiv definite de utilizator. Se foloseste la
aplicatiile de tip large scale si este optionala folosirea la cele standard, medium scale
MaxFunEvals numarul maxim permis pentru evaluarile functiei
MaxIter numarul maxim permis pentru iteratii
TolCon limita tolerantei pentru incalcarea constringerilor
TolFun limita tolerantei pentru valorile functiei
TolX limita tolerantei pentru x
8
finite. Aceata metoda poate fi foarte dificila pentro problemele tip large-scale si din
acest motiv se apeleaza la structurile matriceale de tip matrici rare.
MaxPCGIter numarul maxim de iteratii tip PCG (preconditioned conjugate gradient)
PrecondBandWidth limita superioara a domeniului preconditionat pentru PCG. Pentru
unele probleme marirea domeniului reduce numarul de itaratii PCG..
TolPCG limita abaterii pentru oteratiile PCG
TypicalX valorile tipice ale lui x .
9
iar constringerile de tip inecuatii liniare
A*x-b= -720
4. fminimax
Scop: rezolvă probleme de tip minimax:
aşa încît
Sintaxa:
x = fminimax(fun,x0)
x = fminimax(fun,x0,A,b)
x = fminimax(fun,x0,A,b,Aeq,beq)
x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub)
x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2,...)
[x,fval] = fminimax(...)
[x,fval,maxfval] = fminimax(...)
[x,fval,maxfval,exitflag] = fminimax(...)
[x,fval,maxfval,exitflag,output] = fminimax(...)
[x,fval,maxfval,exitflag,output,lambda] = fminimax(...
Descriere:
10
fminimax minimizeaza cea mai defavorabila valoare dintr-un set de functii cu mai
multe variabile, pornind dintr-un punct initial estimat. Functiile minimizate pot fi
supuse restrictiilor.
x = fminimax(fun,x0) procedura pornesteste din punctul de start x0 si determina
solutia minimax x a functiei descrise in fun.
x = fminimax(fun,x0,A,b) rezolva probleme tip minimax care au restrictii de tip
inecuatii liniare A*x <= b.
x = fminimax(fun,x,A,b,Aeq,beq) rezolva probleme tip minimax care au restrictii de
tip ecuatii liniare Aeq*x = beq. Se seteaza A=[], b=[] daca nu exista inecuatii.
x = fminimax(fun,x,A,b,Aeq,beq,lb,ub) procedura defineste limitele
superioare/inferioanare ale variabilelor de proiectare, de design, x, astfel incit solutia
sa fie in domeniul lb <= x <= ub.
x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) rezolva probleme tip minimax care
au restrictii de tip inecuatii neliniare c(x) sau ecuatii de tip ceq(x) definite in nonlcon.
Procedura fminimax opyimizeaza asa incit c(x) <= 0 and ceq(x) = 0. Se seteaza lb=[] ,
ub=[] daca nu sunt specificate granitele domeniului.
x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) procedura optimizeaza
folosind parametrii specificati in structura options. Se utilizeaza optimset pentru
setarea parametrilor.
x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2,...)
procedura transmite problema dependenta de parametrii P1, P2, etc., direct functiilor
fun si nonlcon. Transfera matrici goale si place-holdere in cazul in care nu exista A, b,
Aeq, beq, lb, ub, nonlcon, options –daca argumentele acestea nu sunt necesare.
[x,fval] = fminimax(...) returneaza valoarea functiei obiectiv fun pentru solutia x.
[x,fval,maxfval] = fminimax(...) returneaza maximul valorii functiei pentru solutia x
[x,fval,maxfval,exitflag] = fminimax(...) returneaza o valoare exitflag care descrie
conditiile de iesire din procedura fminimax.
[x,fval,maxfval,exitflag,output] = fminimax(...) returneaza structura output care
contine informatii despre optimizare.
[x,fval,maxfval,exitflag,output,lambda] = fminimax(...) returneaza structura lambda
care contine multiplicatorii lagrange ai solutiei x.
11
fun functia ce urmeaza sa fie minimizta accepta la intrare vectorul x si returneaza sub
forma vectorului F, functia obiectiv evaluata in x. Functia fun poate fi scrisa:
x = fminimax(@myfun,x0) unde: myfun este o functie MATLAB de forma :
function F = myfun(x)
F = ... % calculeaza valorile functiei in x
Sau functia fun poate fi definita ca obiect inline
x = fminimax(inline('sin(x.*x)'),x0);
Pentru a minimiza cea mai defavorabila valoare ale oricaruia din elementele
vectorului F(x) ( min{max abs{F(x)} } ), se impart aceste obiective intre primele
elemente ale lui F si se foloseste optimset tpentru a seta parametrii MinAbsMax sa
aibe numarul acestor obiective.
Daca gradientul functiei obiectiv poate fi calculat si parametrul lui GradObj este setat
'on', prin functia options = optimset('GradObj','on') atunci functia fun trebuie sa
returneze ca al doilae argument de iesire, gradientul G, care este o matrice, calculat in
x. Prin verificarea valorii lui nargout functia poate calcula G cind myfun este apelata
cu doau un singur argument la iesire i (caz in care procedura are nevoie de valoarea
lui F dar nu si de G).
function [F,G] = myfun(x)
F = ... % calculeaza valorile functiei in x
if nargout > 1 % doua argumente de iesire
G = ... % gradient calculat in x
end
nonlcon: functia calculeaza constringerile de tip inegalitati neliniare si
constringerile de tip ecuatii neliniare . Functia are ca intrare vectorul x si
returneaza doi vectori : c si ceq. Vectorul c contine inecuatiile neliniare evaluate in x
iar vectorul ceq ecuatiile neliniare evaluate in x. Functia nonlcon se poate scrie:
x = fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon)
unde mycon este o functie MATLAB de tip:
function [c,ceq] = mycon(x)
ceq = ... % calculeaza ecuatiile neliniare in x.
Daca gradientul constringerilor poate fi calculat si parametrul din GradConstr este
setat 'on', prin options = optimset('GradConstr','on') atunci functia nonlcon trebuie sa
returneza ca argumente de iesire, al treilea si al patrulea, GC, gradientul lui c(x), si
GCeq, gradientul lui ceq(x). Prin verificarea valorii lui nargout functia poate evita
12
calculul lui GC si GCeq daca nonlcon ieste apelata cu numai doua argumente la iesire
(caz in care algoritmul de optimizare are nevoie doar de valorile c si ceq si nu de GC
and GCeq).
function [c,ceq,GC,GCeq] = mycon(x)
c = ... % inecuatii neliniare in x
ceq = ... % ecuatii neliniare in x
if nargout > 2 % nonlcon apelata cu 4 iesiri
GC = ... % gradientul inecuatiilor
GCeq = ... % gradientul ecuatiilor
end
Daca nonlcon returneaza un vector c cu m componente iar x are lungimea n,unde n
este lungimea lui x0, atunci gradientul GC pentru c(x) ieste o matrice de dimensiune
n-by-m, unde GC(i,j) este derivata partiala a lui is c(j) in concordanta cu x(i) (asa incit
coloana j a lui GC este gradientul constringerii j de tip inecuatie c(j)). Similar, daca
ceq contine p ccomponente, gradientul GCeq al lui ceq(x) este o matrice de
dimensiunea n-by-px, where GCeq(i,j) este derivata partiala a lui is ceq(j) in
concordanta cu x(i) (asa incit coloana j a lui GCeq este gradientul constringerii j de tip
ecuatie ceq(j))
Optiuni:
exitflag descrie conditiile de iesire
>0 functia converge catre solutia x
0 numarul maxim de functii evaluate prin algoritm a fost depasit
<0 functia nu converge catre o solutie
lambda contine lagrangeanul pentru solutia x. Structura este:
lower limita inferioara lb
upper limita superioara ub
ineqlin inecuatii liniare
eqlin ecuatii liniare
ineqnonlin inecuatii neliniare
eqnonlin ecuatii neliniare
maxfval maximul dintre valorile functiei evaluate la solutia x, vare este, maxfval =
max{fun(x)}.
output contine informatii despre optimizare, avind structura:
13
iterations numarul de iteratii considerate
funcCount numarul evaluarilor functiei.
algorithm algoritm folosit
Exemplu:
Determinati valorile care minimizeaza maximul valorilor setului de functii
, unde :
14
care cere valorile lui x pentru care se minimizeaza maximul valorii absolute a setului
de functii , se apeleaza procedura fminimax cu
comenzile :
x0 = [0.1; 0.1]; % se alege punctul de start
options = optimset('MinAbsMax',5); % se minimizeaza valorile absolute
[x,fval] = fminimax(@myfun,x0,[],[],[],[],[],[],[],options);
Dupa sapte iteratii, solutie este :
x=
4.9256
2.0796
fval =
37.2356 -37.2356 -6.8357 -7.0052 -0.9948
Daca constringerile de tip ecuatii nu formeaza un sistem independent, aceasta se
detecteaza in rezolvarea de tip quadratic, care este folosita de procedura si se
printeaza dependent daca parametrul Display este setat pe iter.
15