Optaplanner - 实时规划并没有找到好的解决方案

时间:2018-01-25 19:58:37

标签: optaplanner

我正在尝试使用实现SolverEventListener和守护进程模式的自定义SolverThread进行实时规划。

我对插入或删除实体不感兴趣。我只对"更新"感兴趣例如,改变"优先级"对于PlanningEntityCollectionProperty集合中的特定实体。

目前,我正在使用:

scoreDirector.beforeProblemPropertyChanged(entity);
entity.setPriority(newPriority);
scoreDirector.afterProblemPropertyChanged(entity);

似乎解算器已执行并且它设法改进实际解决方案,但它只花费几毫秒:

org.optaplanner.core.impl.solver.DefaultSolver: Real-time problem fact changes done: step total (1), new best score (0hard/-100medium/-15soft).
org.optaplanner.core.impl.solver.DefaultSolver: Solving restarted: time spent (152), best score (0hard/-100medium/-15soft), environment mode (REPRODUCIBLE), 

因此,考虑到我的求解器有10秒UnimprovedSecondsSpentLimit,解算器很快就会停止。因此,第一次执行求解器时,它会在10秒后停止,但是接下来的几次,它会在几毫秒后停止,并且无法获得良好的解决方案。

我不确定我需要使用" beforeProblemPropertyChanged"当规划实体发生变化时,我无法找到任何替代方案,因为" beforeVariableChanged"在计划变量发生变化时使用,对吧?也许optaplanner不支持实体中的更新,我需要使用beforeEntityRemoved删除旧的并使用beforeEntityAdded再次插入?

我正在使用BRANCH_AND_BOUND,但是,我已更改为本地搜索TABU_SEARCH,并且调度程序似乎现在使用10秒。然而,它似乎陷入了局部的最佳状态,因为它并没有设法改进解决方案,即使是非常小的集合(10个实体)。

有实时规划经验的人吗? 谢谢

1 个答案:

答案 0 :(得分:0)

"解决重启"在"实时问题事实改变完成之后不久就会跟进#34;因为有效的实时问题事实"停止&重新启动"解算器。 10秒未经改进的终止仅在重新启动后再次开始计数

DEBUG日志记录(甚至是TRACE)将向您展示实际情况。