【运筹优化】元启发式算法详解:模拟退火算法(Simulated Annealing,SA)+ 案例讲解&代码实战


一、介绍

模拟退火(Simulated Annealing,SA)是一种最简单且最著名的元启发式算法,常用于解决复杂的黑盒全局优化问题,它在现实生活中被大量使用。

SA的主要优点是简单。SA基于与材料的物理退火的类比,由于应用了有效的Metropolis接受标准,因此SA避免了蒙特卡洛(Monte-Carlo)方法的缺点(可能陷入局部最小值)。

当目标函数的评估来自复杂的模拟过程时,该模拟过程操纵涉及大量记忆的大维度状态空间,基于群体的算法不适用,而模拟退火是解决这些问题的有效算法。


二、基础知识

在20世纪80年代早期,三位IBM研究人员 Kirkpatrick 等人在组合优化中引入了退火的概念。

这些概念是基于与材料的物理退火的强烈类比。这个过程包括在升高温度后使固体处于低能状态。可以通过以下两个步骤进行总结(见图1.1):

  • 使固体达到非常高的温度,直到结构“熔化”
  • 根据非常特殊的降温方案冷却固体,以达到最小能量的固态

在液态中,粒子随机分布。结果表明,只要初始温度足够高,冷却时间足够长,就能达到最小能量状态。如果不是这种情况,固体将处于具有非最小能量的亚稳态;这就是所谓的硬化,即固体的突然冷却。

在这里插入图片描述

在描述用于优化的模拟退火算法之前,我们需要了解局部搜索优化算法的原理,模拟退火是其扩展。

2.1 局部搜索(或蒙特卡罗)算法

这些算法通过探索解空间中当前点的邻域来改进目标函数。

在接下来的定义中,我们考虑 ( S , f ) (S,f) (S,f) 组合优化问题的实例化( S S S:可行解的集合, f f f:要最小化的目标函数)。

定义1:设 N \mathscr{N} N 是一个应用,它为每个解 i ∈ S i \in S iS 定义了一个与解 i i i “接近”的解的子集 S i ⊂ S S_i \sub S SiS。子集 S i S_i Si 称为解 i i i 的邻域。

在接下来的定义中,我们考虑 N \mathscr{N} N 是与 ( S , f ) (S,f) (S,f) 关联的邻域结构。

定义2:生成机制是用于在给定解 i i i 的任何邻域 S i S_i Si 中选择解 j j j 的手段

局部搜索算法是一种迭代算法,它从状态空间中随机抽取的可行点开始搜索。

然后,通过探索当前解的邻域,连续应用生成机制,以便找到更好的解。

如果找到更好的解决方案,它就成为当前的解决方案。当找不到改进解时,算法结束,当前解被认为是优化问题的近似解。

对于最小化问题,可以通过以下伪代码来总结该算法:

在这里插入图片描述

翻译成中文就是:

步骤 具体操作
1 生成初始解 i i i
2 从当前解 i i i 的邻域中随机抽取一个解 j j j(生成新解)
3 如果新解 j j j 的目标函数值小于旧解 i i i 的目标函数值,则令新解 j j j 作为当前解
4 如果当前解 i i i 的邻域中不存在一个解 j j j 的目标函数值小于旧解 i i i 的目标函数值,则程序结束
5 返回步骤 2

定义3:如果对于所有的 j ∈ S i ∗ j\in S^*_i jSi 都满足 f ( i ∗ ) ≤ f ( j ) f(i^*) \le f(j) f(i)f(j),则解 i ∗ ∈ S i^* \in S iS 称为相对于 N \mathscr{N} N 的局部最优解

定义4:如果对于关于 N \mathscr{N} N 的每个局部最优解 i ∗ ∈ S i^*\in S iS i ∗ i^* i 也是 ( S , f ) (S,f) (S,f) 的全局最优值,则称邻域结构 N \mathscr{N} N 是精确的。

因此,根据定义,只有当有一个精确的邻域结构时,才能保证局部搜索算法收敛到局部最优。

这种精确邻域的概念是理论上的,因为实际上它通常导致借助于搜索空间的完全枚举。

因此,如果当前解“落”在目标函数是凸的子域中,则算法保持陷在该子域中,除非与新解生成机制相关联的邻域结构可以到达该子域之外的点。

为了避免陷入局部极小值,有必要定义一个过程,该过程可能接受暂时降低当前解决方案的质量;这是模拟退火的主要原理。

在描述这个算法之前,有必要介绍一下 Metropolis 算法,它是SA的一个基本组成部分。

2.2 Metropolis 算法

1953年,三名美国研究人员开发了一种模拟物理退火过程的算法,他们的目的是再现退火过程中材料物理结构的演变。

该算法基于蒙特卡罗技术,该技术包括以如下方式产生固体的状态序列。

设初始状态 i i i 的能量为 E i E_i Ei,通过修改一个粒子的位置产生具有能量 E j E_j Ej 的一个新的状态 j j j

如果能量差 E i − E j > 0 E_i-E_j>0 EiEj>0(新状态的能量较低),则状态 j j j 成为新的当前状态。

如果能量差 E i − E j ≤ 0 E_i-E_j\le0 EiEj0,则状态 j j j 以一定的概率变成当前状态,该概率由下式给出:

Pr ⁡ {  Current state  = j } = e ( E i − E j k b ⋅ T ) \operatorname{Pr}\{\text { Current state }=j\}=e^{\left(\frac{E_i-E_j}{k_b \cdot T}\right)} Pr{  Current state =j}=e(kbTEiEj)

