0%

模拟退火算法

背景

这个方法来自金属热加工过程的启发。在金属热加工过程中,当金属的温度超过它的熔点(Melting Point)时,原子就会激烈地随机运动。与所有的其它的物理系统相类似,原子的这种运动趋向于寻找其能量的极小状态。在这个能量的变迁过程中,开始时,温度非常高, 使得原子具有很高的能量。随着温度不断降低,金属逐渐冷却,金属中的原子的能量就越来越小,最后达到所有可能的最低点。

应用

利用模拟退火的时候,让算法从较大的跳跃开始,使到它有足够的“能量”逃离可能“路过”的局部最优解而不至于限制在其中,当它停在全局最优解附近的时候,逐渐的减小跳跃量,以便使其“落脚 ”到全局最优解上。

具体操作

从一个问题的原始解开始,用一个变量代表温度,这一温度开始时非常高,而后逐步减低。在每一次迭代期间,算法会随机选中题解中的某个数字,使其发生细微变化,而后计算该解的代价。关键的地方在于计算出该解的代价后,如何决定是否接受该解。 如果新的成本更低,则新的题解就会变成当前题解,这与爬山法类似;如果新的成本更高,则新的题解与概率 P 被接受(一开始的时候,T很高,导致P很大,于是就有了足够的能量逃离局部最优)。这一概率会随着温度T的降低而降低。即算法开始时,可以接受表现较差的解,随着退火过程中温度的不断下降,算法越来越不可以接受较差的解,知道最后,它只会接受更优的解。 其中P = exp[-(newcost - oldcost)/ T ] 其中newcost是新解的成本,oldcost是当前成本,T为当前温度。算法以概率P接受新的解。可见,当温度很高或者新旧解差别很大时,概率P都会很大。