在OptaPlanner中实现自定义元启发式

时间:2013-10-15 07:37:45

标签: drools-planner optaplanner

截至目前,Opta Planner规划师为以下方面提供支持:

  1. 禁忌搜索。
  2. 模拟退火。
  3. 但是,如果我需要使用Opta Planner实现任何其他算法,例如遗传算法,那么可以在何处以及如何使用它。我有遗传算法的代码,但我不知道如何将它与Opta规划器集成。我找到了一些可能的地方。

    1. 内部自定义分数类。
    2. 内部自定义Move类。
    3. 内部自定义MoveFactory类。
    4. 在XML配置文件中。
    5. 请指导我需要进行修改的地方。

      由于

2 个答案:

答案 0 :(得分:1)

实际上,一名学生(Sam Van Malderen)已经分配了OptaPlanner并添加了遗传算法实现。我指导他的工作。

Here's the source code.它有效。他撰写了自定义SolverPhase并重新使用SelectorMoveTerminationScoreDirector

基于这项工作,我们已经能够确定一些问题(here's the jira to track),以使OptaPlanner更友好地实施基于人口的元启发式。

话虽如此,在所有测试用例的所有非小数据集上,遗传算法实现的结果始终低于Tabu搜索和延迟接受。就个人而言,我不认为错误在于实施......我不是GA的忠实信徒,但OptaPlanner需要在一天之内完全支持它们(即使它只是为了证明本地搜索效果更好)。所以我非常欢迎任何将GA添加到OptaPlanner的工作。

如果您希望我让您与Sam联系以获取他的论文副本(其中描述了他实施的GA技术),请告诉我:)

答案 1 :(得分:0)

PS:另一个快速替代方案是实施 custom solver phase 。更容易,但你只能重复使用分数计算管道。