FUNKCJA: f(x1 , x2 ) = (x1+1)2 + (x2+3)2 + 2(x1+1)4 + (x2+3)4 +( x1+1)( x2+3)
Obliczenia analityczne punktu optymalnego:
$\frac{\partial f}{\partial x1}$ = 2(x1+1) + 8(x1 +1)3 + (x2+3) = 0
Każdy składnik musi wynosić zero, więc:
$\frac{\partial f}{\partial x2}$ = 2(x2+3) + 4(x2 +3)2 + (x1+1) = 0
x1+1 = 0 x1 = - 1
x1+3 = 0 x2 = - 3
x0 = $\begin{bmatrix} x_{10} \\ x_{20} \\ \end{bmatrix}$ = $\begin{bmatrix} - 1 \\ - 3 \\ \end{bmatrix}$ - ekstremum (punkt stacjonarny)
H (x10, x20) =$\text{\ \ }\begin{bmatrix} \ 2 + 24{( - 1 + 1)}^{2} & 1 \\ 1 & 2 + 12{( - 3 + 3)}^{2\ } \\ \end{bmatrix}$ = $\begin{bmatrix} 2 & 1 \\ 1 & 2 \\ \end{bmatrix}$
det( H (x10, x20) ) = 4 – 1 = 3 > 0 - ekstremum lokalne
$\frac{\partial_{}^{2}f}{\partial x_{1^{2}}}$ = 2 + 24 * 02 = 2 > 0 minimum lokalne w punkcie x0 = $\begin{bmatrix} - 1 \\ - 3 \\ \end{bmatrix}$
METODA NEWTONA – RAPHSONA
G = $\begin{bmatrix} \frac{\partial f}{\partial x_{1}} \\ \frac{\partial f}{\partial x_{2}} \\ \end{bmatrix}$ H = $\begin{bmatrix} \frac{\partial_{}^{2}f}{\partial x_{1}^{2}} & \frac{\partial_{}^{2}f}{\partial x_{1}x_{2}} \\ \frac{\partial_{}^{2}f}{\partial x_{1}x_{2}} & \frac{\partial_{}^{2}f}{\partial x_{2}^{2}} \\ \end{bmatrix}$
xn+1 = xn – H-1(xn)*G(xn)
Obliczenia dla wywołania funkcji: newton_r([0;0], 0.001, 100) , gdzie [0;0] wektor punktu początkowego od którego zaczynamy liczyć, 0.001 dobrana dokładność, a 100 to maksymalna ilość iteracji
KOD PROGRAMU:
Otrzymane optymalne wartości to : x1 = - 1
x2 = - 3
Liczba iteracji do otrzymanej dokładności: 9
METODA FUNKCJI KARY
Dla ograniczenia równościowego: x1 + 5x2 = 5 , zmodyfikowana funkcja ma postać:
f*(x1,x2) = f(x1,x2) + $\frac{1}{\sqrt{r}}\ $(x1 + 5x2 – 5)2
KOD PROGRAMU:
Podfunkcja dla ograniczenia równościowego:
Podfunkcja dla ograniczenia nierównościowego:
Kod główny:
Wywołania funkcji z ograniczeniem równościowym:
Dla ograniczenia równościowego x1 + 5x2 = 5 wykonano obliczenia punktu minimalnego dla różnego doboru parametrów optymalizacji z założeniem wektora wartości początkowych spełniającego zadane ograniczenie.
Dla różnych wartości delty (numeracja wywołań programu zgodna z numerację załączonych wykresów):
newton_r_o([0 1], 0.001, 100, 1.5, 200)
Optymalne wartości:
x1=0.715
x2=0.852
Wartość funkcji:
f(x1,x2)=262.422
Wykonane iteracje:
i=45
newton_r_o([0 1], 0.001, 100, 2, 200)
Optymalne wartości:
x1=0.716
x2=0.854
Wartość funkcji:
f(x1,x2)=262.695
Wykonane iteracje:
i=28
newton_r_o([0 1], 0.001, 100, 4, 200)
Optymalne wartości:
x1=0.716
x2=0.855
Wartość funkcji:
f(x1,x2)=262.869
Wykonane iteracje:
i=15
newton_r_o([0 1], 0.001, 100, 15, 200)
Optymalne wartości:
x1=0.716
x2=0.856
Wartość funkcji:
f(x1,x2)=262.930
Wykonane iteracje:
i=8
newton_r_o([0 1], 0.001, 100, 30, 200)
Optymalne wartości:
x1=0.717
x2=0.856
Wartość funkcji:
f(x1,x2)=263.004
Wykonane iteracje:
i=7
newton_r_o([0 1], 0.001, 100, 90, 200)
Optymalne wartości:
x1=0.717
x2=0.856
Wartość funkcji:
f(x1,x2)=262.968
Wykonane iteracje:
i=5
Dla zmiany ilorazu ciągu geometrycznego zmian r zmieniała się szybkość dochodzenia do wartości optymalnych. Dla wartości delty bliskich 1 liczba potrzebnych iteracji dość znacznie wzrastała. Natomiast dla dużo większych wartości liczba iteracji malała, aż do wartości około 5 co wynikało z konieczności uzyskania zadanej dokładności.
Dla różnych wartości x0:
newton_r_o([5 0], 0.001, 100, 2, 200)
Optymalne wartości:
x1=0.716
x2=0.854
Wartość funkcji:
f(x1,x2)=262.695
Wykonane iteracje:
i= 28
newton_r_o([30 -5], 0.001, 100, 2, 200)
Optymalne wartości:
x1=0.716
x2=0.854
Wartość funkcji:
f(x1,x2)=262.695
Wykonane iteracje:
i=28
newton_r_o([495 100], 0.001, 100, 2, 200)
Optymalne wartości:
x1=0.716
x2=0.854
Wartość funkcji:
f(x1,x2)=262.695
Wykonane iteracje:
i=28
Wykonując optymalizację dla różnych wartości punktów początkowych zarówno wyniki jak i sposoby dochodzenia do nich nie zmieniały się znacząco, jedyną różnicę przy przebiegach optymalizacji stanowił sposób zrealizowania pierwszych iteracji.
Wywołania funkcji z ograniczeniem nierównościowym:
Dla ograniczenia nierównościowego: x2 > 6 , zmodyfikowana funkcja ma postać:
f*(x1,x2) = f(x1,x2) – ($\text{\ \ }\frac{r}{6 - x_{2}}\text{\ \ }$)
Przy ograniczeniu nierównościowym najpierw wykonaliśmy obliczenia dla x0=[0 7], d=0.001 r=100, delta = 2. Program po wykonaniu 1 iteracji zwrócił wynik x1= - 0.005037 x2=6.000000 co zdaje się być wartością poprawną (wykres 10). Następnie kolejną próbę przeprowadzamy również dla x0 = [0 7], tylko dla innych wartości delt i r , co daje na podobne rezultaty - jedna iteracja i taki sam wynik. Przy zmianie x0 na [0 10] i dla r = 100 delta =2 obserwując przebieg optymalizacji na wykresie można zauważyć, że w pewnym momencie przybliżenia minimum wychodzą poza zadane ograniczenia. Prawdopodobną przyczyną jest to, że "bardziej opłacalne" dla algorytmu jest wyjście poza ograniczenie - daje większy spadek wartości funkcji (wykres 11). W celu uzyskania poprawnych przybliżeń minimum zdecydowano zwiększenie wartości współczynnika kary i zmniejszenie delty. Dla r=5000 i delty = 1.1 program zdaje się działać poprawnie i zwraca optymalne wartości w obszarze dopuszczalnym; są to x1= -1.998 x2=6.971 następuje to po 3 iteracjach, dla różnego doboru punktów początkowych przy tym samym r, delta oraz liczbie iteracji, otrzymane wyniki praktycznie nie ulegają zmianie, zmienia się jedynie sposób dochodzenie do wartości optymalnych (w zasadzie tylko pierwsza iteracja) co widoczne jest na załączonych wykresach(wykres 12 - newton_r_o([0 10], 0.001, 5000, 1.1, 3); wykres 13 - newton_r_o([8 10], 0.001, 5000, 1.1, 3); wykres 14 - newton_r_o([4 50], 0.001, 5000, 1.1, 3)).
WNIOSKI:
Poszukując minimum dla zadanej funkcji metodą Newtona-Raphsona sprowadzamy postępowanie do wyznaczania kolejnych kierunków poszukiwań wykorzystując do tego informację o wartości funkcji, jej gradiencie oraz hesjanie w otoczeniu ostatniego punktu przybliżenia minimum. Zastosowana metoda okazała się być bardzo efektywna gdyż po zaledwie 9 iteracjach pozwoliła wyznaczyć przybliżenie minimum z dokładnością do 0.001.
Dla zadania programowania nieliniowego z ograniczeniem skorzystano z metody funkcji kary, która pozwala na zastąpienie problemu minimalizacji w zbiorze dopuszczalnym problemem minimalizacji bez ograniczeń zmodyfikowanej funkcji celu, która powstaje przez dodanie do pierwotnej funkcji celu funkcji kary. Dla ograniczenia równościowego ww. metoda pozwala na dokładne i szybkie wyznaczenie rozwiązania optymalnego i zarówno dobór wartości współczynnika kary, jak i sposobu jego zmiany oraz punktów początkowych nie wpływa w znaczący sposób na otrzymywane przybliżenia. Natomiast korzystając z metody funkcji kary wymagana jest większa świadomość mechanizmu tej metody jak również działania samego programu. Dla zadanej funkcji wyniki, które można uznać za poprawne uzyskiwano dla stosunkowo dużych wartości współczynnika kary oraz dla "powolnych" jego zmian (iloraz ciągu geometrycznego jakimi były kolejne wartości r bliski 1).