%% 模拟退火算法
% 思想来源于温度冷却,当温度高的时候有些稳定,温度低的时候稳定。(主要体现在概率方面)
% 随机初始化,每次数值随机改变,如果结果更接近最大(最小)值,则接受改变,否则 按照一定概率接受(和温度有关),主要是为了防止
% 局部最优
clc
clear
close all
%最大迭代次数
iter_num = 10000;
%初始温度,停止温度,降温系数
tmp = 100000;
tmp_min = 0.001;
alpha = 0.98;
%存放所有的结果
xy = zeros(2,iter_num);
x_old = init_x(0,9);
y_old = fit_function(x_old);
%绘制函数图像
draw_base();
hold on
for k = 1:iter_num
%改变初始值
x_new = generate_x(x_old);
y_new = fit_function(x_new);
delta_y = y_old - y_new; %求最大值需要旧的-新的
% delta_y = y_new - y_old; %求最小值
if delta_y < 0 %更新
tmp = tmp * alpha;
end
flag = judge(delta_y,tmp);
if flag == 1
x_old = x_new;
y_old = y_new;
end
xy(1:k) = x_old;
xy(2:k) = y_old;
end
[y_max, p] = max(xy(2,:));
x_max = xy(1,p);
plot(x_max,y_max,'*');
function draw_base()
X = 0: 0.01:9;
M = fit_function(X);
plot(X, M);
end