matlab-模拟退火算法

跟着《matlab数学建模》学,一边做的笔记。代码都在后面。

原理:

由初始解 i 和控制参数初值 t 开始,对当前解重复 “产生新解、计算目标函数差、接收或舍弃”的迭代。

并逐步衰减t值,算法终止时的当前解即为近似的最优解。

新解的产生和接受:

1.由产生函数,由当前解产生位于解空间的新解。注意,产生新解的方式决定了新解的领域结构,因而对冷却进度表选取有影响。

2.计算与新解对应的目标函数差。最好按增量计算。

3.判断新解是否被接受。最常用的接受依据是Metropolis准则。

4.新解被确定接受后用新解代替当前解,将当前解中对应于产生新解是的变换部分实现,再修正目标函数值。

模拟退火算法与初始值无关,具有收敛性,以概率1收敛于全局最优解的全局优化算法。具有并行性。

matlab-模拟退火算法_第1张图片matlab-模拟退火算法_第2张图片

代码跟前面的步骤直接能对上:

function [xm,fv] = PS0_lamda(fitness,N,c1,c2,lamda,M,D)
format long;
%N初始化群体个体数目
%c1学习因子1
%c2学习因子2
%lamda退火常数惯性权重
%M最大迭代次数
%D搜索空间维数
%%%%%%%初始化种族的个体%%%%%%%
for i=1:N
    for j=1:D
        x(i,j)=randn;
        v(i,j)=randn;
    end
end
%%%%先计算各个粒子的适应度,初始化pi和pg %%%%%%%
for i=i:N
    p(i)=fitness(x(i,:));
    y(i,:)=x(i,:);
end
pg=x(N,:);
for i=1:(N-1)
    if fitness(x(i,:))

案例:

matlab-模拟退火算法_第3张图片

 定义一个函数,然后脚本里面调用:

函数:

function y = lamdaFunc(x)
y=0;
for i=1:5
    y=y+(i+2)/(((x(i)-1)^2)+0.5);
end
y=1/(0.7+y);
end

脚本:

[xm,fv]=PS0_lamda(@lamdaFunc,50,2,2,0.5,100,5)

matlab数学建模系列我会持续更新,也是我的学习笔记。

你可能感兴趣的:(matlab数学建模,matlab,模拟退火算法,开发语言)