其中 T T T 代表固体的温度, k b k_b kb 是玻尔兹曼常数( k b = 1.38 × 1 0 − 23 J / K k_b=1.38×10^{-23}J/K kb=1.38×1023J/K)。

这个以一定概率接受较差解的准则称为 Metropolis 准则

如果冷却进行得足够慢,固体在每个给定的温度 T T T 下达到平衡状态。

在 Metropolis 算法中,这种平衡是通过在每个温度下产生大量转变来实现的。

热平衡由玻尔兹曼统计分布来表征。这个分布给出了固体在温度 T T T 时处于能量 E i E_i Ei 状态 i i i 的概率:

P r { X = i } = 1 Z ( T ) e − ( E i k b ⋅ T ) Pr\{X=i\}=\frac{1}{Z(T)}e^{-(\frac{E_i}{k_b \cdot T})} Pr{ X=i}=Z(T)1e(kbTEi)

其中 X X X 是与固体当前状态相关的随机变量。 Z ( T ) Z(T) Z(T) 是归一化系数,它的定义如下:

Z ( T ) = ∑ j ∈ S e − ( E j k b ⋅ T ) Z(T)=\sum_{j \in S}{e^{-(\frac{E_j}{k_b \cdot T})}} Z(T)=jSe(kbTEj)

2.3 模拟退火算法

在SA算法中,Metropolis 算法用于在状态空间 S S S 中生成一系列解决方案。

为此,使用以下等价条件在多粒子系统和我们的优化问题之间进行类比:

  • 状态空间点(解)代表固体的可能状态
  • 要最小化的函数代表固体的能量

然后引入 c c c 作为温度的控制参数。该参数用与优化目标相同的单位表示。

还假设我们已经为状态空间的每个点提供了一个邻域和一种在该邻域中生成解的机制。然后,我们定义接受准则为:

定义5:设 ( S , f ) (S,f) (S,f) 是组合最小化问题的一个实例, i i i j j j 是状态空间的两个点。从当前解 i i i 中接受解 j j j 的接受标准由以下概率给出:

