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



有时,如果我将施工阶段的"花费的秒数"和"未改进的花费秒数"终止设置的时间设置太短,我最终会得到一些计划实体没有初始化其所有计划变量。这导致我的搜索阶段抛出有关未初始化计划变量的异常(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);

谁能指出我正确的方向?是否有一种"正确"的方法来保证所有规划实体的所有计划变量将在施工阶段结束时初始化?

如果要运行 LS,则在 CH 完成之前终止 CH 是没有意义的。 让它完成并在<localSearch>而不是<solver>上放置一个终止(当然,API 也支持这一点(,以避免它过早完成。

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

或者,将每个终止与<bestScoreFeasible>true</>端接的AND相结合(= 只有在找到可行解决方案时才能终止(也可以做你想做的事,我相信即使是全局<solver>端接。

最新更新