Что не так с моей реализацией имитации отжига? - PullRequest
0 голосов
/ 29 января 2020

Я написал реализацию смоделированного отжига в 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);

...