Я написал реализацию смоделированного отжига в Octave и даже жестко пытался изменить каждый параметр, я не могу получить этот метод, чтобы найти глобальный минимум, который является использованием этого алгоритма. Пожалуйста, помогите мне найти в чем проблема здесь.
clear;
clc;
T = 10000;
L = 10000;
r = 100;
a = 0.95;
function y = f(x1, x2)
y = -(x2 + 47).*sin(sqrt(abs(x1./2+(x2+47)))) - x1.*sin(sqrt(abs(x1-(x2+47))));
end
x0 = -512+rand(1, 2)*1024;
fl = [];
x = [];
y = [];
for i = 0:L
x1 = [-1000 1000]
while (x1(1) > 512 || x1(1) < -512) || (x1(2) > 512 || x1(2) < -512)
x1 = x0 + r*(2*rand(1,2)-1)*sqrt(T);
end
df = f(x1(1), x1(2)) - f(x0(1), x0(2));
if df < 0
x0 = x1;
elseif rand() < exp(-df/T)
x0 = x1;
endif
T = a*T;
fl = [fl; f(x0(1), x0(2))];
x = [x; x0(1)];
y = [y; x0(2)];
endfor
figure;
plot(0:L,fl);
figure;
[X, Y] = meshgrid(-512:.5:512);
Z = -(Y + 47).*sin(sqrt(abs(X./2+(Y+47)))) - X.*sin(sqrt(abs(X-(Y+47))));
contour(X, Y, Z);
hold on;
plot(x, y, 'k', 'LineWidth', 2);