我正在使用 OptaPlanner 来解决一些规划问题。我阅读了文档,但我不太确定爬山和禁忌搜索算法究竟是如何工作的。我不确定的是:
- 爬山选择是否只移动具有比当前更好的最佳分数的移动,或者它是否允许选择具有不比当前更差的最佳分数的移动?
- 禁忌搜索是否允许选择得分比当前得分更差的动作,如果没有动作导致解决方案的得分高于或等于当前得分?
我正在使用 OptaPlanner 来解决一些规划问题。我阅读了文档,但我不太确定爬山和禁忌搜索算法究竟是如何工作的。我不确定的是:
对于爬山,请参阅HillClimbingAcceptor#isAccepted(...)
。它接受任何得分高于或等于最后一步得分的移动。并查看爬山的默认觅食配置(在 中LocalSearchPhaseConfig
,其中表示foragerConfig.setAcceptedCountLimit(1);
),一旦接受 1 步,即是获胜步。
对于禁忌搜索,如果出现以下情况,它将选择得分较低的动作:
acceptedCountLimit
配置为1000
左右),没有看到更好的移动PS:爬山很烂。没有理由不使用延迟接受或禁忌搜索。
PPS:使用 Benchmarker,让 HC、LA、TS、... 互相对抗。它会给你很多洞察力。