模拟退火算法matlab求函数最大值实例

模拟退火算法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 (localminx)%判断是否越界
            local_value=equation(local);
            if local_value>present_value(p)
                location(p)=local;
                present_value(p)=local_value;
            else if rand                     location(p)=local;
                    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


你可能感兴趣的:(算法)