单目标多变量模拟退火算法

@[TOC](单目标多变量模拟退火算法)
%%%%%%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%%%
clear all;              %清除所有变量
close all;              %清图
clc;                    %清屏
D=3;                   %变量维数
lb=[75 255 14];               %下界
ub=[90 300 20];                %上界
%%%%%%%%%%%%%%%%%%%%%冷却表参数%%%%%%%%%%%%%%%%%%%%
L=20;                  %马尔科夫链长度
K=0.998;                %衰减参数
S=0.01;                 %步长因子
T=100;                  %初始温度
YZ=1e-8;                %容差
P=0;                    %Metropolis过程中总接受点
%%%%%%%%%%%%%%%%%%%%%随机选点初值设定%%%%%%%%%%%%%%%%%%%%
for i=1:D
    PreX(i)=rand*(ub(i)-lb(i))+lb(i);
    PreBestX=PreX;
    Prex(i)=rand*(ub(i)-lb(i))+lb(i);
    BestX=Prex;
end
%%%%%%%%%%%%%%%%%每迭代一次退火一次,直到满足迭代条件%%%%%%%%%%%%%%%%
deta=abs(Fitness_Function(BestX)-Fitness_Function(PreBestX));
while (deta>YZ) && (T>0.001)
    T=K*T;
    %%%%%%%%%%%%%%%%%%%%%在当前温度T下迭代次数%%%%%%%%%%%%%%%%%%%%%
    for i=1:L
        %%%%%%%%%%%%%%%%%%%%%在此点附近随机选下一点%%%%%%%%%%%%%%%%%%%%%
        for j=1:D
            NextX(j)=PreX(j)+S*(rand*(ub(j)-lb(j))+lb(j));
        end
        %%%%%%%%%%%%%%%%%%%%%边界条件处理%%%%%%%%%%%%%%%%%%%%%
        for jj=1:D
            if NextX(jj)>ub(j) || NextX(jj)<lb(j)
                NextX(jj)=PreX(jj)+S*(rand*(ub(j)-lb(j))+lb(j));
            end
        end
    %%%%%%%%%%%%%%%%%%%%%是否全局最优解%%%%%%%%%%%%%%%%%%%%%
        if (Fitness_Function(BestX)>Fitness_Function(NextX))
        %%%%%%%%%%%%%%%%保留上一个最优解%%%%%%%%%%%%%%%%
            PreBestX=BestX;
        %%%%%%%%%%%%%%%%此为新的最优解%%%%%%%%%%%%%%%%
            BestX=NextX;
        end
    %%%%%%%%%%%%%%%%%%%%%Metropolis过程%%%%%%%%%%%%%%%%%%%%%
        if (Fitness_Function(PreX)-Fitness_Function(NextX)>0)
        %%%%%%%%%%%%%%%%接受新解%%%%%%%%%%%%%%%%
            PreX=NextX;
            P=P+1;
        else
            changer=-1*(func1(NextX)-func1(PreX))/T;
            p1=exp(changer);
        %%%%%%%%%%%%%%%%接受较差的解%%%%%%%%%%%%%%%%
            if p1>rand
                PreX=NextX;
                P=P+1;
            end
        end
    trace(P+1)=Fitness_Function(BestX);
    end
    deta=abs(Fitness_Function(BestX)-Fitness_Function(PreBestX));
end
disp('最小值在点:');
BestX
disp('最小值为:')
func1(BestX)
figure
plot(trace(2:end))
xlabel('迭代次数')
ylabel('目标函数值')









 

迭代结果图
在这里插入图片描述参考文献
智能优化算法及其MATLAB实例(第2版)包子阳等

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值