29.04.2013 Views

Laborator 7

Laborator 7

Laborator 7

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!