我有点想知道如何实施重复计划。
该文件分为3种情况。 '备份计划','持续计划'和'实时计划'。
如果我没有遗漏某些内容,所有optaplanner示例(例如护士烘焙)都会使用' ProblemFactChange'来实施重复计划。这是在“实时计划”中描述的。没关系。 Solver.addProblemFactChange()将优雅地处理ProblemFactChange。
但这听起来像是一种实时规划的方法。我们应该如何实施备份计划' /'持续规划'以更简单的方式?
实现" 15.2中的内容。备份计划",
然后,当出现问题时(其中一名员工生病), 改变原始解决方案的计划事实(删除病人 员工未分配他/她的班次,然后重启 计划,从该解决方案开始,具有不同的分数 现在。建设启发式将填补新创建的空白 (可能与备用员工一起),甚至是元启发式 进一步改善它。
我只是:
这是一种有效的方法吗?
答案 0 :(得分:2)
关于上面的伪代码:这种方法也可以,它是一种手动形式的实时规划。 ProblemFactChange
的优点是它是从另一个线程(异步)提交的。一旦这样的PFC进入,求解器线程就会注意到PFC队列不为空,停止求解,处理PFC队列然后再次开始求解。与上面描述的几乎相同。通过启用日志记录,我在CloudBalancing中看到,在异步线程提交PFC之前和解算器线程处理完之后的时间之间,再次找到初始化的可行解决方案的时间是12ms
左右(取决于PFC当然,在我的情况下,它正在删除一台分配了10个进程的计算机。)
关于一般的重复计划:重复计划只是一个分类名称。 3种形式的重复计划(备份计划,持续计划,实时计划)相互补充(=彼此正交),它们不是彼此的替代品。
示例nurse rostering(员工排班)实现:
所有3种表格都有不同的需求,可以同时应用于同一个用例。