根据问题输入有条件地 运行 Optaplanner 阶段

Conditionally running Optaplanner phases based on problem input

我正在使用 Optaplanner 解决 TWVRP 问题,使用“延迟到最后”模式让多个工作人员执行某些任务。所需的循环检测与问题大小的比例非常大,所以我想 运行 仅当问题大小低于某个阈值时才进行本地搜索阶段。我怎样才能做到这一点?例如,

if(problemSize < X){
    solveWithCHandLS(problem)
}else{
    solveWithCHonly(problem)
}

可以选择对 OptaPlanner 配置进行编码。因此,您可以编写自己的求解器配置代码,而不是给 OptaPlanner XML 或 Quarkus 中的属性:

SolverConfig solverConfig = new SolverConfig();

从那里,使用您的 IDE 代码完成来发现 API。它或多或少是与求解器配置 XML 的一对一映射。完成构建求解器配置后,您需要从中构建求解器:

SolverFactory<...> solverFactory = SolverFactory.create(solverConfig);
Solver<...> solver = solverFactory.buildSolver();

针对您的每个问题大小,创建不同的配置并根据当前合适的配置构建求解器。