约束模拟退火

计算科学 约束优化 约束 离散优化
2021-12-21 21:48:51

模拟退火是一种有用的技术,可用于寻找组合问题的接近最优解。我找到了很多关于实现基本算法的教程,但是错过了关于如何将约束纳入优化的一般指南。

我想知道是否有人知道将约束纳入模拟退火应用程序的任何建议或算法来源。

注意:我已经构建了一些算法来生成解决方案的可行排列,但希望看到更一般的结果。

任何帮助是极大的赞赏

1个回答

模拟退火来自统计力学中的计算。当我想到模拟退火时,我非常喜欢物理学:我想最小化一些取决于配置的势能函数,其全局最小值对应于您问题的最优解。在高温下,有足够的动能来对抗势梯度,也就是说,与低温时相比,您更有可能朝着势能更高的配置移动。如果你想象一个有一些弹珠的山地景观,然后疯狂地摇晃它,弹珠可能会向各个方向移动,通常是上坡。如果你只是轻轻摇晃它,局部最小值的弹珠会在最小值附近轻微移动,只有当最小值非常浅时,它才会移出并向下滚动以进一步降低势能。如果您从高温开始并缓慢下降,则大理石最初会被摇出(并进入)甚至非常深的局部最小值,但后来它们不会回到必须克服高势垒的最小值。

在模拟退火中,这个时间因素是不存在的,但除此之外,这个想法是相同的。代替根据系统时间演化的下一个配置,考虑并以适当的温度相关概率接受或拒绝一般附近配置(在任何意义上)。当系统假设遍历假设时,从长远来看,粗略地说,您将找到相同的配置,但对于实际应用,您无需为这些技术性问题而烦恼。

在统计力学中,转移概率将基于配置的玻尔兹曼分布,但同样,如果您只想优化范围广泛的转移概率,则可以为您解决问题。

在所有这些离题之后,让我们假设您的转变概率作为两种配置的能量和温度的函数是给定的。然后剩下两个步骤可以处理您的特定约束:相邻状态的生成和能量函数的定义。如果你对状态有严格的限制,即某些状态是严格禁止的,你可以直接将它们的一代排除为候选邻居。您甚至可以找到一种方法,在考虑了能量的分布之后直接生成随机相邻状态。

正如安德烈在评论中所说,处理约束的明显步骤不是对邻居进行抽样,而是在能量函数的定义中。在这里,您可以通过为它们分配无限能量,以直接的方式排除配置;如果你分配一个非常高的能量,它们将基本上无法访问,除非在非常高的温度下,让你基本上“隧道”通过它们(如果你需要允许的话)。

作为统计力学算法的参考,它以极好的方式解释了模拟退火的背景,我推荐这本书,作者是 Werner Krauth配套的在线课程如果您有优化问题的物理模拟,那么这可以直接指导您将能量分配给配置。

我不确定这是否解决了您的问题,但我希望它无论如何都会有所帮助。