【问题标题】:How to get out of local optimum using simulated annealing?如何使用模拟退火摆脱局部最优?
【发布时间】:2022-11-03 20:25:14
【问题描述】:
我有一个概念问题。我正在开展一个优化项目,在该项目中我使用模拟退火元启发式算法来获得更好的解决方案。为了在 SA 中创建邻居,我使用了 SWAP 和 2-OPT 方法通过创建新序列来创建邻居。即使对于小问题,结果也表明,当我运行程序(超过 500 次迭代)时,10 次中有 7 次达到的最佳目标值是启发式实现的初始目标值。
问题是什么可能导致这种行为?
- 是因为初始可行解质量高吗?
- 改变冷却系数和启动温度会有多大帮助? (到目前为止,在小情况下它没有帮助)
- 我不是在创建高效的邻居吗?
还有什么我想念的吗?
【问题讨论】:
标签:
heuristics
simulated-annealing
【解决方案1】:
您需要跟踪百分比,接受的解决方案。
例如,每 100 个提案,打印接受的解决方案的数量。
-
从随机解决方案开始,而不是接近最佳解决方案。
-
在早期阶段,>80% 应该被接受。如果不是这种情况,请提高温度,直到如此。
-
在最后阶段,应该接受<10%,如果不是这样,降低停止温度。
-
冷却方案对溶液质量的影响很小,只要降低冷却系数就足够了,在0.99和0.8之间。 (您可以在每个温度上重复 N 次以增加建议)
-
您可以尝试不同的建议。
-
如果您申请旅行推销员,您可以选择模拟退火 (SA) 的输出。最有可能的是,您使用 2-opt 来“清理”解决方案的 SA 比没有 SA 的 2-opt 更好。
希望这可以帮助。