模拟退火/遗传算法求shubert函数全局极小点

本文探讨了shubert函数的全局极小点问题,利用模拟退火和遗传算法进行优化求解。实验结果显示,遗传算法在5次运行中表现出更优的全局优化性能。
摘要由CSDN通过智能技术生成

模拟退火/遗传算法求shubert函数全局极小点

shubert函数

shubert函数在[-1.1]上有8个局部极小点,其中一个是全局极小点,位于[-0.8121,-0.8121]处在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

优化算法

我们使用模拟退火算法和遗传算法求解shubert的全局极小点

模拟退火算法

%****************模拟退火算法求极小点********************
function [Xval1,Yval1]=SimulateAnnealing1
clear all;
close all;
clc;
tic;
tem=30; 
step = 0.02; 
Xm= 1;%x最大值
Ym = 1;%y最大值
err = 1e-8; 
mlen = 10000;% 马尔可夫链长度
sj = 0.95; %衰减参数
accp = 0.0; 
rnd =rand;
disp('*******模拟退火算法的运行结果如下*******:');
disp(sprintf('初始温度: %d',tem));
disp(sprintf('衰减参数: %d',sj));
disp(sprintf('马尔可夫链长度: %d',mlen));
disp(sprintf('步长因子: %d',step));
disp(sprintf('结束条件为: 两次最优解之差小于%d',err));
% 随机选点 初值设定
Xp = -Xm * rand; %设置初始值
Yp = -Ym * rand;
Xval = Xp; 
Yval = Yp;
Xp = -Xm * rand; 
Yp = -Ym * rand;
Xval1 = Xp; 
Yval1 = Yp;
mm=abs( f( Xval1,Yval1)-f (Xval,Yval));%两次最优解之差
%模拟退火算法
while mm > err
    tem=sj*tem;
    accp = 0.0;  
    for i=0:mlen:1 %迭代mlen次    
        p=0;
        while p==0
            Xnext = Xp + step*Xm*(rand-0.5);%随机选下一点
            NextY = Yp+ step*Ym*(rand-0.5);          
            if p==(~(Xnext >= -Xm && Xnext <= Xm && NextY>= -Ym && NextY <= Ym))
                p=1;
            end
        end
        if (f(Xval1,Yval1) >f(Xnext,NextY))%是否全局最优解
            Xval =Xval1;
            Yval = Yval1;          
            Xval1=Xnext;%新的最优解
            Yval1=NextY;           
        end             
        if( f(Xp,Yp)- f(Xnext,NextY) >0 ) 
            Xp=Xnext;
            Yp=NextY;
            accp=accp+1;
        else
            changer = -1 * ( f(Xnext,NextY) -f(Xp,Yp) ) / tem ;
            rnd=rand;
            p1=exp(changer);
            double (p1);
            if p1 >rand 
                Xp=Xnext;
                Yp=NextY;
                accp=accp+1;
            end
        end
    end
    mm=abs( f( Xval1,Yval1)-f (Xval,Yval));
    val=f(Xval1, Yval1);
end
disp(sprintf('最优值点为: [%.4f,%.4f]',Xval1,Yval1));
disp(sprintf('最优值为: %d',val));
runtime=toc;
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值