Laborator 7
Laborator 7
Laborator 7
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Toolbox-ul OPTIMIZATION<br />
Lucrarea nr. 7<br />
Toolbox-ul OPTIMIZATION al MATLAB conţine o serie de funcţii care realizează<br />
minimizarea (sau maximizarea) unor funcţii neliniare generale. In Tabelul 1 sunt prezentate<br />
cîteva dintre funcţiile disponibile în acest Toolbox pentru rezolvarea problemelor de<br />
minimizare.<br />
Tip<br />
problemă<br />
Minimizare<br />
scalară<br />
Minimizare<br />
fără<br />
restricţii<br />
Minimizare<br />
cu restricţii<br />
Tabelul 1<br />
Formularea problemei Funcţia<br />
f ( x)<br />
| x x x <br />
min <br />
fminbnd<br />
1<br />
f ( x)<br />
<br />
2<br />
min fminunc,<br />
fminsearch<br />
f<br />
( x)<br />
| c(<br />
x)<br />
0,<br />
ceq(<br />
x)<br />
0 <br />
min <br />
<br />
A<br />
x b,<br />
Aeq x beq,<br />
l x u<br />
fmincon<br />
Majoritatea rutinelor de optimizare necesită definirea unui fişier M-file care conţine funcţia ce<br />
urmează să fie minimizată. Sunt tratate separat problemele de dimensiuni mari (Large Scale) şi<br />
problemele de dimensiune medie.<br />
In continuare sunt descrise funcţii din Tabelul 1.<br />
fminbnd<br />
Scopul<br />
Determină minimul unei funcţii de o variabilă într-un interval fixat<br />
min f ( x)<br />
| x x x<br />
<br />
1<br />
Sintaxa<br />
x = fminbnd(fun,x1,x2)<br />
x = fminbnd(fun,x1,x2,options)<br />
[x,fval] = fminbnd(...)<br />
[x,fval,exitflag] = fminbnd(...)<br />
[x,fval,exitflag,output] = fminbnd(...)<br />
2<br />
Descriere<br />
x = fminbnd(fun,x1,x2) returnează o valoare x care este un minim local al funcţiei<br />
descrisă în fun (de obicei un M-file) în intervalul x1
[x,fval,exitflag] = fminbnd(...) returnează o valoare exitflag care<br />
descrie condiţia de ieşire a funcţiei fminbnd.<br />
Lucrarea nr. 7<br />
[x,fval,exitflag,output] = fminbnd(...) returnează o structură output<br />
care conţine informaţii despre optimizare .<br />
Argumente<br />
fun funcţia de minimizat<br />
options opţiuni ale parametrilor de optimizare; fminbnd utilizează următoarele<br />
structuri:<br />
Display - nivelul de afişare. ‘off’ nu afişează ieşirea; ‘iter’ afişează ieşirea după<br />
fiecare iteraţie; ‘final’ afişează numai ieşirea finală;<br />
MaxFunEvals - numărul maxim de evaluări ale funcţiei;<br />
MaxIter - numărul maxim de iteraţii;<br />
TolX - toleranţa de terminare pentru x;<br />
exitflag descrie condiţia de ieşire:<br />
> 0 funcţia a convers la soluţia x;<br />
0 numărul maxim de evaluări ale funcţiei sau iteraţii a fost atins;<br />
< 0 funcţia nu a convers la o soluţie;<br />
output o structură ale cărei cîmpuri conţine informaţii despre optimizare:<br />
output.iterations - numărul de iteraţii efectuate;<br />
output.algorithm - algoritmul utilizat;<br />
output.funcCount - numărul de evaluări ale funcţiei.<br />
Algortitmul<br />
Se bazează pe metoda de căutarea a secţiunii de aur şi pe interpolarea parabolică.<br />
Limitări<br />
Funcţia de minimizat trebuie să fie continuă;<br />
Rezultatul este un minim local;<br />
fminbnd tratează variabile reale.<br />
Exemplu<br />
Determinarea minimului functiei f(x) = (x-3) 2 -1 in intervalul (0, 5)<br />
Pasul 1: Se scrie un fisier M<br />
function f = objfun2(x)<br />
f = (x-3).^2-1;<br />
Pasul 2: Se apeleaza rutina de optimizare<br />
x=fminbnd('objfun2',0,5)<br />
Rezulta solutia<br />
x = 3<br />
2
fminunc<br />
Scopul<br />
Determină minimul unei funcţii de mai multe variabile, fără restricţii<br />
min f ( x)<br />
<br />
Sintaxa<br />
x = fminunc(fun,x0)<br />
x = fminunc(fun,x0,options)<br />
x = fminunc(fun,x0,options,P1,P2,...)<br />
[x,fval] = fminunc(...)<br />
[x,fval,exitflag] = fminunc(...)<br />
[x,fval,exitflag,output] = fminunc(...)<br />
[x,fval,exitflag,output,grad] = fminunc(...)<br />
[x,fval,exitflag,output,grad,hessian]=fminunc(...)<br />
Lucrarea nr. 7<br />
Descriere<br />
fminunc determină minimul unei funcţii scalare de mai multe variabile, pornind de la o<br />
estimare iniţială.<br />
x = fminunc(fun,x0) porneşte de la punctul x0 şi determină un minim local x al<br />
funcţiei descrisă în fun. x0 poate fi un scalar, un vector sau o matrice.<br />
x = fminunc(fun,x0,options) realizează minimizarea cu parametrii de optimizare<br />
specificaţi în structura options.<br />
Parametrii de optimizare pot fi Display, TolX, TolFun, DerivativeCheck,<br />
Diagnostics, GradObj, HessPattern, LineSearchType, Hessian,<br />
HessUpdate, MaxFunEvals, MaxIter, DiffMinChange, DiffMaxChange,<br />
LargeScale, MaxPCGIter, PrecondBandWidth, TolPCG, TypicalX.<br />
Se utilizează opţiunea GradObj pentru ca fun să poată returna două argumente de ieşire, unde<br />
al doilea argument, este derivata parţială de ordinul I a funcţiei în x.<br />
Se utilizează opţiunea Hessian pentru ca fun să poată returna trei argumente de ieşire,<br />
unde al doilea argument este derivata parţială a funcţiei, în x, iar al treilea argument este<br />
derivata parţială de ordinul 2 a funcţiei (hessianul) în x.<br />
x = fminunc(fun,x0,options,P1,P2,...) trece parametrii P1, P2, etc. direct<br />
în funcţia fun.<br />
[x,fval] = fminunc(...) returnează valoarea funcţiei obiectiv, fval, pentru soluţia<br />
x.<br />
[x,fval,exitflag] = fminunc(...) returnează o valoare exitflag care<br />
descrie condiţia de ieşire.<br />
[x,fval,exitflag,output] = fminunc(...) returnează o structură output<br />
care conţine informaţii despre optimizare .<br />
[x,fval,exitflag,output,grad] = fminunc(...) returnează în grad<br />
valoarea gradientului funcţiei fun pentru soluţia x.<br />
[x,fval,exitflag,output,grad,hessian]=fminunc(...)<br />
returnează în hessian valoarea hessianului funcţiei fun pentru soluţia x.<br />
3
Argumente<br />
fun funcţia de minimizat<br />
Lucrarea nr. 7<br />
options opţiuni ai parametrilor de optimizare. Valorile acestor parametri pot fi atribuite<br />
sau modificate utilizînd funcţia optimset. Unii parametri sunt aplicabili pentru toţi<br />
algoritmii, iar unii sunt relevanţi numai cînd se utilizează tehnici de optimizare pentru probleme<br />
de dimensiuni mari:<br />
LargeScale - se utilizează (dacă este posibil) tehnici de optimizare pentru probleme<br />
de dimensiuni mari cînd este 'on'.<br />
Parametrii utilizaţi de tehnicile de optimizare pentru problemele de dimensiuni medii şi pentru<br />
cele de dimensiuni mari sunt:<br />
Diagnostics – tipăreşte informaţii despre funcţia de minimizat t;<br />
Display - nivelul de afişare. 'off' nu afişează ieşirea; 'iter' afişează ieşirea<br />
după fiecare iteraţie; 'final' afişează numai ieşirea finală;<br />
GradObj – gradientul funcţiei obiectiv definit de utilizator. Gradientul trebuie să fie<br />
furnizat pentru tehnicile de optimizare ale problemelor de dimensiuni mari. Este opţional<br />
pentru celelalte probleme;<br />
MaxFunEvals - numărul maxim de evaluări ale funcţiei;<br />
MaxIter - numărul maxim de iteraţii;<br />
TolFun - toleranţa de terminare pentru valoarea funcţiei;<br />
TolX - toleranţa de terminare pentru x.<br />
Parametrii utilizaţi numai de tehnicile de optimizare pentru problemele de dimensiuni mari sunt:<br />
Hessian – Hessianul funcţiei obiectiv, definit de utilizator;<br />
HessPattern – Modelul de matrice rară al Hessianului pentru diferenţe finite;<br />
MaxPCGIter – Numărul maxim de iteraţii PCG (gradient conjugat cu<br />
precondiţionare);<br />
PrecondBandWidth – Lăţimea benzii superioare de precondiţionare pentru PCG.<br />
Implicit se foloseşte precondiţionare diagonală (lăţimea benzii superioare este 0);<br />
TolPCG – Toleranţa de terminare pentru iteraţia PCG;<br />
TypicalX –Valori x tipice .<br />
Parametrii utilizaţi numai de tehnicile de optimizare pentru problemele de dimensiuni medii<br />
sunt:<br />
DerivativeCheck – Comparaţia valorilor gradientului introdus de utilizator cu<br />
derivatele obţinute;<br />
DiffMaxChange – Modificarea maximă a variabilelor pentru gradienţii obţinuţi prin<br />
diferenţe finite;<br />
DiffMinChange – Modificarea minimă a variabilelor pentru gradienţii obţinuţi prin<br />
diferenţe finite;<br />
LineSearchType – Alegerea algoritmului de căutare liniară.<br />
exitflag descrie condiţia de ieşire:<br />
> 0 funcţia a convers la soluţia x;<br />
0 numărul maxim de evaluări ale funcţiei sau iteraţii a fost atins;<br />
< 0 funcţia nu a convers la o soluţie.<br />
output o structură ale cărei cîmpuri conţine informaţii despre optimizare:<br />
output.iterations - numărul de iteraţii efectuate;<br />
output.algorithm - algoritmul utilizat;<br />
4
output.funcCount - numărul de evaluări ale funcţiei;<br />
output.cgiterations – numărul de iteraţii pentru PCG;<br />
output.stepsize – mărimea pasului final;<br />
output.firstorderopt – norma gradientului pentru<br />
soluţia x.<br />
Lucrarea nr. 7<br />
Algortitmul<br />
Pentru probleme de dimensiuni mari se utilizează procedura regiunii de încredere. Fiecare<br />
iteraţie implică aproximarea soluţiei unui sistem liniar mare folosind gradienţi conjugaţi cu<br />
precondiţionare.<br />
Pentru probleme de dimensiuni medii se foloseşte metoda BFGS. Formula DFP, care<br />
aproximează inversa hessianului este utilizată cînd opţiunea HessUpdate este setată<br />
'dfp'. O metodă a pasului descendent este utilizată cînd opţiunea HessUpdate este setată<br />
'steepdesc'.<br />
Limitări<br />
Funcţia de minimizat trebuie să fie continuă.<br />
Rezultatul este un minim local.<br />
Exemplu<br />
x1 2 2<br />
Determinarea minimului functiei ( x)<br />
e 4x 2x<br />
4x<br />
x 2x<br />
1<br />
Pasul 1: Se scrie un fişier M<br />
f 1 2 1 2 2<br />
function f=objfun1(x)<br />
f=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);<br />
Pasul 2: Se apeleaza rutina de optimizare<br />
x0=[-1 1]; %estimarea initiala<br />
options=optimset('LargeScale','off');<br />
[x,fval,exitflag,output]=fminunc('objfun1',x0,options);<br />
Rezulta solutia<br />
x = 0.5000 -1.0000<br />
output =<br />
iterations: 7<br />
funcCount: 40<br />
stepsize: 1<br />
firstorderopt: 8.199477441775223e-004<br />
algorithm: 'medium-scale: Quasi-Newton line search'<br />
5
fmincon<br />
Scopul<br />
Determină minimul unei funcţii de mai multe variabile, în prezenţa restricţiilor:<br />
f<br />
( x)<br />
| c(<br />
x)<br />
0,<br />
ceq(<br />
x)<br />
0 <br />
min <br />
<br />
A<br />
x b,<br />
Aeq x beq,<br />
l x u<br />
Lucrarea nr. 7<br />
Sintaxa<br />
x = fmincon(fun,x0,A,b)<br />
x = fmincon(fun,x0,A,b,Aeq,beq)<br />
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)<br />
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)<br />
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon, options)<br />
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon, options, P1,P2,)<br />
[x,fval] = fmincon(...)<br />
[x,fval,exitflag] = fmincon(...)<br />
[x,fval,exitflag,output] = fmincon(...)<br />
[x,fval,exitflag,output,lambda] = fmincon(...)<br />
[x,fval,exitflag,output,lambda,grad] = fmincon(...)<br />
[x,fval,exitflag,output,lambda,grad,hessian]=fmincon(...)<br />
Descriere<br />
x = fmincon(fun,x0,A,b) porneşte de la punctul x0 şi determină un minim x al<br />
funcţiei descrisă în fun supusă la restricţiile de inegalitate A*x
Lucrarea nr. 7<br />
[x,fval,exitflag,output,lambda,grad] = fmincon(...) returnează în<br />
grad valoarea gradientului funcţiei fun pentru soluţia x.<br />
[x,fval,exitflag,output,lambda,grad,hessian]= fmincon(...)<br />
returnează în hessian valoarea hessianului funcţiei fun pentru soluţia x.<br />
Argumente<br />
fun funcţia de minimizat.<br />
Se utilizează opţiunea GradObj 'on' pentru ca fun să poată returna două argumente de ieşire,<br />
unde al doilea argument, este derivata parţială de ordinul I a funcţiei în x.<br />
Se utilizează opţiunea Hessian 'on' pentru ca fun să poată returna trei argumente de<br />
ieşire, unde al doilea argument este derivata parţială a funcţiei, în x, iar al treilea argument este<br />
derivata parţială de ordinul 2 al funcţiei (hessianul) in x.<br />
nonlcon Funcţia care calculează restricţiile de inegalitate neliniare c(x)
Lucrarea nr. 7<br />
DerivativeCheck – Compară valorile gradientului introdus de utilizator cu<br />
derivatele obţinute;<br />
DiffMaxChange – Modificarea maximă a variabilelor pentru gradienţii obţinuţi prin<br />
diferenţe finite;<br />
DiffMinChange – Modificarea minimă a variabilelor pentru gradienţii obţinuţi prin<br />
diferenţe finite;<br />
LineSearchType – Alegerea algoritmului de căutare liniară.<br />
exitflag descrie condiţia de ieşire:<br />
> 0 funcţia a convers la soluţia x;<br />
0 numărul maxim de evaluări ale funcţiei sau iteraţii a fost atins;<br />
< 0 funcţia nu a convers la o soluţie.<br />
lambda o structură care conţine multiplicatorii Lagrange pentru soluţia x:<br />
lambda.lower pentru limitele inferioare lb;<br />
lambda.upper pentru limitele superiore ub;<br />
lambda.ineqlin pentru inegalităţi liniare;<br />
lambda.eqlin pentru egalităţi liniare;<br />
lambda.ineqnonlin pentru inegalităţi neliniare;<br />
lambda.eqnonlin pentru egalităţi neliniare.<br />
output o structură ale cărei cîmpuri conţine informaţii despre optimizare:<br />
output.iterations - numărul de iteraţii efectuate;<br />
output.algorithm - algoritmul utilizat;<br />
output.funcCount - numărul de evaluări ale funcţiei;<br />
output.cgiterations – numărul de iteraţii pentru PCG;<br />
output.stepsize – mărimea pasului final;<br />
output.firstorderopt – norma gradientului pentru<br />
soluţia x.<br />
Algortitmul<br />
Pentru probleme de dimensiuni mari se utilizează procedura regiunii de încredere. Fiecare<br />
iteraţie implică aproximarea soluţiei unui sistem linear mare folosind metoda gradientului<br />
conjugat cu precondiţionare.<br />
Pentru probleme de dimensiuni medii se foloseşte metoda programării pătratice secvenţiale. La<br />
fiecare iteraţie se rezolvă o subproblemă de programare pătratică. O estimare a hessianului<br />
lagrangeanului este actualizată la fiecare iteraţie folosind formula BFGS.<br />
Limitări<br />
Funcţia de minimizat şi restricţiile trebuie să fie continue.<br />
Rezultatul este un minim local.<br />
Funcţia obiectiv şi restricţiile trebuie să returneze valori reale.<br />
Exemplu<br />
x1 2 2<br />
Determinarea minimului functiei ( x)<br />
e 4x 2x<br />
4x<br />
x 2x<br />
1<br />
supusă la restricţiile:<br />
x<br />
1<br />
x<br />
x<br />
1<br />
2<br />
x<br />
x<br />
2<br />
1<br />
f 1 2 1 2 2<br />
x<br />
2<br />
10<br />
0<br />
Pasul 1: Se scrie un M-file pentru restricţii:<br />
1.<br />
5<br />
8
function [c, ceq]=confun1(x)<br />
% restrictii neliniare de inegalitate<br />
c=[1.5+x(1)*x(2)-x(1)-x(2);-x(1)*x(2)-10];<br />
% restrictii neliniare de egalitate<br />
ceq=[];<br />
Pasul 2: Se apeleaza rutina de optimizare:<br />
Lucrarea nr. 7<br />
x0=[-1 1]; %estimarea initiala<br />
options=optimset('LargeScale','off');<br />
[x,fval]=fmincon('objfun1',x0,[],[],[],[],[],[],'confun1',options);<br />
Rezulta soluţia:<br />
x =<br />
fval =<br />
-9.547405025104272e+000 1.047405025104273e+000<br />
2.355037962417515e-002<br />
Aplicaţie: Problemă de sinteză optimală a unei bobine<br />
Se consideră o bobină multistrat cu secţiune transversală rectangulară şi miez din aer.<br />
Geometria acestui dispozitiv simplu este descrisă prin raza a, lungimea b, adîncimea c şi<br />
numărul de spire N; aceste patru variabile constituie vectorul parametrilor de proiectare x. Se<br />
consideră o repartiţie uniformă a curentului în secţiunea transversală (model la joasă frecvenţă)<br />
şi se neglijează distanţa de izolaţie dintre spire şi dintre straturi.<br />
a<br />
b<br />
Fig. 1 Modelul bobinei<br />
Parametrul global care identifică bobina este inductanţa L. Există o serie de formule de<br />
calcul aproximativ al inductanţei L, cea mai simplă fiind formula lui Middendorf:<br />
2 2<br />
0.<br />
8a<br />
N / b<br />
L <br />
9 6a<br />
/ b 10c<br />
/ b<br />
c<br />
unde L este exprimat în H şi parametrii geometrici sunt exprimaţi în inch (1 inch = 25.4mm).<br />
Pentru determinarea formei optime a unei astfel de bobine pot fi formulate o serie de<br />
probleme dependente de funcţia obiectiv şi de restricţii. Problema clasică ce a fost prima dată<br />
formulată de Maxwell este următoarea: să se determine vectorul x = (a,b,c,N) astfel încît L(x)<br />
să fie maxim pentru o lungime l şi o secţiune S ale conductorului de bobinaj date. Deoarece L, l<br />
= 2Na şi S =bc/N sunt funcţii neliniare de x, aceasta este o problemă de optimizare neliniară.<br />
9
Aplicaţie numerică: l = 10 m şi S = 1 mm 2 .<br />
Lucrarea nr. 7<br />
Cazul 1. Impunînd lungimea l şi secţiunea S, se pot exprima c şi N ca funcţii de a şi b. Astfel,<br />
problema poate fi redusă la maximizarea fără restricţii a inductanţei L ca funcţie de două<br />
variabile. Funcţia L are un maxim pentru 2a = 3b şi b = c; valorile optime pentru parametrii<br />
de proiectare sunt prezentate în tabelul 1.<br />
Cazul 2. Se rezolvă problema ca fiind o problemă de maximizare cu restricţii a funcţiei L de<br />
patru variabile. Se utilizează funcţia Matlab fmincon. Valorile optime pentru parametrii de<br />
proiectare sunt prezentate în tabelul 1.<br />
Caz L[H] a[mm] b[mm] c[mm] N[spire]<br />
1 279.91 15.85 10.566 10.566 101<br />
2 279.7 15.84 10.564 9.508 100<br />
Tabelul 1<br />
O altă problemă de sinteză poate fi formulată astfel: să se determine x = (a,b,c,N) astfel<br />
încît lungimea conductorului de bobinaj l să fie minimă pentru valori prescrise ale inductanţei<br />
L(x) şi ale secţiunii S a conductorului de bobinaj.<br />
Sursa MATLAB bob_obj.m (funcția obiectiv)<br />
function f=bob_obj(x)<br />
% functia obiectiv<br />
f=-0.8/2.54*(x(1)^2*(x(4)^2)/x(2))/(9+6*x(1)/x(2)+10*x(3)/x(2));<br />
Sursa MATLAB bob_restr.m (restricțiile problemei)<br />
function [c, ceq]=bob_restr(x)<br />
% restrictii neliniare de inegalitate<br />
c=[];<br />
% restrictii neliniare de egalitate<br />
ceq=[2*pi*x(4)*x(1)-1e3;x(2)*x(3)/x(4)-1e-2];<br />
Sursa MATLAB (m-file)<br />
% Programul principal<br />
x0=[1 1 1 10]; %estimarea initiala<br />
options=optimset('LargeScale','off');<br />
ub=[2 2 2 200];<br />
[x,fval,exitflag,output]=fmincon('bob_obj',x0,[],[],[],[],[],ub,'bob_restr',option<br />
s)<br />
10
Aplicaţie: Sinteza optimală a unui inductor cu flux magnetic transversal<br />
Lucrarea nr. 7<br />
Pentru obţinerea unui randament electric ridicat al unui sistem de încălzire în flux<br />
magnetic transversal trebuie luaţi în considerare o serie de parametri. Este necesară analizarea<br />
efectului întrefierului, Fig. 2, dimensiunilor crestăturii, pasului polar, grosimii benzii şi a<br />
frecvenţei asupra randamentului.<br />
Fig. 2. Geometria unui inductor cu flux transversal<br />
Se propune o problemă de sinteză optimală a unui inductor cu flux magnetic transversal care<br />
urmăreşte obţinerea unui randament electric maxim. Funcţia obiectiv este reciproca<br />
randamentului electric al sistemului definit astfel:<br />
P<br />
<br />
P<br />
b<br />
b<br />
<br />
p<br />
unde Pb este puterea indusă în bandă şi p sunt pierderile de putere activă, respectiv puterea<br />
activă în inductor.<br />
Variabilele de proiectare sunt frecvenţa de alimentare şi următorii parametri geometrici<br />
ai sistemului de încălzire în flux magnetic transversal: distanţa dintre crestături, lăţimea<br />
întrefierului, lăţimea crestăturii, înălţimea crestăturii<br />
Restricţiile impuse se referă la:<br />
- limitele superioare şi inferioare ale parametrilor geometrici;<br />
- limita superioară a frecvenţei de alimentare;<br />
- valoarea densităţii de curent în crestătură.<br />
Această problemă de optimizare cu restricţii se transformă într-o problemă echivalentă<br />
de optimizare fără restricţii prin metoda penalizării interioare. În acest sens, se construieşte o<br />
nouă funcţie obiectiv, numită pseudo-funcţie obiectiv, care are următoarea expresie:<br />
'<br />
( x, r , r ) F(<br />
x)<br />
P(<br />
x)<br />
p<br />
'<br />
unde: ( x,<br />
r , r ) este pseudo-funcţia obiectiv;<br />
p<br />
p<br />
p<br />
rp, rp’ - factori de penalizare (scalari);<br />
P(x) - funcţia de penalizare, care are forma:<br />
11
l<br />
j<br />
p <br />
m<br />
1/<br />
g ( x)<br />
r h ( ) <br />
'<br />
P( x ) r <br />
x<br />
p<br />
j1<br />
k1<br />
Schema logică a metodei penalizării interioare este prezentată în figura 3.<br />
Fig. 3 - Schema logică a metodei penalizării interioare<br />
k<br />
2<br />
Lucrarea nr. 7<br />
În problema considerată nu există restricţii de egalitate, deci nu se utilizează parametrul<br />
de penalizare rp. Parametrul de penalizare rp’ ia valori pozitive, mari la început, ca apoi să<br />
'<br />
x,<br />
r se află în domeniul<br />
descrească cu fiecare iteraţie. Minimul pseudo-funcţiei obiectiv <br />
admisibil şi converge către minimul lui F(x) pe măsură ce parametrul rp’ descreşte.<br />
Pentru minimizarea funcţiei obiectiv se foloseşte funcţia fminsearch.<br />
p<br />
12
Lucrarea nr. 7<br />
Funcţia obiectiv este calculată prin metoda elementului finit. Programul este scris în<br />
MATLAB utilizând facilităţi ale Toolboxului PDE. S-a scris o funcţie EVALUARE.M care are<br />
ca parametri de intrare vectorul x al variabilelor de proiectare (dimensiunile geometrice ale<br />
inductorului, frecvenţa de alimentare şi densitatea de curent în crestătură) şi ca parametri de<br />
ieşire randamentul sistemului şi pseudo-funcţia obiectiv. Randamentul este determinat în urma<br />
calculului de câmp prin metoda elementului finit. La fiecare modificare a variabilelor de<br />
proiectare care reprezintă dimensiuni geometrice ale inductorului se generează o nouă reţea de<br />
discretizare. Pentru ca funcţia EVALUARE.M să poată fi inclusă în procedura automată de<br />
optimizare s-a procedat astfel:<br />
- în Toolboxul PDE s-a reprezentat geometria sistemului TFIH pentru dimensiuni geometrice<br />
arbitrar alese, s-au stabilit condiţiile pe frontiere şi in meniul Boundary s-a ales submeniul<br />
Export Decomposed Geometry, Boundary Cond’s, operaţie prin care s-a exportat<br />
matricea geometriei şi matricea condiţiilor pe frontiere în spaţiul de lucru MATLAB;<br />
- pe structura matriceală existentă s-a geometria parametrizată şi cu funcţia wbound se<br />
crează fişierul de tip M al condiţiilor de frontieră, apelate ulterior de funcţiile initmesh<br />
şi assempde.<br />
Această procedură expusă simplificat permite regenerarea automată a reţelei de discretizare la<br />
fiecare modificare a parametrilor geometrici şi apoi rezolvarea problemei prin MEF.<br />
Configuraţia din Fig.2 a fost folosită ca un prim test pentru procedura de optimizare.<br />
Variabilele problemei de optimizare şi restricţiile sunt:<br />
x1=distanţa dintre crestături<br />
x2 = lăţimea crestăturii<br />
x3 = înălţimea crestăturii<br />
x4 = frecvenţa de alimentare<br />
- 25 x1 700 mm<br />
- 20 x3 300 mm<br />
- 10 x4 50<br />
- x5 1000 Hz<br />
Rezultatele procedurii de optimizare aplicate pentru o bandă din aluminiu cu grosime de 1 mm<br />
( = 0,034064 mm 2 /m) sunt prezentate în Tabelul 2.<br />
Tabelul 2<br />
Rezultatele optimizării<br />
Sursa MATLAB (m-file)<br />
x1 x2 x3 x4 <br />
[mm] [mm] [mm] [Hz]<br />
Iniţial 30 50 30 50 0.08<br />
Optim 138 288 36 236 0.94<br />
options=optimset('MaxIter',25)<br />
X=fminsearch(@evaluare,[30e-3 50e-3 30e-3 50],options)<br />
Numărul de iteraţii depinde de punctul iniţial ales arbitrar dar situat în domeniul<br />
admisibil definit de restricţii. Pentru verificarea rezultatului obţinut în urma optimizării se<br />
13
Lucrarea nr. 7<br />
consideră diferite puncte de pornire a algoritmului. Minimul obţinut este unul local dar care din<br />
punct de vedere ingineresc este acceptabil pentru problema studiată.<br />
Sursa MATLAB (function m-file )<br />
function [cost,eta]=evaluare(x)<br />
% Functia obiectiv<br />
x<br />
if x(4)>1000<br />
x(4)=1000;<br />
end<br />
x2=20e-3;<br />
x1i=25e-3; x1s=700e-3; x2i=20e-3; x2s=300e-3;<br />
x3i=10e-3; x3s=50e-3; x4s=1000;<br />
strip2=0.5e-3;<br />
miu0=4*pi*1e-7;<br />
ndx=100;<br />
ro=0.034064e-6;<br />
dc=2e6; %densitatea de curent<br />
c1=1/miu0;<br />
c2=1/miu0;<br />
c3=1/miu0;<br />
c4=1/miu0;<br />
c=strcat(num2str(c1),'!',num2str(c2),'!',num2str(c3),'!',num2str(c4));<br />
y11=0;<br />
x5=20e-3;<br />
%restrictii<br />
sumt=1e-7;<br />
eps=2e-3;<br />
%Coordonate puncte geometrie parametrizata<br />
xa=0; ya=0;<br />
xb=2*x(1)+2*x(2); yb=0;<br />
xc=xb; yc=strip2;<br />
xd=0; yd=yc;<br />
xe=0;ye=strip2+x2+x(3)+x5;<br />
xf=xb; yf=ye;<br />
xg=x(1)/2; yg=strip2+x2+x(3);<br />
xh=x(1)/2+x(2); yh=yg;<br />
xi=xh; yi=strip2+x2;<br />
xj=xg;yj=yi;<br />
xk=3*x(1)/2+x(2); yk=yg;<br />
xl=3*x(1)/2+2*x(2); yl=yg;<br />
xm=xl; ym=yi;<br />
xn=xk; yn=yi;<br />
%Matrice geometrie<br />
g(1,1:15)=2;<br />
g(2,1)=xe; g(3,1)=xf;g(4,1)=ye;g(5,1)=yf;g(6,1)=0;g(7,1)=1;<br />
g(2,2)=xi; g(3,2)=xj;g(4,2)=yi;g(5,2)=yj;g(6,2)=1;g(7,2)=2;<br />
g(2,3)=xl; g(3,3)=xm;g(4,3)=yl;g(5,3)=ym;g(6,3)=1;g(7,3)=3;<br />
g(2,4)=xm; g(3,4)=xn;g(4,4)=ym;g(5,4)=yn;g(6,4)=1;g(7,4)=3;<br />
g(2,5)=xa; g(3,5)=xd;g(4,5)=ya;g(5,5)=yd;g(6,5)=0;g(7,5)=4;<br />
g(2,6)=xd; g(3,6)=xe;g(4,6)=yd;g(5,6)=ye;g(6,6)=0;g(7,6)=1;<br />
g(2,7)=xj; g(3,7)=xg;g(4,7)=yj;g(5,7)=yg;g(6,7)=1;g(7,7)=2;<br />
g(2,8)=xg; g(3,8)=xh;g(4,8)=yg;g(5,8)=yh;g(6,8)=1;g(7,8)=2;<br />
g(2,9)=xa; g(3,9)=xb;g(4,9)=ya;g(5,9)=yb;g(6,9)=4;g(7,9)=0;<br />
g(2,10)=xn; g(3,10)=xk;g(4,10)=yn;g(5,10)=yk;g(6,10)=1;g(7,10)=3;<br />
g(2,11)=xk; g(3,11)=xl;g(4,11)=yk;g(5,11)=yl;g(6,11)=1;g(7,11)=3;<br />
g(2,12)=xb; g(3,12)=xc;g(4,12)=yb;g(5,12)=yc;g(6,12)=4;g(7,12)=0;<br />
g(2,13)=xc; g(3,13)=xf;g(4,13)=yc;g(5,13)=yf;g(6,13)=1;g(7,13)=0;<br />
g(2,14)=xh; g(3,14)=xi;g(4,14)=yh;g(5,14)=yi;g(6,14)=1;g(7,14)=2;<br />
g(2,15)=xd; g(3,15)=xc;g(4,15)=yd;g(5,15)=yc;g(6,15)=1;g(7,15)=4;<br />
14
% Initializare retea de discretizare<br />
[pp,e,t]=initmesh(g);<br />
%[pp,e,t]=refinemesh(g,pp,e,t);<br />
xel=pp(1,:);<br />
tau=max(xel);<br />
hx=tau/ndx;<br />
vol=x(2)*x(3);<br />
pbob=ro*dc^2*vol*0.7;<br />
Lucrarea nr. 7<br />
a2=0;a3=0;a1=0; a4=2*pi*x(4)/ro*sqrt(-1);<br />
a=strcat(num2str(a1),'!',num2str(a2),'!',num2str(a3),'!',num2str(a4));<br />
f1=0; f2=dc; f3=-dc; f4=0;<br />
f=strcat(num2str(f1),'!',num2str(f2),'!',num2str(f3),'!',num2str(f4));<br />
% cf reprezinta matricea conditiilor pe frontiera<br />
u=assempde('cftfih',pp,e,t,c,a,f);<br />
% u reprezinta potentialul magnetic vector<br />
x11=0:hx:tau;<br />
uxy=tri2grid(pp,t,u,x11,y11);<br />
dens=abs((-sqrt(-1)*2*pi*x(4)/ro.*uxy));<br />
dpind=ro.*(abs(dens)).^2;<br />
puters=trapz(x11,dpind);<br />
puterea=puters*strip2;<br />
% Randamentul electric<br />
eta=puterea*2/(2*puterea+4*pbob)<br />
% Pseudo-Functia obiectiv<br />
cost=-eta+sumt*(1/(x(1)-x1i)+1/(x1s-x(1))+1/(x(2)-x2i)+1/(x2s-x(2))+1/(x(3)x3i)+1/(x3s-x(3)))+1e-4*1/(x4s-x(4))<br />
15