如何为Optaplanner解算器实例化EasyScoreCalculator?

时间:2018-04-10 05:28:52

标签: optaplanner

OptaPlanner documentation列出以下示例代码:

  

或者,在运行时构建EasyScoreCalculator实例并使用编程API进行设置:

solverFactory.getSolverConfig().getScoreDirectorFactoryConfig.setEasyScoreCalculator(easyScoreCalculator);

我认为这是:(缺少函数调用)

solverFactory.getSolverConfig().getScoreDirectorFactoryConfig().setEasyScoreCalculator(easyScoreCalculator);

但是,the JavaDoc describes无法设置实例化的EasyScoreCalculator,只能指定一个类。我想在运行时改变一些参数,构建EasyScoreCalculator似乎是一种合理的方法。它似乎是有意得到支持,但事实并非如此。

如何在运行时的求解器运行之间更改得分计算器的参数?

1 个答案:

答案 0 :(得分:1)

setEasyScoreCalculator()故意无法使用,因为在多线程解决方案中也存在其他用例(例如"解释得分" - 请参阅文档) ,将会有多个并行活动的EasyScoreCalculator实例,因此我们需要能够实例化它们。

  

如何在求解器之间改变得分计算器的参数   在运行时运行?

<customPhase>元素(请参阅CustomPhaseConfig.java)支持Map<String, String> customProperties以更改自定义阶段的参数。 PartitionedSearchPhaseConfig.java也以类似的方式支持这方面的其他功能。 在我们的问题跟踪器中创建一个问题(请参阅&#34;获取帮助&#34;在optaplanner.org上)以在EasyScoreCalculator,IncrementalScoreCalculator和Drools上支持此功能。对于Drools,它会将这些属性注入全局字段。

在拉取请求中实现应该相当简单。在ScoreDirectorFactoryConfig.java中添加这样一个Map,将其传递给调用ConfigUtils的ScoreDirectorFactory,以便在计算器实例上设置它。