您的位置:首页 > 编程语言 > MATLAB

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

2017-10-31 22:31 211 查看
模拟退火算法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<maxx)&&(local>minx)%判断是否越界

            local_value=equation(local);

            if local_value>present_value(p)

                location(p)=local;

                present_value(p)=local_value;

            else if rand<probability

                    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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  matlab 算法