截至目前,Opta Planner 规划器提供以下支持:
- 禁忌搜索。
- 模拟退火。
但是,如果我需要使用 Opta Planner 实现任何其他算法,例如遗传算法,那么可以在哪里以及如何使用它。我有遗传算法的代码,但是我不知道如何将它与 Opta 规划器集成。我发现很少有可能的地方。
- 在自定义 Score 类中。
- 在自定义 Move 类中。
- 在自定义 MoveFactory 类中。
- 在 XML 配置文件中。
请指导我需要在哪里进行修改。
谢谢
截至目前,Opta Planner 规划器提供以下支持:
但是,如果我需要使用 Opta Planner 实现任何其他算法,例如遗传算法,那么可以在哪里以及如何使用它。我有遗传算法的代码,但是我不知道如何将它与 Opta 规划器集成。我发现很少有可能的地方。
请指导我需要在哪里进行修改。
谢谢
实际上,一个学生(Sam Van Malderen)已经分叉了 OptaPlanner 并添加了一个遗传算法实现。我指导他的工作。
这是源代码。有用。他编写了一个自定义SolverPhase
并重用了Selector
,Move
和.Termination
ScoreDirector
基于这项工作,我们已经能够确定一些问题(这里是要跟踪的 jira),以使 OptaPlanner 更友好地实施基于人口的元启发式算法。
话虽如此,在所有测试用例的所有非小型数据集上,遗传算法实现的结果始终不如禁忌搜索和延迟接受。就个人而言,我认为问题不在于实施......我不是 GA 的坚定信徒,但 OptaPlanner 总有一天需要开箱即用地完全支持它们(即使它只是为了证明 Local Search效果更好)。因此,我绝对欢迎任何将 GA 添加到 OptaPlanner 的工作。
如果您希望我让您与 Sam 联系以获取他的论文副本(描述了他实施了哪些 GA 技术),请告诉我 :)
PS:另一种快速的选择是实现自定义求解器阶段。容易得多,但您只能重复使用分数计算管道。