Я работаю над эволюционным алгоритмом.Код реализован в Matlab.Шаг «Локальный поиск» выглядит следующим образом:
%% Local Search
for iter2 = 1:MaxIter2
v = ceil(number_Best*rand);
w = ceil(number_Best*rand);
Best1 = Best_History(v,:);
Best2 = Best_History(w,:);
[New_Best,New_fBest] = two_way(Best1,Best2,SE,nodes_number);
Best_History = [Best_History;New_Best];
fBest_History = [fBest_History;New_fBest];
end
Алгоритм работает хорошо, и вывод приемлемый.Чтобы улучшить вывод, я решил использовать алгоритм «Имитация отжига» на этапе локального поиска.Вот моя предложенная реализация, которая заменена вышеупомянутым локальным поиском:
%% Local Search
%SA Parameters
MaxIt=40; % Maximum Number of Iterations
MaxSubIt=15; % Maximum Number of Sub-iterations
T0=0.025; % Initial Temp.
alpha=0.99; % Temp. Reduction Rate
% Initialize Temp.
T=T0;
for iter2 = 1:MaxIt
for subit=1:MaxSubIt
v = ceil(number_Best*rand);
w = ceil(number_Best*rand);
Best1 = Best_History(v,:);
Best2 = Best_History(w,:);
[New_Best,New_fBest] = two_way(Best1,Best2,SE,nodes_number);
if New_fBest>=fBest_History
Best_History = [Best_History;New_Best];
fBest_History = [fBest_History;New_fBest];
else
DELTA=(New_fBest-fBest_History)/fBest_History;
P=exp(-DELTA/T);
if rand<=P
Best_History = [Best_History;New_Best];
fBest_History = [fBest_History;New_fBest];
end
end
% Update Best Solution Ever Found
if New_fBest>=fBest_History
Best_History = [Best_History;New_Best];
fBest_History = [fBest_History;New_fBest];
end
end
% Store Best Solution Ever Found
Best_History = [Best_History;New_Best];
fBest_History = [fBest_History;New_fBest];
% Update Temp.
T=alpha*T;
end
Код работает без ошибок.Однако вывод точно такой же, как и у «старого» подхода локального поиска.По-видимому, этот код не влияет на весь процесс эволюционного алгоритма (но время выполнения).Не могли бы вы сказать мне, что не так с моей реализацией алгоритма SA?
Я также не уверен в значениях инициализации переменных SA.Любое предложение для этого?