c++实现的模拟退火算法

算法简介

  模拟退火算法得益于材料的统计力学的研究成果。统计力学表明材料中粒子的不同结构对应于粒子的不同能量水平。在高温条件下,粒子的能量较高,可以自由运动和重新排列。在低温条件下,粒子能量较低。如果从高温开始,非常缓慢地降温(这个过程被称为退火),粒子就可以在每个温度下达到热平衡。当系统完全被冷却时,最终形成处于低能状态的晶体。

  假定我们要解决的问题是一个寻找最小值的优化问题。将物理学中模拟退火的思想应用于优化问题就可以得到模拟退火寻优方法。


算法过程

  考虑这样一个组合优化问题:我们现在要求函数f(x)的最小值,其中x∈Sx∈S,S表示函数的定义域,N(x)⊆SN(x)⊆S表示x的一个邻域集合。

  首先给定一个初始温度T0和该优化问题的一个初始解x(0),并由x(0)生成下一个解x′∈N(x(0))x′∈N(x(0)),是否接受x′x′作为新解x(1)依赖于下面概率: 

P(x(0)→x′)={1若f(x′)<f(x(0))e−f(x′)−f(x(0))T0其它P(x(0)→x′)={1若f(x′)<f(x(0))e−f(x′)−f(x(0))T0其它


换句话说,如果生成的解x′x′的函数值比前一个解的函数值更小,则接受x(1)=x′x(1)=x′作为一个新解。否则以概率e−f(x′)−f(x(0))T0e−f(x′)−f(x(0))T0接受x′x′作为一个新解。

 

  同样的,对于模拟退火过程中任意一个解x(k),接受x′x′作为下一个新解x(k+1)的概率和上面公式类似: 

P(x(k)→x′)={1若f(x′)<f(x(k))e−f(x′)−f(x(k))Ti其它P(x(k

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值