一句话定义:模拟退火(Simulated Annealing)是一种允许自己暂时走坏棋的随机优化算法,模仿金属冷却的过程:先高温乱动,再慢慢降温定型,从而跳出局部最优、找到更靠谱的解。
打个比方
想象你在浓雾中的山区寻找最低的谷底,能见度只有几米。最省事的走法是“哪边下坡就往哪走”,这叫局部搜索或贪心策略:很快能走到某个坑底,然后无路可走,但这个坑可能离真正的最低谷差很远。
模拟退火换了个策略:起步时你精力充沛,允许自己往上坡走一段,明明变更差也照样接受,甚至接受得很随意;随着体力(温度)下降,你变得越来越挑剔,走坏棋的概率越来越小;到最后一阶段几乎只接受下坡,慢慢稳定在某个谷底。关键在于,正是前期那几步“不讲道理”的上坡,让你有机会翻出小坑,看到更大的世界。
机制
算法用一个“温度(temperature)”参数控制宽容度。新解比当前解更好就接受;更差也按概率接受,概率大约是 exp(-ΔE/T):ΔE 是变差的程度,T 是当前温度。温度高时这个概率接近 1,几乎随机乱走;温度低时接近 0,退化成挑剔的下坡搜索。所谓“退火”,就是让 T 按一张降温表(cooling schedule)从大到小慢慢降。降得太快容易冻在坏地方,降得太慢又白费时间。
和相邻概念的区别
| 概念 | 接受更差的解 | 需要梯度 | 常见场景 |
|---|---|---|---|
| 局部搜索、贪心 | 否 | 不需要 | 简单问题快速出解 |
| 模拟退火 | 是,概率随温度递减 | 不需要 | 离散组合优化、黑箱调参 |
| 梯度下降 | 否 | 需要 | 可导的连续问题 |
| 随机重启 | 靠“重开一局”而非接受坏解 | 不需要 | 作为兜底手段配合使用 |
实际意义
对从业者:排班、装箱、路径规划、布局布线、超参数搜索这类“解是离散组合、目标函数是黑箱、梯度不存在”的问题,模拟退火是成本低也够用的经典方法。它不保证全局最优,结果带随机性,所以要固定随机种子、多跑几次取最好,降温策略也要按任务调;不同工具库的默认参数差别不小,具体以官方文档为准。
对普通职场人:它其实是“先发散、后收敛”的算法版本。写方案时先故意乱试几个方向,别急着锁定第一个看起来还行的想法;越到后期越收紧标准,只留下真正更好的那个。
