模拟退火算法matlab求函数最大值实例
模拟退火算法的思路基本上是:
1.粒子按照不同的概率在不同的方向漂移(随机运动)
2.向目标点漂移的概率更大(趋向于能量低的点)
3.随着时间的推移粒子每次漂移的步长变短(温度降低)
这里粒子的速度采用正态分布,正态分布的速度的平均值与温度成正比
粒子运动方向随机,+-方向运动概率为0.5
%模拟退火算法实现搜索函数最大值
%Anneal.m
N=20;%粒子数量
temp=20;%初始温度
T=200;%迭代次数
k=0.1;%温度位移系数
kt=0.05;%温度概率系数
de=0.99;%温度降低速率
minx=0;
maxx=10;%区间
location=10*rand(1,N);%粒子初始位置
present_value=equation(location);%粒子当前解
%---------------------------
for t=1:T
%
dx_av=k*temp;%当前温度下粒子平均移动距离
probability=exp(-1/(kt*temp));
disp(probability);
temp=temp*de;%温度变化
for p=1:N
dx=0.5*dx_av*randn+dx_av;%以平均移动距离为中心正态分布,
if rand>0.5 %0.5的概率为-
dx=-dx;
end
local=location(p)+dx;
if (local
local_value=equation(local);
if local_value>present_value(p)
location(p)=local;
present_value(p)=local_value;
else if rand
present_value(p)=local_value;
end
end
end
end
end
x=minx:0.01:maxx;
y=equation(x);
plot(x,y);
hold on;
plot(location, present_value,'*');
disp(location);
被搜寻的函数如下·
function y=equation(x)
y=10*cos(0.4*pi*x).*sin(0.1*pi*x);
end