用于车辆路线的OptaPlanner
我正试图用OptaPlanner解决VRP问题。我用约束提供者、规划实体和规划解决方案等编写了所有代码。问题是,我正在尝试通过用于车辆路线的OptaPlanner,optaplanner,vehicle-routing,Optaplanner,Vehicle Routing,我正试图用OptaPlanner解决VRP问题。我用约束提供者、规划实体和规划解决方案等编写了所有代码。问题是,我正在尝试通过 SolverConfig solverConfig = new SolverConfig(); solverConfig.withSolutionClass(Solution.class); solverConfig.withEntityClasses(Stop.class, Standstill.class);
SolverConfig solverConfig = new SolverConfig();
solverConfig.withSolutionClass(Solution.class);
solverConfig.withEntityClasses(Stop.class, Standstill.class);
ScoreDirectorFactoryConfig scoreDirectorFactoryConfig = new ScoreDirectorFactoryConfig();
scoreDirectorFactoryConfig.setConstraintProviderClass(VrpConstraintProvider.class);
solverConfig.withScoreDirectorFactory(scoreDirectorFactoryConfig);
SolverFactory<Solution> solverFactory = SolverFactory.create(solverConfig);
Solver<Solution> solver = solverFactory.buildSolver();
Solution solution = solver.solve(solutionDef);
SolverConfig SolverConfig=new SolverConfig();
solverConfig.withSolutionClass(Solution.class);
solverConfig.WithEntityClass(停止类、停止类);
ScoreDirectorFactoryConfig ScoreDirectorFactoryConfig=新的ScoreDirectorFactoryConfig();
scoreDirectorFactoryConfig.setConstraintProviderClass(VrpConstraintProvider.class);
solverConfig.WithCoreDirectorFactory(scoreDirectorFactoryConfig);
SolverFactory SolverFactory=SolverFactory.create(solverConfig);
Solver Solver=solverFactory.buildSolver();
Solution Solution=求解器.solve(solutionDef);
但这导致了无休止的等待解决方案。你知道原因是什么吗?提前感谢。您尚未配置解算器终止条件。例如,如果希望解算器求解60秒,请添加以下内容:
solverConfig.withTerminationConfig(新TerminationConfig().withSecondsPentLimit(60L));
请注意,在本例中,解算器在主线程上运行并阻止它,直到满足终止条件并自动停止解算。因为在您的示例中没有这样的条件,所以它将永远解决并阻塞线程
或者,使用SolverManager
API异步解决问题(在工作线程上):
int problemId=1;
SolverManager SolverManager=SolverManager.create(
solverConfig,新的SolverManager配置());
SolverJob SolverJob=solverManager.solve(problemId,solutionDef);
//等待一段时间,然后终止解算器管理器
solverManager.terminateEarly(problemId);
Solution bestSolution=solverJob.getFinalBestSolution();