基于OptaPlanner的排课应用拖拽错误扫描性能优化问询
基于OptaPlanner的交互式排课应用优化问题
我正在开发一款基于OptaPlanner的交互式排课应用,支持拖拽操作时实时展示冲突问题:

当前实现方式
当前实现方式较为朴素:遍历所有有效时段,将其分配给课程,再通过solutionManager.explain(schedule).getConstraintMatchTotalMap()获取对应调度的约束匹配结果,收集各时段问题并返回至前端。
性能瓶颈问题
当存在数百门课程、5分钟间隔的约500个时段时,该操作速度极慢,完成全时段问题计算需约5秒。注意到CH(构造启发式)阶段中有效时段计算速度极快,推测是OptaPlanner采用增量变更而非重新计算的方式。
核心疑问
是否有方法可加速这种按时段扫描错误的流程?
现有思路探索
若官方无直接支持,尝试过自定义求解器,通过移动列表工厂向OptaPlanner传入课程时段分配以实现增量计算,但不知是否有更优方案?
进一步研究后产生疑问:能否通过自定义阶段解决?即调用changeWorkingSolution处理每个时段更新?若可行,如何获取当前分数解释?是否需要调整SolutionUpdatePolicy?
内容的提问来源于stack exchange,提问作者aioobe
相关产品推荐
相关产品推荐

