1.Schemat blokowy algorytmu metody najszybszego spadku
2.Tabela wyników działania implementacji algorytmu metody najszybszego spadku dla funkcji/zestawu nr 57
Parametry metody: punkt startowy:
parametr kryterium stopu: Ɛ=0.0001
Nr iteracji | Punkt osiągnięty w i-tej iteracji | Wartość funkcji celu w osiągniętym punkcie | Wartość kryterium stopu |
---|---|---|---|
X1 | X2 | X3 | |
1 | -0.612983 | -0.399923 | -0.083827 |
2 | -2.325329 | 2.374606 | -0.371805 |
3 | -2.538483 | 2.241853 | -0.383118 |
4 | -3.282075 | 3.415356 | 0.68271 |
5 | -3.479072 | 3.293899 | 0.671752 |
… | … | … | … |
3300 | -16.052755 | 25.823943 | -45.250939 |
3301 | -16.053439 | 25.823439 | -45.251084 |
3302 | -16.052659 | 25.824298 | -45.254566 |
3303 | -16.053328 | 25.823805 | -45.254709 |
3304 | -16.052532 | 25.824687 | -45.258329 |
… | … | … | … |
6601 | -16.000005 | 25.999984 | -46.999837 |
6602 | -16.000005 | 25.999984 | -46.999837 |
6603 | -16.000005 | 25.999984 | -46.999837 |
6604 | -16.000005 | 25.999983 | -46.999837 |
6605 | -16.000005 | 25.999984 | -46.999837 |
3.Wyniki eksperymentu oceny wpływu punktu startowego na otrzymywany wynik oraz prędkość działania algorytmu przy określonym (o odpowiednio „małej” wartości) parametrze :
Liczba iteracji | Punkt startowy | Punkt osiągnięty „optymalny” | Wartość funkcji celu w punkcie „optymalnym” | Wartość Ɛ |
---|---|---|---|---|
X1 | X2 | X3 | ||
6605 | [0;0;0;0] | -16.000005 | 25.999984 | -46.999837 |
10195 | [0;0;0;0] | -16.000227 | 25.999251 | -46.992579 |
46812 | [0;0;0;0] | -16.002119 | 25.992995 | -46.930598 |
34024 | [0;0;0;0] | -16.022059 | 25.927079 | -46.277587 |
56083 | [0;0;0;0] | -16.090788 | 25.700267 | -44.031692 |
4.Wyniki eksperymentu oceny wpływu parametru na otrzymywany wynik oraz prędkość działania algorytmu dla określonego (odpowiednio „odległego” od rozwiązania) punktu startowego :
Liczba iteracji | Punkt startowy | Punkt osiągnięty „optymalny” | Wartość funkcji celu w punkcie „optymalnym” | Wartość Ɛ |
---|---|---|---|---|
X1 | X2 | X3 | ||
6605 | [0;0;0;0] | -16.000005 | 25.999984 | -46.999837 |
42647 | [1;1;1;1] | -16.000023 | 25.999924 | -46.999249 |
7441 | [10;10;10;10] | -16.0 | 25.999996 | -46.999966 |
11185 | [100;100;100;100] | -16.000013 | 25.999957 | -46.999572 |
3942 | [-15;25;-46;117] | -16.000009 | 25.999968 | -46.999685 |
5.Wnioski i spostrzeżenia
By policzyć minimum funkcji, dla zadanych parametrów potrzebne było 6605 iteracji.
W 3 punkcie badaliśmy wpływ zadanej dokładności na liczbę iteracji. Im mniejszy parametr Ɛ tym mniej iteracji.
W 4 punkcie sprawdzaliśmy jak zmiana punktu startowego wpływa na liczbę iteracji. Im bliżej ustawimy punkt początkowy tym mniej iteracji.
6.Kod źródłowy m-plików realizujących algorytm metody najszybszego spadku
funkcja.m
function f = funkcja(x)
f = 1404*x(1)+916*x(2)+192*x(3)+24*x(4)+1082*x(1)*x(2)+204*x(1)*x(3)+30*x(1)*x(4)+136*x(2)*x(3)+12*x(2)*x(4)+12*x(3)*x(4)+734*x(1)^2+411*x(2)^2+20*x(3)^2+3*x(4)^2+2433;
gradient.m
function g=gradient(x)
g(1) = 1404+1082*x(2)+204*x(3)+30*x(4)+1468*x(1);
g(2) = 916+1082*x(1)+136*x(3)+12*x(4)+822*x(2);
g(3) = 192+204*x(1)+136*x(2)+12*x(4)+40*x(3);
g(4) = 24+30*x(1)+12*x(2)+12*x(3)+6*x(4);
g=[g(1);g(2);g(3);g(4)];
ns.m
function [i,y]=ns(x,E)
i=0;
stop=0;
while stop==0
disp('iteracja: ')
i = i+1
x = x - zp(x,gradient(x),E)*gradient(x);
disp('kryterium stopu: ')
norm(gradient(x))
if (norm(gradient(x))<E)
stop = norm(gradient(x));
end
if (i>1000000)
stop = norm(gradient(x));
end
funkcja(x)
x
y(:,i) = [x(1) x(2) x(3) x(4), funkcja(x), norm(gradient(x)) ];
end
funkcja(x)
x
end
zp.m
function z = zp(x,g,e)
a = -100;
b = 100;
z=b;
xn=[b-(b-a)*(sqrt(5)-1)/2; a+(b-a)*(sqrt(5)-1)/2];
f= [funkcja(x-xn(1)*g);funkcja(x-xn(2)*g)];
while norm(b-a)>0.01*e
if f(1)>f(2)
a=xn(1);
xn(1)=xn(2);
xn(2)=a+(b-xn(1));
else
b=xn(2);
xn(2)=xn(1);
xn(1)=a+(b-xn(2));
end
f = [funkcja(x-xn(1)*g);funkcja(x-xn(2)*g)];
end
if f(1)>f(2)
z = xn(2);
else
z = xn(1);
end
if z - e < a & z + e > a
a = a - 500;
end
if z + e > b & z - e < b
b = b + 500;
end
end