模拟退火算法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 (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


  • 10
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
这里提供一个简单的 Matlab 遗传算法目标函数适应度实例: 假设我们要优化一个函数 f(x),其中 x 是一个向量,其长度为 n。我们可以使用遗传算法来寻找使 f(x) 最小的 x。在这种情况下,适应度函数可以定义为 f(x) 的相反数。 以下是一个使用 Matlab 的遗传算法工具箱的示例代码: ```matlab % 目标函数 function y = my_fitness(x) y = sum(x.^2); % 求和平方 end % 遗传算法主程序 n = 10; % 向量长度 lb = -10*ones(1,n); % 向量下限 ub = 10*ones(1,n); % 向量上限 options = gaoptimset('StallGenLimit', 50, 'Generations', 100); [x, fval] = ga(@my_fitness, n, [], [], [], [], lb, ub, [], options); disp(['最优解:', num2str(x)]); disp(['最优值:', num2str(-fval)]); ``` 在上面的代码中,我们首先定义了一个目标函数 `my_fitness`,其中 `x` 是输入向量,`y` 是输出标量。在这个例子中,目标函数是简单的平方和函数。 然后,我们使用 `gaoptimset` 函数设置了一些遗传算法优化的选项。例如,我们设置了最大代数为 100,当连续 50 代都没有进展时停止算法。 最后,我们调用 `ga` 函数来执行遗传算法优化。我们将目标函数 `my_fitness` 作为第一个参数,向量长度 `n` 作为第二个参数,下限和上限向量 `lb` 和 `ub` 分别作为第七和第八个参数。最后,我们将找到的最优解和最优值分别存储在 `x` 和 `fval` 中,并将它们打印出来。注意,我们在打印最优值时取了相反数。 这就是一个简单的 Matlab 遗传算法目标函数适应度实例。您可以根据需要修改目标函数来适应您的特定问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值