目录
老饼讲解:一步一步上手学习

【原理】模拟退火(SA)-原理解说

作者 : 老饼 发表日期 : 2025-11-19 14:56:43 更新日期 : 2026-05-15 11:46:22
老饼讲解-简单易懂,干货满满,爽过嗦螺!


好了,这节我们开始讲智能优化算法,由于模拟退火算法在智能优化算法中相对纯粹、简单一些,所以我们以模拟退火算法作为我们的上手算法,当我们把模拟退火彻底,我说的是彻底,弄明白之后,其它智能优化算法就像砍菜一样,一刀一个,毕竟都是换汤不换药的东西。好了,闲话不说,马上开始!

一、模拟退火算法原理

模拟退火算法(Simulated Annealing,SA)是一个借鉴物理退温过程设计的智能优化算法,我们这节先不急,先把模拟退火算法大概是个什么,流程是什么,具体的了解一下,大家也不用太扣细节,有个印象就好了,等后面我们剖析了本质后,再回头来看细节就非常明白了。

1.1. 模拟退火算法-物理背景

模拟退火算法就是借鉴物理退温的过程,那么我们先来简单看一下什么是物理退温,如下:

模拟退火算法-物理背景

一个高温物体,在冷觉后的能量并不总是一样的,它与退火(降温)的过程有关。如果让它缓慢退火,最终物体的能量会比急速退火更加低,因为在降温过程中,粒子有充足的时间,来转移到不同位置,在高温时甚至能凭借热能跃迁到能量更高的位置来寻找更好的位置,而如果急速降温,则会使每个粒子被迫迅速收缩到稳定位置,导致最终能量更高。好了,随便了解一下就好了,都是故事背景。

1.2. 模拟退火算法-思想原理

模拟退火算法借鉴物理退火的原理,用来解决函数优化问题,我们不妨来看下它的思路。

借鉴物理退火的原理,我们所要优化的目标函数,就相当于物体的能量E,我们希望它越小越好。而函数的自变量,它里面的每个就相当于物体的粒子,通过充分调整它,来使得目标函数尽量小:

模拟退火算法原理

模拟退火算法先设置一个较高的初始温度T,然后慢慢地降低温度T,而在每个温度下,都对进行充分的调整,在温度较高时,的调整相对也较自由,哪怕的调整会令目标函数值更高,也以一定的概率接受它,而随着温度慢慢下降,x调整的自由度也渐渐变小,最后,当温度下降到一定程度时,基本只接受更优的X,随着不断的迭代,最终收敛到一个局部最优。

二、模拟退火-算法流程

2.1. 模拟退火-算法流程图

好了,我们先来展示一下模拟退火算法的流程图,如下:

 模拟退火-算法流程图

比较值得注意的是,模拟退火共包含了内外两层循环,外循环是温度的变化,内循环是当前温度下X的迭代。大家结合下面流程描述来看,就理解它的每一步了。

2.2. 模拟退火-算法流程描述     

模拟退火算法的流程描述如下:

一、初始化

    1.1. 初始化初始解
    1.2. 初始化温度

二、外循环

     2.1. 内循环(直接循环N次):
     (1) 生成新解
          从x的邻域随机选择一个x作为新解
     (2) 计算新解的能量
     (3) 根据能量差按概率接受新解
          (3.1) 计算新解与旧解的能量差
                      
          (3.2) 根据能量差决定接受新解的概率
                       
          (3.3) 如果 则接受新解,否则放弃新解,进入下一轮
           每次接受新解时,需要更新以下信息:
                   更新当前解
                   更新当前能量 
                   更新历史最优解
                   更新本轮内循环找到的最优最差解所需的能量
     2.2 降温
            
     2.3 判断终止条件
           如果本轮找到的最优、最差解的能量差异不大,则终止循环

三、输出

       输出历史找到的最优解X


三、模拟退火算法-概率公式的解释 

在模拟退火算法中,对于是否接受新解使用了下述公式:

 

 该公式是非常巧妙的,下面让我们来分步讨论它的意义。

1. 当新解比旧解更优秀时

当新解比旧解更优秀时,此时,则

因此,不管随机数是多少,条件一定成立,即只要新解不比旧解差就一定接受新解。

2. 当新解比旧解更差时

 当新解比旧解更差时,此时,则

模拟退火算法-接受概率函数

p的取值能量差成正比,与温度T成反比,也就是:

1. 新解越大时(越大),p就越小,这就意味着新解越差接受新解的概率越小。

2. 温度T越大时,p越大,这就意味着温度大时接受新解的概率越小。

总的来说,就是新解越差,接受的概率越小,但同时温度会提升这个概率,如果温度很高,即使新解很差,也有很大的概率接受新解。

所以说,这个公式非常的巧妙,仅仅用一个公式,就蕴含了多个机制。

总结

在这一节里,我们讲了模拟退火算法的大概思想和流程,这里我们仅仅知道它大概是怎么做、怎么一回事就好了,后面我们再通过代码,来更具体的展示它是如何实现的,但是,大家也不用过份地去强记它的流程,能大概地知道就可以了,之后等我们更本质地剖析一下这家伙,理解它的意图,就会对它非常清晰了。



图标 评论
添加评论