模拟退火算法

模拟退火算法是一种启发式算法;关于启发式算法可以简单总结为下面两点:

1):任何有助于找到最优解,但不能保证最优解的方法均是启发式算法;

2):有助于加速求解过程和找到较优解的方法是启发式方法

另:爬山法是于模拟退火算法有着相似地方的启发式算法的一种,知道爬山法有助于理解模拟退火算法。

爬山法

以一元函数找最值为例

a.在解空间随机生成初始解;

b.向左或向右邻域走一步(走的步数越小越好,但会增加计算量)

c.比较不同的走法下的目标函数的大小,并决定下一步往哪个方向走

d.不断重复这个步骤,直到找到一个极大值(极小值)或在定义域边缘,此时结束搜索

缺点:爬山算法实际是一种“眼光狭隘”的搜索算法(贪心算法—是一种算法思想)


模拟退火

模拟退火算法也称金属的冷却过程,其核心思想是:如果需要解决一个问题,我们使用迭代的方法解决;在每一步,我们都会在解决方案中进行小的更改。如果得到更好的解决方案,我们会始终接受;如果得到更差的解决方案,我们也(以一定的概率)期望它变好,但这种可能性随着时间而降低。(区别于爬山法)

例:求y=11sinx+7cos(5x)在[-3,3]内的最大值

旧的解:xi对应的函数值f(xi)

新的解:在xi附近随机找一个新的解xj,对应的函数值为f(xj)

(1):如果f(xj)>f(xi),则接受新解xj

(2):如果f(xj)<=f(xi),那么我们应该直接拒绝xj吗

答:不应该,如果拒接就是爬山法了

解决方法:为了不直接拒绝xj,我们定义一个接受xj的概率p,p位于[0,1]之间,且f(xj)和f(xi)越接近,p越大。即:

P\propto\frac{1}{|f(x_j)-f(x_i)|}

[注]p=0时=爬山法,p=1时=蒙特卡洛,(符号意思为 正比于)

由于y=e^{-x}(x\geq0),值域[0,1];所以我们可以假设P\propto e^{-{|f(x_j)-f(x_i)|}}

1 接受新解的概率p越大意味着在解空间中搜索范围越大,因为接受新解的概率p越大意味着我们的搜索更容易接受不好的解,相当于增加了我们的搜索范围。

2 假设我们将搜索过程看作一个“工序”,那么搜索前期我们搜索的范围应该尽量的(避免陷入局部最优解),搜索后期我们搜索的范围应该尽量的(更倾向于局部搜索)。

3 在寻找最优解过程中新解接受概率p应该也要随着时间变长而变小才合理;对于式子:

P_t\propto e^{-|f(x_j)-f(x_i)|\times C_t}

以此为例,我们的搜索过程(假设搜索最大值问题)可以用下面这个简单流程表示

(1) 随机生成一个解A,计算解A对应的目标函数f(A)

(2) 在A附近生成一个解B,计算B对应的目标函数f(B)

(3) 如果f(B)>f(A),则将B赋值给解A,然后重复上述步骤(爬山法思想)

如果f(B)<=f(A),那么接受B的概率Pt(上面公式),然后生成一个[0,1]之间的随机数r,如果r<p,我们将 解B赋值给解A,然后重复上面步骤;否则我们返回第(2)步,在原来的A附近再重新生成一个解B,然后继续 下去

这里的t在编程中怎么实现,可以看成我们迭代的次数。(循环)

问题1:优化问题有约束条件怎么办?

1.生成解B做一个判断2.增加罚函数,内生到目标函数

问题2:Ct怎么设置?

Ct的设置:模拟退火过程

退火是一种金属热处理工艺,指的是将金属缓慢加热到一定温度,保持足够时间,然后以适宜速度冷却。目的是降低硬度,改善切削加工性;降低残余应力,稳定尺寸,减少变形与裂纹倾向;细化晶粒,调整组织,消除组织缺陷。准确的说,退火是一种对材料的热处理工艺,包括金属材料非金属材料。而且新材料的退火目的也与传统金属退火存在异同。

定义初始温度T0=100,温度下降公式为:

T_{t+1}=\alpha T_t, \alpha 常取0.5到0.99之间,例如取0.95,那么t时刻温度:T_t=\alpha ^tT_0=100\times0.95^t

C_t=\frac{1}{\alpha^tT_0}=\frac{1}{100\times0.95^t},(这里取倒数是为了保证C_t关于t递增),那么P_t=e^{-\frac{|f(B)-f(A)|}{T_t}}=e^{-\frac{|f(B)-f(A)|}{100\times0.95^t}}

其中Ct可以看作一个和时间相关的系数,因此在搜索过程中,我们接受新解的概率就和时间有关了,显然时间越长Ct越大

问题3:什么时候停止搜索?

很多准则:1.达到指定的迭代次数,例如迭代500次;2.我们找到最优解连续M(例如30)次迭代都 没有变化。

问题4:怎么样在A附近随机生成一个新解B?

高效求解NP问题(如TSP问题,0-1背包问题)使用不当,可能会陷入局部最优
相较于其他非线性与优化算法,模拟退火算法编程工作量小且易实现参数难以控制,所得结果可能接近最优解但并非最优解

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值