模拟退火算法

(一)维基百科解释

模拟退火来自冶金学的专有名词退火。退火是将材料加热后再经特定速率冷却,目的是增大晶粒的体积,并且减少晶格中的缺陷。材料中的原子原来会停留在使内能有局部最小值的位置,加热使能量变大,原子会离开原来位置,而随机在其他位置中移动。退火冷却时速度较慢,使得原子有较多可能可以找到内能比原先更低的位置。

模拟退火的原理也和金属退火的原理近似:我们将热力学的理论套用到统计学上,将搜寻空间内每一点想像成空气内的分子;分子的能量,就是它本身的动能;而搜寻空间内的每一点,也像空气分子一样带有“能量”,以表示该点对命题的合适程度。算法先以搜寻空间内一个任意点作起始:每一步先选择一个“邻居”,然后再计算从现有位置到达“邻居”的概率。

在某个温度状态T下,当一定数量的迭代操作完成后,降低温度T,在新的温度状态下执行下一个批次的迭代操作。可以证明,模拟退火算法所得解依概率收敛到全局最优解。

(二)通俗解释

演算步骤

(1)公式

在温度为T时,出现能量差为dE的降温的概率为P(dE)
P(dE) = exp( dE/(kT) )
k:常数
exp:自然指数
T:温度
条件:dE<0,exp( dE/T )的取值范围是 (0,1)

(2)初始化

由一个产生函数从当前解产生一个位于解空间的新解,并定义一个足够大的数值作为初始温度。

(3)迭代过程

新解的产生和接受: 若移动后得到更优解,则继续迭代;若移动后的解比当前解要差,则以一定的概率继续迭代,这个概率随着时间推移逐渐降低,最后停止。

当新解被确定接受时,用新解代替当前解,这只需将当前解中对应于产生新解时的变换部分予以实现,同时修正目标函数值即可。此时,当前解实现了一次迭代。可在此基础上开始下一轮试验。而当新解被判定为舍弃时,则在原当前解的基础上继续下一轮试验。

模拟退火算法可以比喻为一个机器人随机出现在山脉间任意一个地点,然后向坡度为 0 的点前进,坡度为0可能是山脉间最低点的山谷,也可能是山脉间最高点的山峰,在一定时间后停止移动,可能会经历一个或者多个坡度为0的点,选取当前寻找到的最优解为最终解。

可能的情况 >>>
在这里插入图片描述
当我们只取最低点作为结果的时候 >>>
在这里插入图片描述
情况一 >>>
在这里插入图片描述
情况二 >>>
上面的机器人的跳跃步长无法突破第二个山峰,所以在跳跃一定时间结束后,以得到的最优化作为全局最优解,但是后面那两个结果它并没有看见

这次我们给机器人的步长设置大一些,这次发现了两个最优解,T1和T3点,我们将这两个点作比较后得出T1点为最优解
在这里插入图片描述
模拟退火算法的起始位置时随机分布的,不一定能找到全局最优解,且每次抵达最优解后的下一步前进尝试都是随机的,设置的得当,可以找到全局最优解

(三)伪代码

s:=s0;e:=E(s)//设定目前状态为s0,其能量E(s0)
k:=0//评估次数k
while k<kmax and e>emax//若还有时间(评估次数k还不到kmax)且结果还不够好(能量e不够低)则:
sn:=neighbour(s)//随机选取一临近状态sn
en:=E(sn)//sn的能量为E(sn)
if random()<P(e,en,temp(k/kmax)) then//决定是否移至临近状态sn
s:=sn; e:=en//移至临近状态sn
k:=k+1//评估完成,次数k加一
return s//回转状态s

假设最低温度为-10°,迭代次数为4次,随机出现在某温度后,寻找最佳状态的曲线图大致如图所示
在这里插入图片描述


  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值