SA模拟退火算法(附MATLAB源码)

优化算法之模拟退火算法:

模拟退火算法(Simulated Annealing),简称 SA,其主要思想借鉴于固体的退火原理,当固体的温度很高的时候,内能比较大,固体的内部粒子处于快速无序运动,当温度慢慢降低的过程中,固体的内能减小,粒子的慢慢趋于有序,最终,当固体处于常温时,内能达到最小,此时,粒子最为稳定。


SA特点:

优点:

  1. 不管函数形式多复杂,模拟退火算法更有可能找到全局最优解。
  2. 相对来说不会那么容易陷入局部最优解。
  3. 掌握条件语句

缺点:

  1. 初始温度和马尔科夫链长度的设置问题:初始温度越高,且马尔科夫链越长,算法搜索越充分,得到全局最优解的可能性越大,但这也意味着需要耗费更多的计算时间。
  2. 退火速度问题:温度衰减系数越小,温度下降越快,对应的迭代次数也就越少,算法搜索的次数也就越少,因此导致了上图中温度衰减系数0.9的模拟退火算法没有搜索到最优解。

SA学习应用推广及步骤:

1.应用推广:

.  旅行商问题

   求极值问题

2.模拟退火的步骤:
(1)初始化:初始温度T(保证充分大),初始解状态S(是算法迭代的起点),每个T值的迭代次数L;
(2)对k=1,2,L做第(3)至第6步:
(3)对当前解进行变换(例如对某些解中元素进行互换,置换,3点交叉置换等)产生相邻近的新解S';
(4)计算增量AT=C(S')-C(S),其中C(S)为综合评价函数;

(5)若△T (6)如果满足终止条件则输出当前解作为最优解,结束程序。终止条件通常取为连续若干个新解都没有被接受时终止算法;
(7)T逐渐减少,且T->0,然后转第2步。

部分代码:

%% 模拟退火算法(SA)
clc
clear
close all
testfunctionNo = 3; % 测试函数标号
initial =  [ 0.8 , -0.5 ] ; % 可自由选择
cost_initial = objectiveFunction(initial, testfunctionNo);
lb = [-1 -1];%变量下限
ub = [1 1];%变量上限
stepSize = [0.05 , 0.05];
nVar = length(initial);
minimumFound = 0;
A.position = initial;
A.cost = cost_initial;
T0=1;            % 初始温度
T=T0;
alphaa=0.99;     % 冷却因子
maxIteration = 500;
p_history = 0;
temp_history = 0;
for iter = 1 : maxIteration
    trajectory(iter).position = A.position;
    trajectory(iter).cost = A.cost;
    B = generateNeighbours4SA(A , stepSize, lb, ub, testfunctionNo);
    Delta = A.cost - B.cost;
    if Delta < 0  %  good move
        A.cost = B.cost;
        A.position = B.position;

结果出图:

SA模拟退火算法(附MATLAB源码)_第1张图片

SA模拟退火算法(附MATLAB源码)_第2张图片

SA模拟退火算法(附MATLAB源码)_第3张图片

SA模拟退火算法(附MATLAB源码)_第4张图片

你可能感兴趣的:(优化算法,推荐算法,matlab,机器学习,模拟退火算法,算法)