如何保证施工阶段初始化所有实体的计划变量?

时间:2018-10-22 18:38:38

标签: java optaplanner

有时,如果我将构建阶段的“第二个花费”和“未改进的第二个花费”终止设置设置的时间太短,我最终会得到一些未初始化其所有规划变量的规划实体。这导致我的搜索阶段抛出与未初始化的计划变量(Local Search phase (1) needs to start from an initialized solution ...)有关的异常。

这似乎(部分)破坏了建设阶段的目的。我感觉好像在某处缺少警告吗?也许我过度配置了施工阶段?

这是我的构建阶段的配置代码。我正在使用Java配置我的规划求解而不是XML。

TerminationConfig terminationConfig = new TerminationConfig();
ConstructionHeuristicPhaseConfig phaseConfig = new ConstructionHeuristicPhaseConfig();

terminationConfig.setSecondsSpentLimit(60L);
terminationConfig.setUnimprovedSecondsSpentLimit(30L);
terminationConfig.setBestScoreLimit("0hard/0medium/0soft");

phaseConfig.setConstructionHeuristicType(ConstructionHeuristicType.FIRST_FIT);

phaseConfig.setTerminationConfig(terminationConfig);

phaseConfigs.add(phaseConfig);

有人能指出我正确的方向吗?有没有一种“正确”的方法来保证所有计划实体的所有计划变量都将在构造阶段结束之前初始化?

1 个答案:

答案 0 :(得分:1)

如果要运行LS,则没有必要在CH结束之前终止它。 让它完成并在<localSearch>而不是<solver>上放置一个终止符(当然,API也支持此终止),以避免它完成得太早。

不过,有许多方法可以使CH更快地运行,请参阅文档。

或者,将每个终结点与AND终结点的<bestScoreFeasible>true</>组合起来(=只有找到可行的解决方案,它才能终结)也可以做我想做的事,即使是全局{ {1}}终止。