Pr ⁡ {  accept  j } = { 1  if  f ( j ) < f ( i ) e ( f ( i ) − f ( j ) c )  else.  \operatorname{Pr}\{\text { accept } j\}= \begin{cases}1 & \text { if } f(j)<f(i) \\ e^{\left(\frac{f(i)-f(j)}{c}\right)} & \text { else. }\end{cases} Pr{  accept j}={ 1e(cf(i)f(j)) if f(j)<f(i) else. 

以此类推,邻居的生成原理对应于 Metropolis 算法的扰动机制,而接受原理代表Metropolis 准则。

定义6:转换表示用相邻解决方案替换当前解决方案。此操作分两个阶段执行:生成和接受

接下来,假设 c k c_k ck 是温度参数的值, L k L_k Lk 是在某次迭代 k k k 时产生的转换次数。SA的原理可总结如下:

在这里插入图片描述

模拟退火算法的主要特点之一是它能够接受较差的目标函数的转变。

在过程开始时,温度 c k c_k ck 的值较高,这使得可以接受具有高目标退化的转变,从而彻底探索状态空间。

随着 c k c_k ck 降低,只有改善目标或目标恶化程度较低的过渡被接受。

最后,当 c k c_k ck 趋于零时,不接受目标的恶化,此时SA算法表现得像蒙特卡罗算法。


三、原理

这一节讨论SA的两个基本理论性质:统计平衡和渐近收敛

3.1 Statistical Equilibrium 统计平衡

基于遍历性假设,粒子系统可以被认为是一个具有可观测统计特性的集合,许多有用的量可以从平衡统计系统中推导出来:平均能量、能量分布、熵。

此外,如果这个粒子集是静止的,这是当达到统计平衡时的情况,与平衡相中的状态相关的概率密度取决于系统的能量。

事实上,在平衡阶段,系统处于给定状态 i i i,能量为 E i E_i Ei 的概率由玻尔兹曼定律给出:

定理1:在具有固定控制参数 c c c 并使用以下接受概率的足够数量的转换之后

P c {  accept  j ∣ S i } = { 1  if  f ( j ) < f ( i ) e ( f ( i ) − f ( j ) c )  else  P_c\left\{\text { accept } j \mid S_i\right\}=\left\{\begin{array}{cc} 1 & \text { if } f(j)<f(i) \\ e^{\left(\frac{f(i)-f(j)}{c}\right)} & \text { else } \end{array}\right. Pc{  accept jSi}={ 1e(cf(i)f(j)) if f(j)<f(i) else 

模拟退火算法将以概率找到给定的解 i ∈ S i ∈ S iS

P c { X = i } = q i ( c ) = 1 N 0 ( c ) e ( − f ( i ) c ) P_c\{X=i\}=q_i(c)=\frac{1}{N_0(c)} e^{\left(-\frac{f(i)}{c}\right)} Pc{ X=i}=qi(c)=N0(c)1e(cf(i))

其中 X X X 是表示退火算法当前状态的随机变量, N 0 ( c ) N_0(c) N0(c) 是归一化系数:

N 0 ( c ) = ∑ j ∈ S e ( − f ( j ) c ) N_0(c)=\sum_{j \in S} e^{\left(-\frac{f(j)}{c}\right)} N0(c)=jSe(cf(j))

定义7:设 A A A B B B 是两个集合,使得 B ⊂ A B ⊂ A BA。我们定义 B B B 的特征函数 κ ( B ) κ(B) κ(B) 为:

κ ( B ) ( a ) = { 1  if  a ∈ B 0  else \kappa_{(B)}(a)=\left\{\begin{array}{l} 1 \quad \text { if } a \in B \\ 0 \quad \text { else} \end{array}\right. κ(B)(a)={ 1 if aB0 else

推论1:对于任何给定的解 i i i,都有

lim ⁡ c → 0 + P c { X = i } = lim ⁡ c → 0 + q i ( c ) = q i ∗ = 1 ∣ S o p t ∣ κ ( S o p t ) ( i ) \lim _{c \rightarrow 0^{+}} P_c\{X=i\}=\lim _{c \rightarrow 0^{+}} q_i(c)=q_i^*=\frac{1}{\left|S_{o p t}\right|} \kappa_{\left(S_{o p t}\right)}(i) c0+limPc{ X=i}=c0+limqi(c)=qi=Sopt1κ(Sopt)(i)

其中 S o p t S_{opt} Sopt 代表全局最优的集合。

这个结果保证了模拟退火算法对全局最优集合的元素的渐近收敛,假设在 c c c 的每个值处达到稳定分布 q i ( c ) , i ∈ S q_i(c),i ∈ S qi(c),iS

对于离散状态空间,这样的分布是离散的,并且可以计算达到目标值为 y i y_i yi 的状态空间中的一个特定点 x i x_i xi 的概率:

q i ( c ) = e ( − y i c c ) ∑ j ∈ S e ( − y j c c ) q_i(c)=\frac{e^{\left(-\frac{y_i^c}{c}\right)}}{\sum_{j \in S} e^{\left(-\frac{y_j^c}{c}\right)}} qi(c)=jSe(cyjc)e(cyic)

对于 c c c 的任何正值,函数 f f f 在平衡时优化的期望值表示为 < f > c <f>_c <f>c,方差表示为 < f 2 > c <f^2>_c <f2>c

在非常高的温度 c c c 下,SA算法在状态空间中随机移动。

通过映射 y i c = f ( x i ) y^c_i = f(x_i ) yic=f(xi),由该过程产生的每个点 x i x_i xi 与目标值 y i y_i yi 相关联。

如果我们长时间考虑这个过程,就有可能建立目标函数值 y i c , ( i = 1 , 2 , . . . N ) y^c_i,(i = 1,2,...N) yic,(i=1,2,...N) 的分布由SA过程生成。

这种分布取决于温度 c c c,记为 q ( c ) q(c) q(c)

对于大的 c c c 值,这个分布等于目标分布。图1.2 给出了这种分布的一个例子。

在这里插入图片描述
该图示出了一维目标函数,对于该目标函数,圆圈表示在某个高温 c 1 c_1 c1 下SA算法的示例。

水平虚线示出了该分布的平均值( < f ( c 1 ) > < f(c_1)> <f(c1)>),并且在左侧,相关的分布由虚线图( q ( c 1 ) q(c1) q(c1))表示。

对于较低的温度 c 2 c_2 c2,SA过程中的一些转变是不被接受的,这意味着相关的分布 q ( c 2 ) q(c2) q(c2) 被移动到具有较低期望值的较低水平(右边的目标函数中的正方形和左边的实线)。

定义8:平衡时的熵是

H c = ∑ i ∈ S q i ( c ) ln ⁡ ( q i ( c ) ) H_c=\sum_{i \in S} q_i(c) \ln \left(q_i(c)\right) Hc=iSqi(c)ln(qi(c))

推论2:一个有

∂ ⟨ f ⟩ c ∂ c = σ c 2 c 2 ∂ H c ∂ c = σ c 2 c 3 . \begin{aligned} & \frac{\partial\langle f\rangle_c}{\partial c}=\frac{\sigma_c^2}{c^2} \\ & \frac{\partial H_c}{\partial c}=\frac{\sigma_c^2}{c^3} . \end{aligned} cfc=c2σc2cHc=c3σc2.

这最后两个表达式在统计力学中起着重要的作用。我们还推导出以下表达式:

推论3

lim ⁡ c → ∞ ⟨ f ⟩ c = ⟨ f ⟩ ∞ = 1 ∣ S ∣ ∑ i ∈ S f ( i ) lim ⁡ c → 0 ⟨ f ⟩ c = ⟨ f ⟩ 0 = f O p t lim ⁡ c → ∞ σ c 2 = σ ∞ 2 = 1 ∣ S ∣ ∑ i ∈ S ( f ( i ) − ⟨ f ⟩ ∞ ) 2 lim ⁡ c → 0 σ c 2 = σ 0 2 = 0 lim ⁡ c → ∞ H c = H ∞ = ln ⁡ ( ∣ S ∣ ) lim ⁡ c → 0 H c = H 0 = ln ⁡ ( ∣ S O p t ∣ ) \begin{array}{cc} \lim _{c \rightarrow \infty}\langle f\rangle_c=\langle f\rangle_{\infty}=\frac{1}{|S|} \sum_{i \in S} f(i) & \lim _{c \rightarrow 0}\langle f\rangle_c=\langle f\rangle_0=f_{O p t} \\ \lim _{c \rightarrow \infty} \sigma_c^2=\sigma_{\infty}^2=\frac{1}{|S|} \sum_{i \in S}\left(f(i)-\langle f\rangle_{\infty}\right)^2 & \lim _{c \rightarrow 0} \sigma_c^2=\sigma_0^2=0 \\ \lim _{c \rightarrow \infty} H_c=H_{\infty}=\ln (|S|) & \lim _{c \rightarrow 0} H_c=H_0=\ln \left(\left|S_{O p t}\right|\right) \end{array} limcfc=f=S1iSf(i)limcσc2=σ2=S1iS(f(i)f)2limcHc=H=ln(S)limc0fc=f0=fOptlimc0σc2=σ02=0limc0Hc=H0=ln(SOpt)

其中 f O p t f_{Opt} fOpt 表示 f f f 的最优值,这最后一个公式表示热力学第三定律(假设只有一个最小能量状态,那么我们得到: S 0 = l n ( 1 ) = 0 S_0 = ln(1) = 0 S0=ln(1)=0)。

在物理学中,熵衡量与系统相关的无序程度:高熵值表明结构混乱,而低值反映组织。

在最优化的上下文中,熵与达到的最优性程度的度量相关。在连续的SA迭代期间,目标函数值和熵的数学期望仅分别向 f O p t f_{Opt} fOpt l n ( ∣ S O p t ∣ ) ln(|S_{Opt}|) ln(SOpt) 减小和收敛。

分布 q i ( c ) q_i(c) qi(c) 随温度 c c c 的导数由以下表达式给出:

∂ q i ( c ) ∂ c = q i ( c ) c 2 [ ⟨ f ⟩ c − f ( i ) ] \frac{\partial q_i(c)}{\partial c}=\frac{q_i(c)}{c^2}\left[\langle f\rangle_c-f(i)\right] cqi(c)=c2qi(c)[fcf(i)]

由于 ⟨ f ⟩ c   ≤   ⟨ f ⟩ ∞ \langle f\rangle_c \ \le \ \langle f\rangle_{\infty} fc  f ,在模拟退火过程中可以表现出三种状态。更准确地说,可以显示以下内容:

推论4:设 ( S , f ) (S,f) (S,f) 是具有 S O p t ≠ S S_{Opt} \neq S SOpt=S 的组合优化问题的实例,设 q i ( c ) q_i(c) qi(c) 是与退火过程相关的平稳分布。然后我们有:

在这里插入图片描述
这个推论表明,当 c c c 减小时,找到最优解的概率单调增加。此外,对于任何非最优解,存在一个正值 c ˉ i \bar{c}_i cˉi,使得对于 c < c ˉ i c<\bar{c}_i c<cˉi,找到该解的概率随着 c c c 的减小而减小。

定义9:与模拟退火算法相关的接受率定义如下

χ ( c ) =  Number of accepted transitions   Number of proposed transitions  \chi(c)=\frac{\text { Number of accepted transitions }}{\text { Number of proposed transitions }} χ(c)= Number of proposed transitions  Number of accepted transitions 
作为一般规则,当 c c c 具有高值时,所有跃迁都被接受,并且 χ ( c ) χ(c) χ(c) 接近 1 1 1

然后,当 c c c 减小时, χ ( c ) χ(c) χ(c) 缓慢减小,直到达到 0 0 0 ,表示不接受任何跃迁。

通过观察 ⟨ f ⟩ c \langle f\rangle_c fc σ c 2 σ^2_c σc2 作为 c c c 的函数的演化,我们注意到存在一个称为转变阈值(记为 c t c_t ct )的临界值,它界定了平衡态分布的两个不同区域。该阈值是值 c t c_t ct,使得:

⟨ f ⟩ c t ≈ 1 2 ( < f ∞ > + f O p t ) \langle f\rangle_{c_t} \approx \frac{1}{2}\left(<f_{\infty}>+f_{O p t}\right) fct21(<f>+fOpt)

σ c 2 ≈ σ ∞ 2  if  c ≥ c t < σ ∞ 2  if  c < c t \begin{aligned} & \sigma_c^2 \approx \sigma_{\infty}^2 \text { if } c \geq c_t \\ & <\sigma_{\infty}^2 \text { if } c<c_t \\ & \end{aligned} σc2σ2 if cct<σ2 if c<ct

因此,对于任何给定的 c c c 值,搜索空间 S S S 可以分成两个区域:

  1. R 1 R_1 R1区域:当 c c c 降低时, σ c 2 σ^2_c σc2 大致保持不变(接近 σ ∞ 2 σ^2_∞ σ2 )
  2. R 2 R_2 R2 地区:当 c c c 减少时, σ c 2 σ^2_c σc2减少

c c c 接近 c t c_t ct 值时,接受率约为 0.5 0.5 0.5 (即 χ ( c t ) ≈ 0.5 χ(c_t) ≈ 0.5 χ(ct)0.5 )。此外,我们可以证明:

  • R 1 R_1 R1 中,对于较大的 c c c 值, ⟨ f ⟩ c \langle f\rangle_c fc c − 1 c^{-1} c1 中是线性的,而 σ c 2 σ^2_c σc2 大致恒定
  • R 2 R_2 R2 中,对于较小的 c c c 值, ⟨ f ⟩ c \langle f\rangle_c fc c c c 成正比, σ c 2 σ^2_c σc2 c 2 c_2 c2 成正比

人们可以提出下列 ⟨ f ⟩ c \langle f\rangle_c fc σ c 2 σ^2_c σc2 的近似模型:

在这里插入图片描述
其中,粗略地说, γ γ γ ⟨ f ⟩ c \langle f\rangle_c fc 的一级近似。最后,让我们引入比热,记为 H ( c ) H(c) H(c),它由下式给出:

H ( c ) = d ⟨ f ⟩ c d c = ⟨ f ⟩ c 2 − ⟨ f ⟩ c 2 k b c 2 H(c)=\frac{d\langle f\rangle_c}{d c}=\frac{\langle f\rangle_c^2-\langle f\rangle_c^2}{k_b c^2} H(c)=dcdfc=kbc2fc2fc2

较大的 H ( c ) H(c) H(c) 值表明材料开始变成固体:在这种情况下,温度的下降速率必须降低。

3.2 Asymptotic Convergence 渐近收敛

模拟退火算法具有向全局最优随机收敛的特性,只要它提供具有无限小的衰减步长的无限长的温度衰减图。

这个衰变纲图是纯理论的,人们将在实践中努力接近这个理想,同时保持在合理的执行时间内。

定义10:马尔可夫链是状态序列,其中到达给定状态的概率仅取决于前一个状态。设 X ( k ) X(k) X(k) 是在第 k k k 次迭代时达到的状态。然后,每个状态对 ( i , j ) (i,j) (i,j) 在第 k k k 次迭代时的跃迁概率由 P i j ( k ) = P r { X ( k ) = j ∣ X ( k − 1 ) = i } P_{ij}(k)= Pr \{ X(k)= j | X(k-1)= i \} Pij(k)=Pr{ X(k)=jX(k1)=i} 给出。关联矩阵 [ P i j ( k ) ] [P_{ij}(k)] [Pij(k)] 称为转移矩阵。在模拟退火环境中,马尔可夫链转移对应于状态空间中的移动(生成 + 接受)。

定义11:SA算法的转移概率由下式给出:

∀ i , j ∈ S : P i j ( k ) = P i j ( c k ) = { G i j ( c k ) A i j ( c k )  if  i ≠ j 1 − ∑ l ≠ i P i l ( c k )  if  i = j \forall i, j \in S: P_{i j}(k)=P_{i j}\left(c_k\right)= \begin{cases}G_{i j}\left(c_k\right) A_{i j}\left(c_k\right) & \text { if } i \neq j \\ 1-\sum_{l \neq i} P_{i l}\left(c_k\right) & \text { if } i=j\end{cases} i,jSPij(k)=Pij(ck)={ Gij(ck)Aij(ck)1l=iPil(ck) if i=j if i=j

其中 G i j ( c k ) G_{ij}(c_k) Gij(ck) 表示从状态I产生状态j的概率;

A i j ( c k ) A_{ij}(c_k) Aij(ck) 是接受从状态 i i i 生成的状态 j j j 的概率。

对于所有 i , j ∈ S i,j ∈ S i,jS A i j ( c k ) A_{ij}(c_k) Aij(ck) 由下式给出:

A i j ( c k ) = e ( − ( f ( j ) − f ( i ) ) + c k )  with  a + = { a  if  a > 0 0  else  \begin{aligned} & A_{i j}\left(c_k\right)=e^{\left(-\frac{(f(j)-f(i))^{+}}{c_k}\right)} \\ & \text { with } a^{+}=\left\{\begin{array}{l} a \text { if } a>0 \\ 0 \text { else } \end{array}\right. \end{aligned} Aij(ck)=e(ck(f(j)f(i))+) with a+={ a if a>00 else 

定理2:假设满足以下条件:

∀ i , j ∈ S ∃ p ≥ 1 ∃ l 0 , l 1 , … , l p ∈ S \forall i, j \in S \quad \exists p \geq 1 \quad \exists l_0, l_1, \ldots, l_p \in S i,jSp1l0,l1,,lpS

w i t h   l 0 = i , l p = j ,  and  G l k , l k + 1 > 0 , k = 0 , 1 , … , p − 1 .  with \ l_0=i, l_p=j, \text { and } G_{l_k, l_{k+1}}>0, k=0,1, \ldots, p-1 \text {. } with l0=i,lp=j, and Glk,lk+1>0,k=0,1,,p1

然后,马尔可夫链具有表示为 q ( c ) q(c) q(c) 的平稳分布,这是SA算法在温度 c c c 下访问的解的分布,其分量由下式给出:

q i ( c ) = 1 N 0 ( c ) e ( − f ( i ) c ) , ∀ i ∈ S q_i(c)=\frac{1}{N_0(c)} e^{\left(-\frac{f(i)}{c}\right)}, \forall i \in S qi(c)=N0(c)1e(cf(i)),iS

其中, N 0 ( c ) N_0(c) N0(c) 是归一化系数

在这里插入图片描述

其中 X k c X^c_k Xkc 表示在温度 c c c 下获得的第 k k k 次迭代。该结果表明模拟退火算法收敛到最优解之一。

定理3:假设生成和接受的概率满足以下假设

在这里插入图片描述

然后,在任何迭代 k k k ,存在一个平稳分布 q ( c k ) q(c_k) q(ck),其分量由下式给出:

q i ( c k ) = A i O p t i ( c k ) ∑ j ∈ S A i O p t j ( c k ) ∀ i ∈ S  and  i O p t ∈ S O p t q_i\left(c_k\right)=\frac{A_{i_{O p t} i}\left(c_k\right)}{\sum_{j \in S} A_{i_{O p t} j}\left(c_k\right)} \forall i \in S \text { and } i_{Opt} \in S_{O p t} qi(ck)=jSAiOptj(ck)AiOpti(ck)iS and iOptSOpt

此外,对于任何 i O p t ∈ S O p t i_{Opt} ∈ S_{Opt} iOptSOpt ,我们有:

lim ⁡ c k → 0 + q i ( c k ) = 1 ∣ S O p t ∣ κ ( S O p t ) ( i ) \lim _{c_k \rightarrow 0^{+}} q_i\left(c_k\right)=\frac{1}{\left|S_{O p t}\right|} \kappa_{\left(S_{O p t}\right)}(i) ck0+limqi(ck)=SOpt1κ(SOpt)(i)

实际上,除了指数分布,很难找到满足 A 1 , A 2 , A 3 A_1,A_2,A_3 A1A2A3 的接受分布。

上面给出的理论结果不能直接应用于实际的SA算法,因为它们假设对于 c k c_k ck 的每个值都有无限次迭代,而且 c k c_k ck 的值不断向 0 0 0 减小。

在每个温度步骤的迭代次数是有限的情况下,可以使用马尔可夫非均匀模型来模拟SA,对于该模型可以建立类似的结果。

模拟退火算法收敛于优化问题的最优解,但是它仅在无限次转换时达到该最优解。渐近行为的近似需要多次迭代,其数量级等于状态空间的基数,这在NP-hard问题的情况下是不现实的。

因此,有必要将退火视为一种接近组合优化问题的全局解的机制,这将需要添加一种允许精确达到最优的局部搜索方法。

换句话说,模拟退火使得在正确的吸引域中移动成为可能,并且局部方法通过确定与问题的全局最优值相对应的这个吸引域内的局部最优值来优化过程。


四、实际问题

本节调查了希望为特定问题实现SA算法的朋友感兴趣的以下实际问题:有限时间近似、多项式时间冷却、马尔可夫链长度、停止准则和基于模拟的评估

4.1 Finite-Time Approximation 有限时间近似

在实践中,收敛条件将通过在每次迭代k时选择参数 c k c_k ck 的相对小的衰减步长和在该温度下足够大的转变次数 L k L_k Lk 来近似。

直觉上,减量越大,达到准平衡(定义如下)的稳定步骤的长度越长。因此,需要在“大减量”和“长度” L k L_k Lk 之间进行权衡。

模拟退火算法的有限时间实现可以通过为控制参数 c c c 的值的有限递减序列生成有限长度的齐次马尔可夫链来实现:

定义12:冷却过程的定义如下

  1. 控制参数 c c c 的有限值序列,也就是说:
    • 初始值 c 0 c_0 c0
    • 参数 c c c 的衰减函数
    • c c c 的最终值
  2. 控制参数的每个值的有限数量的转换,即相关马尔可夫链的有限长度

定义13:设 ε ε ε 是足够小的正值, k k k 是给定的迭代次数, L k L_k Lk 是第 k k k 个马尔可夫链的长度, c k c_k ck 是控制参数的值。如果在马尔可夫链的 L k L_k Lk 次迭代之后解的概率分布(由 a ( L k , c k ) a(L_k,c_k) a(Lk,ck) 表示的分布)足够接近平稳分布 q ( c k ) q(c_k) q(ck) ,我们说我们有一个准平衡:

q i ( c k ) = 1 N 0 ( c k ) e − f ( i ) c k ∀ i ∈ S , N 0 ( c k ) = ∑ j ∈ S e − f ( j ) c k \begin{gathered} q_i\left(c_k\right)=\frac{1}{N_0\left(c_k\right)} e^{-\frac{f(i)}{c_k}} \forall i \in S, \\ N_0\left(c_k\right)=\sum_{j \in S} e^{-\frac{f(j)}{c_k}} \end{gathered} qi(ck)=N0(ck)1eckf(i)iS,N0(ck)=jSeckf(j)

那就是:

∥ a ( L k , c k ) − q ( c k ) ∥ < ε \left\|a\left(L_k, c_k\right)-q\left(c_k\right)\right\|<\varepsilon a(Lk,ck)q(ck)<ε

使用准平衡原理的冷却过程基于以下观察。当参数 c k c_k ck 趋于 ∞ ∞ ,稳定分布由可能解集合 S S S 上的统一定律给出:

lim ⁡ c k → ∞ q ( c k ) = 1 ∣ S ∣ 1 \lim _{c_k \rightarrow \infty} q\left(c_k\right)=\frac{1}{|S|} \mathbf{1} cklimq(ck)=S11

其中 1 \mathbf{1} 1 是维 ∣ S ∣ |S| S 的向量,其分量都是 1 1 1

因此,对于足够大的 c k c_k ck ,以相同的概率访问搜索空间的每个点,并且无论 L k L_k Lk 的值如何,都直接达到准平衡状态。

然后,冷却过程包括确定将导致在每个马尔可夫链末端的准平衡的值 ( L k , c k ) (L_k,c_k) (Lk,ck)

有许多可能的冷却过程,但两个最常见的是 Kirkpatrick 提出的几何过程(geometric process)和 Aarts 和 Van Laarhoven 提出的多项式时间冷却(polynomial-time cooling)。

4.2 Geometric Cooling 几何冷却

  • 初始温度 c 0 c_0 c0:执行预先加热,以便我们可以找到足够大的 c 0 c_0 c0 值,使得在第一次迭代中几乎所有的转变都被接受。为了找到这样一个值,我们从一个小值 c 0 c_0 c0 开始。然后,该值逐渐乘以一个大于 1 1 1 的数,直到接受率 χ ( c 0 ) χ(c_0) χ(c0) 接近 1 1 1
  • 控制参数 c c c 的衰减 c k + 1 = α c k c_{k+1}=\alpha c_k ck+1=αck,其中 α \alpha α 一般取 0.8~0.99
  • 停止准则:当当前解在足够大的迭代次数期间从一次迭代到下一次迭代不再改变时,判定算法终止。
  • 链条的长度:理论上,需要让每条链达到准平衡状态。为此,必须执行足够数量的可接受转换,这通常取决于问题。由于被接受的转变的数量相对于被提议的转变的数量 L k L_k Lk 随时间减少,所以后者必须是下限。

4.3 Cooling in Polynomial Time 多项式时间冷却

让我们解释一下如何设置温度参数的初始值,以及如何迭代地减小它。

4.3.1 初始温度

m 1 m_1 m1 是严格提高目标函数值的建议转换总数, m 2 m_2 m2 是其他(增加的)建议转换数。此外,设 Δ ˉ f ( + ) \bar{\Delta}_f^{(+)} Δˉf(+) 是所有递增转换的成本差的平均值。那么,接受率可以近似为:

χ ( c ) ≃ m 1 + m 2 e − ( Δ ˉ f ( + ) c ) m 1 + m 2 \chi(c) \simeq \frac{m_1+m_2 e^{-\left(\frac{\bar{\Delta}_f^{(+)}}{c}\right)}}{m_1+m_2} χ(c)m1+m2m1+m2e(cΔˉf(+))

这产生了

在这里插入图片描述

初始温度 c 0 c_0 c0 的建议初始值定义如下:

最初, c 0 c_0 c0 被设置为 0 0 0 。此后,产生一系列 m 0 m_0 m0 转换,计算 m 1 m_1 m1 m 2 m_2 m2 的值。

然后, c 0 c_0 c0 的初始值由等式(1.2)计算得出,其中接受率 χ ( c ) χ(c) χ(c) 的值由用户定义。然后将 c 0 c_0 c0 的最终值作为冷却过程中的初始值。

4.3.2 控制参数的衰减

准平衡条件被替换为:

∀ k ≥ 0 : ∥ q ( k ) − q ( k + 1 ) ∥ < ε \forall k\geq 0:\|q(k)-q(k+1)\|<\varepsilon k0q(k)q(k+1)<ε

因此,对于控制参数的两个连续值 c k c_k ck c k + 1 c_{k+1} ck+1 ,期望平稳分布接近。这可以通过以下公式量化:

在这里插入图片描述

其中 δ δ δ 是先验给定的某个小正数。下面的定理提供了满足等式(1.3)的必要条件。

定理4:设 q ( c k ) q(c_k) q(ck) 是与迭代 k k k 处的模拟退火过程相关联的马尔可夫链的平稳分布,并且设 c k c_k ck c k + 1 c_{k+1} ck+1 是控制参数的两个连续值,其中 c k + 1 < c k c_{k+1} < c_k ck+1<ck ,则满足(1.3)式,如果:

在这里插入图片描述
必要条件(1.4)可以改写为:
在这里插入图片描述
可以证明后一个条件(1.5)可以近似为:

在这里插入图片描述

其中, σ c k σ_{c_k} σck 是温度 c k c_k ck q ( c k ) q(c_k) q(ck) 的标准偏差。

温度参数 c c c 的减量由用户定义的参数 δ δ δ 决定。 δ δ δ 的大值导致 c c c 的大幅度减少,而 δ δ δ 的小值导致 c c c 的小幅度减少。

4.3.3 马尔可夫链的长度

在SA冷却过程中,马尔可夫链的长度必须允许访问给定解 i ∈ S i ∈ S iS 的邻域 S i S_i Si 的相当大的百分比。以下定理用于量化该百分比:

定理5:设 S S S 是一个基数 ∣ S ∣ |S| S 的集合。然后,在 N N N 次迭代的随机行走期间访问的 S S S 个元素的平均数量由下式给出:

在这里插入图片描述

因此,如果不接受转换,并且 N = ∣ S i ∣ N = |S_i| N=Si ,则在解 i i i 的邻域 S i S_i Si 中访问的解的百分比为: 1 − e − 1 ≃ 2 / 3 1-e^{-1} \simeq 2/3 1e12/3

L k = ∣ S i ∣ L_k = |S_i| Lk=Si 给出了在迭代k时内循环(温度为 c k c_k ck )迭代次数的一个好选择,其中显然 ∣ S i ∣ |S_i| Si 与问题有关,必须由用户设计。

4.3.4 停止准则

Δ ⟨ f ⟩ c k = ⟨ f ⟩ c k − f O p t \Delta\langle f\rangle_{c_k}=\langle f\rangle_{c_k}-f_{O p t} Δfck=fckfOpt

然后,当 Δ ⟨ f ⟩ c k \Delta\langle f\rangle_{c_k} Δfck 相对于 ⟨ f ⟩ c 0 \langle f\rangle_{c_0} fc0 “足够”小时,算法的执行应该终止。

对于足够高的 c 0 c_0 c0 值,我们有 < f c 0 > ≃ ⟨ f ⟩ ∞ <f_{c_0}>\simeq\langle f\rangle_{\infty} <fc0>≃f

此外,对于 c k < < 1 c_k << 1 ck<<1

Δ ⟨ f ⟩ c k ≃ c k ∂ ⟨ f ⟩ c k ∂ c k \Delta\langle f\rangle_{c_k} \simeq c_k \frac{\partial\langle f\rangle_{c_k}}{\partial c_k} Δfckckckfck

然后,算法的终点由以下条件确定:

c k ⟨ f ⟩ ∞ ∂ ⟨ f ⟩ c k ∂ c k < ε S  for  c k < < 1 \frac{c_k}{\langle f\rangle_{\infty}} \frac{\partial\langle f\rangle_{c_k}}{\partial c_k}<\varepsilon_S \text { for } c_k<<1 fckckfck<εS for ck<<1

用户可以设置一些小的容差 ε S ε_S εS

4.3.5 小结

因此,多项式时间内的冷却过程由下式参数化:

  • 初始接受率: χ ( c 0 ) χ(c_0) χ(c0)
  • 由参数 δ δ δ 控制的连续平稳分布之间的距离
  • 由参数 ε S ε_S εS 控制的停止标准

该冷却过程的迭代次数是有限的,并且可以由以下定理来表征:

定理6:让减量函数由下式给出:

在这里插入图片描述

K K K 是满足停止标准的第一个整数。然后,我们有 K = O ( l n ( ∣ S ∣ ) ) K = O(ln(|S|)) K=O(ln(S))

因此,如果 l n ( ∣ S ∣ ) ln(|S|) ln(S) 是问题大小的多项式(这是许多组合优化问题的情况),那么这种类型的冷却导致算法的多项式执行。

每个问题都有一个最佳的退火方案,由用户决定哪一个最适合他的应用。

当没有关于最佳退火方案的先验信息时(通常是这种情况),应该依赖于标准几何方案。

对于标准几何方案,参数 c k c_k ck 演变如下: c k + 1 = α k c k c_{k+1} = α_kc_k ck+1=αkck ,并且根据经验在感兴趣的问题类别的一些代表性实例上调整参数 α k α_k αk L k L_k Lk

这种几何方法并不是对所有问题都是最佳的,但它具有稳健的优点,并确保收敛到近似解,即使它比最佳退火方案需要更多的时间来收敛。

4.4 Simulation-Based Evaluation 基于模拟的评估

在许多优化应用中,由于需要模拟环境的计算机模拟过程,目标函数被评估。

在这种情况下,优化算法控制决策变量 X X X 的向量,模拟过程使用这些变量来计算这些决策的性能(质量) y y y,如图1.3所示。

在这里插入图片描述

在这种情况下,基于群体的算法可能不适于解决这种问题,主要是当模拟环境需要大量的存储空间时,这在当今现实生活的复杂系统中是常见的情况。

事实上,在基于群体的方法的情况下,必须为解决方案群体中的每个个体复制模拟环境,这可能需要大量的存储器。

为了避免这一缺点,可以考虑只使用一个模拟环境,每次必须评估群体中的一个点时都可以使用该环境。

首先考虑为其启动模拟环境的第一个人,并且运行与该第一个人相关联的模拟。相关联的性能然后被转移到优化算法。之后,评估第二个人,但是必须首先从第一模拟的事件中清除模拟环境。然后对第二个个体运行模拟,依此类推,直到群体中的最后一个个体被评估。

在这种情况下,存储空间不再是一个问题,但评估时间可能过长,整个过程太慢,因为每次评估时都要重置仿真环境。

在标准模拟退火算法中,对于每个提出的转换,都需要一个状态空间点的副本。事实上,点 X j X_j Xj 是通过计算机内存中的副本从当前点 X i X_i Xi 生成的。在大维度的状态空间的情况下,实现这种复制的简单过程可能是低效的,并且可能显著降低模拟退火的性能。

在这种情况下,考虑返回操作符会更有效,因为它消除了生成的影响。设 G G G 是将一个点从 X i X_i Xi 变换到 X j X_j Xj 的生成算子:

G X i → X j \begin{gathered} G \\ \mathbf{X}_i \rightarrow \mathbf{X}_j \end{gathered} GXiXj

回归算子是生成算子的逆 G − 1 G^{-1} G1

通常,这样的生成只修改当前解决方案的一个组件。

在这种情况下,矢量 X i X_i Xi 可以被修改而不被复制。根据评估该新点时获得的值,可以考虑两个选项:

  1. 新的解决方案被接受,并且在这种情况下,只有当前的目标函数值被更新
  2. 否则,返回操作符 G − 1 G^{-1} G1 被应用到新位置,以便返回到先前的解,同样在存储器中没有任何复制。

这个过程总结在图1.4中。
在这里插入图片描述

必须小心使用返回运算符,因为它很容易在算法搜索状态空间的过程中产生不希望的失真。例如,如果使用和修改一些二级评估变量来计算总体评估,则这些变量也必须恢复它们的初始值,因此返回算子必须确保状态空间的一致性。


五、流程图

在这里插入图片描述


六、总结

  • 本博客详细介绍了模拟退火(SA),一种全局优化元启发式算法。
  • SA的主要优点是简单。
  • SA基于与材料的物理退火的类比,由于有效的Metropolis接受标准,避免了Monte-Carlo方法的缺点(可能陷入局部最小值)。
  • 当目标函数评估需要大量存储空间时,例如当它是由操纵涉及大量存储的大维度状态空间的复杂模拟过程产生时,基于群体的算法不适用,而模拟退火是解决这些问题的不错选择。

七、案例讲解&代码实战

【运筹优化】SA模拟退火算法求解TSP问题 + Java代码实现

猜你喜欢

转载自blog.csdn.net/weixin_51545953/article/details/130659729