OptaPlanner documentation列出以下示例代码:
或者,在运行时构建EasyScoreCalculator实例并使用编程API进行设置:
solverFactory.getSolverConfig().getScoreDirectorFactoryConfig.setEasyScoreCalculator(easyScoreCalculator);
我认为这是:(缺少函数调用)
solverFactory.getSolverConfig().getScoreDirectorFactoryConfig().setEasyScoreCalculator(easyScoreCalculator);
但是,the JavaDoc describes无法设置实例化的EasyScoreCalculator
,只能指定一个类。我想在运行时改变一些参数,构建EasyScoreCalculator
似乎是一种合理的方法。它似乎是有意得到支持,但事实并非如此。
如何在运行时的求解器运行之间更改得分计算器的参数?
答案 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,以便在计算器实例上设置它。