首页 > 解决方案 > 如何保证施工阶段初始化所有实体的计划变量?

问题描述

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

这似乎(部分)违背了建设阶段的目的。我觉得我在某处遗漏了警告?也许我过度配置了我的构建阶段?

这是我的构建阶段的配置代码。我正在使用 Java 来配置我的 Solver 而不是 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);

谁能指出我正确的方向?是否有一种“正确”的方式来保证所有规划实体的所有规划变量都将在构建阶段结束时被初始化?

标签: javaoptaplanner

解决方案


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

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

或者,将每个终止与一个AND终止结合起来<bestScoreFeasible>true</>(= 只有找到可行的解决方案,它才能终止)也可以做你想做的事情,即使作为全局<solver>终止也是如此。


推荐阅读