从csexchange:交叉过账
我看到的模拟退火的大多数版本都是类似于下面维基百科伪代码中概述的实现的:
Let s = s0
For k = 0 through kmax (exclusive):
T ← temperature( 1 - (k+1)/kmax )
Pick a random neighbour, snew ← neighbour(s)
If P(E(s), E(snew), T) ≥ random(0, 1):
s ← snew
Output: the final state s
我很难理解这种算法如何在温度下降时不会陷入局部最优。如果我们在温度高的时候一开始就跳来跳去,最终只在温度降低时采取上坡行动,那么找到的解决方案不是高度依赖于温度开始降低时我们碰巧在搜索空间中的位置吗?我们可能很早就找到了更好的解决方案,在温度高的时候就放弃了,然后随着温度的降低,我们过渡到爬山,情况变得更糟。
对这种方法的一个经常列出的修改是跟踪到目前为止找到的最佳解决方案。我看到这种变化如何减轻";扔掉";在探索阶段,当温度高时,找到了一个更好的解决方案,但我看不出这比简单地执行重复的随机爬山来对空间进行采样要好多少,而没有温度表演。
脑海中浮现的另一种方法是将跟踪";迄今为止最好的";通过反复的爬山和光束搜索。对于每个温度,我们可以进行模拟退火并跟踪最佳的"n"解决方案。然后,对于下一个温度,从每个局部峰值开始。
更新:有人正确地指出,我并没有真正提出具体的问题,我在评论中更新了内容,但想在这里反映出来:
我不需要将伪代码转录成文章形式,我了解它是如何工作的——温度如何平衡探索与开发,以及这(理论上)如何帮助避免局部最优。
我的具体问题是:
- 在不修改以跟踪全局最佳解决方案的情况下,尽管如此,这个算法不是非常容易出现局部最优吗温度分量?是的,我知道随着温度的降低,采取更糟糕行动的可能性会下降(例如,它转变为纯粹的爬山),但有可能你在开采部分的早期就找到了更好的解决方案(高温),然后跳下它,然后随着温度的下降,你就没有回头路了,因为你正处于一条导致新的局部峰值的道路上
- 加上跟踪全局最优,我绝对可以看看这如何缓解陷入局部峰值的情况,从而避免上述问题。但是如何这是对简单随机搜索的改进吗?一个具体的例子是反复随意爬山。如果你正在跟踪全局最优值,而你恰好在高温部分达到了它,那么这本质上是一个随机搜索
- 在什么情况下,这种算法比重复的随机爬山更可取?为什么?问题具有哪些特性,使其特别适合SA与替代方案
根据我的理解,模拟退火不是保证不会陷入局部最大值(对于最大化问题),尤其是当它";冷却";其中在循环的后面作为k->kmax。
正如你所说,我们;跳得到处都是";一开始,但我们在是否接受跳跃方面仍然是有选择的,因为确定接受概率的P()
函数是目标E()
的函数。稍后在同一篇维基百科文章中,他们稍微描述了P()
函数,并建议如果e_new>e、 那么也许P=1,如果它是一个改进,就总是采取行动,但如果它不是改进,就可能不总是这样。在周期的后期,我们不太愿意随机跳跃到较小的结果,因此算法倾向于确定为最大值(或最小值),这可能是全局的,也可能不是全局的。
全局函数评估的挑战是获得良好的效率,即用尽可能少的函数评估找到最优解或接近最优解。那么多";我们可以表演"推理在收敛到一个好的解决方案方面是正确的,但可能没有效率。
现在,纯攀登和退火之间的主要区别是,退火暂时允许目标恶化,以避免。。。陷入局部最优。爬山只搜索函数取值大于迄今为止最佳值的子空间,这可能无法连接到全局最优值。退火增加了一些";隧道";效应
温度降低并不是关键因素,顺便说一句,Simplex或Hooke Jeeves模式等登山方法也能减少扰动。温度方案更多地与目标函数的多尺度分解有关。
所问的问题似乎不太连贯,它似乎询问了香草模拟退火算法提供的保证,然后提出了多个修改,几乎没有理由。
无论如何,我会尽量在这个答案中保持连贯。
据我所知,唯一已知的模拟退火的严格证明是
使用自适应步长的概念对更好的退火算法。经典模拟退火(CSA)是第一个对其全局收敛性有严格数学证明的退火算法(Geman和Geman,1984)。已经证明,如果高斯分布用于GXY(TK),结合退火计划S(Tk),其下降不快于T=To/(logk)。整数k是外部退火循环的计数器,下面将详细介绍部分然而,对数递减时间表被认为太慢在许多问题中,所需的迭代次数被认为是"过度使用"(Ingber,1993)。
在中可以找到这方面的证据
Geman、Stuart和Donald Geman"随机松弛、吉布斯分布和图像的贝叶斯恢复"IEEE模式分析和机器智能汇刊6(1984):721-741。
就SA的成功修改而言,如果你仔细阅读文献,你会发现许多经验上的优越性主张,但很少有证据。在过去研究过这个问题后,我可以说,从我对当时感兴趣的问题进行的各种SA修改版本中,唯一一种始终比经典模拟退火产生更好结果的SA修改被称为平行回火。
平行回火是对SA的修改,即不是混合一个马尔可夫链(即退火步骤),而是在非常特定的温度下同时混合多个链,链之间的交换按动态或静态时间表进行。
平行回火原纸:
Swendsen,Robert H.和王"自旋玻璃的复制蒙特卡罗模拟"体检信57.21(1986):2607。
由于其有效性,有各种免费和专有的并行回火实现;我强烈建议您从高质量的实现开始,而不是推出自己的实现。
此外,由于其功效,平行回火在各种物理科学中被广泛用于建模目的,但由于某种原因,在其他文献领域(如计算机科学)中的代表性很小,这实际上让我有些困惑。也许计算机科学家对SA修改普遍不感兴趣可能源于他们认为SA不太可能得到改进。