Laborator 7

Laborator 7 Laborator 7

webhost.uoradea.ro
from webhost.uoradea.ro More from this publisher
29.04.2013 Views

Toolbox-ul OPTIMIZATION Lucrarea nr. 7 Toolbox-ul OPTIMIZATION al MATLAB conţine o serie de funcţii care realizează minimizarea (sau maximizarea) unor funcţii neliniare generale. In Tabelul 1 sunt prezentate cîteva dintre funcţiile disponibile în acest Toolbox pentru rezolvarea problemelor de minimizare. Tip problemă Minimizare scalară Minimizare fără restricţii Minimizare cu restricţii Tabelul 1 Formularea problemei Funcţia f ( x) | x x x min fminbnd 1 f ( x) 2 min fminunc, fminsearch f ( x) | c( x) 0, ceq( x) 0 min A x b, Aeq x beq, l x u fmincon Majoritatea rutinelor de optimizare necesită definirea unui fişier M-file care conţine funcţia ce urmează să fie minimizată. Sunt tratate separat problemele de dimensiuni mari (Large Scale) şi problemele de dimensiune medie. In continuare sunt descrise funcţii din Tabelul 1. fminbnd Scopul Determină minimul unei funcţii de o variabilă într-un interval fixat min f ( x) | x x x 1 Sintaxa x = fminbnd(fun,x1,x2) x = fminbnd(fun,x1,x2,options) [x,fval] = fminbnd(...) [x,fval,exitflag] = fminbnd(...) [x,fval,exitflag,output] = fminbnd(...) 2 Descriere x = fminbnd(fun,x1,x2) returnează o valoare x care este un minim local al funcţiei descrisă în fun (de obicei un M-file) în intervalul x1

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!