Facultatea Calculatoare Informatica si Microelectronica
Catedra Informatica Aplicata La disciplina Cercetari operationale Lucrare de Laborator Nr:1 TEMA: Optimizarea necondi ionat. Minimizarea func iilor cu ajutorul metodei gradientului cu frac ionarea pasului. A efectuat: st.gr.MI-101 Ursu Ion
A verificat: lector superior Catruc Mariana
Chiinu 2012 Sarcina 12 S se determine minimul global al func iei p tratice cu autorul metodei gradientului cu frac ionarea pasului cu preci!ia . "olorile initiale : a#$ b#%. Descrierea algoritmului metodei gradientului cu frac ionarea pasului 1. Se alege o valoare arbitrar & 'una i aceea i la fiecare itera ie() se determin punctul i se calculea! f'!(* %. Se verific condi ia unde + este o constant arbitrar ,n intervalul '0)1(* $. -ac este ,ndeplinit inegalitatea de mai sus) atunci valoarea & este acceptat i se va lua . .n ca! contrar se frac ionea! & prin ,nmul irea lui & cu un numr arbitrar po!itiv i . /rocesul continu p,n c,nd este satisfcut inegalitatea de mai sus. 0. Se calculea! . 1ste de dorit s continum procesul) p,n c,nd . -ac re!olvm manual aceast problem prin metoda gradientului ob inem solu ia optim . Avem nevoie de acest re!ultat pentru a verifica corectitudinea calculelor efectuate de ctre program. Codul sursa : //--------------------------------------------------------------------------- #include<iostream.h> #include<math.h> #include<conio.h> //--------------------------------------------------------------------------- double a,b; % //Parametri pentru fiecare varianta int nMax; //Numarul maxim de iteratii double eps; //aloarea aproximatiei //--------------------------------------------------------------------------- double f!double "#$% & //'eturnea(a valoarea functiei in punctul x,) return a*"#+$*"#+$ , -*"#+$*"#.$ , b*"#.$*"#.$ - -*"#+$ - /*"#.$; 0 void 1rad!const double *x,double *)% &//2alculea(a valoarea 1radientului )#+$ 3 -*a*x#+$ , -*x#.$ - -;)#.$ 3 -*x#+$ , -*b*x#.$ - /; 0 int met4radient!double *x% & //Metoda 4radientului double )#-$; //aloarea 4radientului double dir#-$; // 5irectia de minimi(are double alfa,(#-$; // 6lfa double norma,t.,t-; int n3+; // Numarul de iteratii do & 1rad!x,)%; dir#+$ 3 -)#+$; dir#.$ 3 -)#.$; alfa 3 7; int m3+; do & (#+$ 3 x#+$ , alfa*dir#+$; (#.$ 3 x#.$ , alfa*dir#.$; norma 3 )#+$*)#+$ , )#.$*)#.$; if!f!(%-f!x%<3-+.7*alfa*norma%m3.; else alfa/37; 0 8hile!9m%; x#+$ 3 x#+$ , alfa*dir#+$; x#.$ 3 x#.$ , alfa*dir#.$; 1rad!x,)%; n,,; 0 8hile!s:rt!n<nMax%;;!s:rt!)#.$*)#.$,)#+$*)#+$%>eps%%; return n; 0 double scalar!const double *x,const double *),int n% $ &//<nmultirea scalara a - vectori double s3+; for!int i3+;i<n;i,,%s ,3 x#i$*)#i$; return s; 0 //--------------------------------------------------------------------------- int main!% & double x#-$,x.#-$; int n; textbac=1round!>%; clrscr!%;
cout<<?@e determina minimul 1lobal al functiei?; cout<<?f!x,)%3!a*x*x%,-*x*),!b*)*)%--*x-/*)?<<endl; cout<<?<ntroduceti valorile paramerilor a,bA?; cin>>a>>b; cout<<?<ntroduci valorile initialeA?; cin>>x#+$>>x#.$; x.#+$ 3 x#+$; x.#.$ 3 x#.$; cout<<?<ntroduceti aproximatiaA?; cin>>eps; cout<<?<ntroduceti numarul maxim de iteratiiA?; cin>>nMax; cout<<?Metoda 4radientuluiA?<<endl<<endl; n3met4radient!x%; cout<<?x#+$3?<<x#+$; cout<<endl<<?x#.$3?<<x#.$; cout<<endl<<?n3?<<n; cout<<endl<<?f33?<<f!x%; cin.1et!%; cin.1et!%; return +; 0 Exemplu de calcul: Fig1.valorile initiale (0 0) 0 Fig2.valorile initiale (1 1) Fig3.valorile initiale (10 10) In aceasta lucrare de laborator am programat algoritmi de optimi!are neconditionata) in special: metoda gradientului si o metoda de directii conugate 2 3estenes- Steifel. Cea dinurma este particulara pentru re!olvarea functiilor patratice 'si re!olvarea unui sistem deecuat ii liniare cu matricea po!itiv definita(. In general aceste metode se deosebesc prinalegerea directia de deplasare si pasul acesteia in pro cesul de minimi!are a functiei 4 Ministerul Educatiei din Republica Moldova Facultatea Calculatoare Informatica si Microelectronica Catedra Informatica Aplicata La disciplina Cercetari operationale Lucrare de Laborator Nr:2 TEMA: Optimizarea necondi ionat. Minimizarea func iilor cu ajutorul metodei Hestenes-Stiefel. Compararea metodei Hestenes-Stiefel i metodei gradientului cu frac ionarea pasului. 5 A efectuat: st.gr.MI-101 Ursu Ion
A verificat: lector superior Catruc Mariana
Chiinu 2012 Sarcina 12 S se determine minimul global al func iei p tratice cu autorul metodei 3estenes-Stiefel. S se compare eficien a algoritmului 3estenes-Stiefel i algoritmului metodei gradientului cu frac ionarea pasului. "olorile initiale : a#$ b#%. Descrierea algoritmului metodei Hestenes-Stiefel 1. Se alege arbitrar i se determin . -ac ) atunci este solu ie optim. S67/. .n ca! contrar se consider ) i se trece la pasul urmtor* %. Se determin lungimea pasului de-a lungul direc iei ) care pleac din ) ceea ce revine la minimi!area ,n raport cu parametrul scalar & al func iei . -eterminarea lui poate fi efectuat prin formula: * $. Se construie te o apro8ima ie nou: ) dac atunci am aflat solu ia optim) S67/. Altfel trecem la pasul urmtor* 9 0. Se construie te direc ia ) dup care se reia pasul %. Algoritmul 3estenes-Stiefel garantea! c dup un numr finit de itera ii ce nu dep e te n s ob inem solu ia e8act a problemei. -ac re!olvm manual aceast problem prin metoda gradientului ob inem solu ia optim . Avem nevoie de acest re!ultat pentru a verifica corectitudinea calculelor efectuate de ctre program. Codul sursa : //--------------------------------------------------------------------------- #include<iostream.h> #include<math.h> #include<conio.h> //--------------------------------------------------------------------------- double a,b; //Parametri pentru fiecare varianta int nMax; //Numarul maxim de iteratii double eps; //aloarea aproximatiei //--------------------------------------------------------------------------- double f!double "#$% & //'eturnea(a valoarea functiei in punctul x,) return a*"#+$*"#+$ , -*"#+$*"#.$ , b*"#.$*"#.$ - -*"#+$ - /*"#.$; 0 void 1rad!const double *x,double *)% &//2alculea(a valoarea 1radientului )#+$ 3 -*a*x#+$ , -*x#.$ - -;)#.$ 3 -*x#+$ , -*b*x#.$ - /; 0 double scalar!const double *x,const double *),int n% &//<nmultirea scalara a - vectori double s3+; for!int i3+;i<n;i,,%s ,3 x#i$*)#i$; return s; 0 int met2onB!double *x% & //Metoda Cestenes - @tiefel double x.#-$; double )#-$,).#-$;// aloarea 4radientului double dir#-$; // 5irectia double alfa,(#-$; double norma; : double 6#-$#-$ 3 &&-*a,-0,&-,-*b00; //Matricea 6 int n3+; //Numarul de iteratii 1rad!x,)%; dir#+$ 3 -)#+$; dir#.$ 3 -)#.$; do & double (m(#-$; (m(#+$ 3 scalar!6#+$,dir,-%; (m(#.$ 3 scalar!6#.$,dir,-%; 1rad!x,)%; alfa 3 -scalar!),dir,-%/scalar!(m(,dir,-%; x.#+$ 3 x#+$ , alfa*dir#+$; x.#.$ 3 x#.$ , alfa*dir#.$; 1rad!x.,).%; x#+$ 3 x.#+$; x#.$ 3 x.#.$; if!s:rt!).#.$*).#.$,).#+$*).#+$%<eps% & n,,; return n; 0 double temp#-$,beta; beta 3 scalar!).,).,-%/scalar!),),-%; dir#+$ 3 -).#+$ , beta*dir#+$; dir#.$ 3 -).#.$ , beta*dir#.$; n,,; 0 8hile!!n<nMax%%; 0 //--------------------------------------------------------------------------- int main!% & double x#-$,x.#-$; int n; textbac=1round!>%; clrscr!%;