浅谈模拟退火

核心思想

模拟退火十分好写,它的核心思想就是:

每一次降温都可以从当前状态转移到另一种相近状态(没有严格定义,可以自己想产生相近解的方法)

如果那个相近状态的答案更优,当然转移到那种状态!

但如果更劣,也需要一定的概率转移到那种状态(防止陷入局部最优解)

那个概率就是:

\[P=e^{\frac{nowVal-nextVal}{T}} \]

这里的T就是当前温度,Val是对应状态的答案

要注意\(\frac{nowVal-nextVal}{T}\)是一个负值,因此必定有\(0<P<1\)

可以看出,当那种相近状态越劣(\(nowVal-nextVal\)越小),就有越小的概率转移到那种状态

而当前温度越低,也是越稳定的

(这里针对的是答案越小越优的题目)

参数设置

模拟退火是一个十分依赖参数的随机化算法,大致有以下几个参数

①初始温度\(startT\)

②温度变化率\(deltaT\)

③温度下限\(lowT\)

④随机种子\(seed\)

初始温度大致可以设在100~10000,防止一开始活跃性太高,陷入太劣的解

温度变化率宜设置在0.99~0.999

温度下限可以很小,大概在1e-15~1e-10之间

至于\(seed\)...

大致流程

综上,模拟退火的大致流程就是:

①初始化温度

②产生相近状态

③利用上述方法判断是否转移,并同时改变记录的答案值

④降温,goto ②

直到温度低于下限结束

最后说一下,四个参数的调整对算法效率影响很大,可以自己做题体会一下

例题

提供几道例题练手

[JSOI2004]平衡点

[NOIp提高组2017]宝藏

posted @ 2018-09-26 11:34  ytxytx  阅读(721)  评论(0编辑  收藏  举报