Optaplanner项目工作安排:周末和假日

时间:2014-01-18 15:18:23

标签: java optaplanner

正如我在上一个问题中提到的,我正在使用优秀的OptaPlanner库来创建一个应用程序,该应用程序可以帮助自定义作业车间进行项目计划。该应用程序具有以下要求:

“申请人不得在任何特定的周末或假日安排工作,除非经理给予特别批准。”

我很好奇如何更改我的域模型或评分功能以合并此要求。一个基本想法是将全球可再生资源(即员工)的容量从例如每月30天减少到每月22天(占周末)。但是,我已经可以看到这是一种天真的方法;如果经理想安排员工参加某个特定的星期六,那么将员工的工作能力提高到23天并不意味着他们将安排在那个星期六。事实上,据我所知,由于容量只是我们的GlobalResource模型中的一个简单整数,因此它无法从上下文中了解这些特定日期。在我看来,我正在搜索的解决方案并没有将“容量”定义为整数,而是将二进制值数组定义为:

容量[ d ] = x ,其中 d 是该月的某一天, x 是资源的可用性(1或0)。假设没有经理想要在特定星期六安排工作,那么每个全球可再生资源在该特定星期六的容量将为0。

这可能与OptaPlanner示例中给出的Nurse Rostering问题重叠。或者,也许我从完全错误的角度来看待这个问题。非常感谢任何解决这个问题的提示。

1 个答案:

答案 0 :(得分:0)

我首先添加一个域类ManagerApproval来捕获额外的数据输入,这是作业和周末日期之间的批准关系。

对于周四至周二的未经批准的工作,周末时间不计入完成工作。 对于从周四到周二的批准工作,它更棘手,因为 - 理论上 - 计划者可以决定使用或不使用星期六(如果工作在星期二或星期一结束,则会影响)。 所以听起来你需要一个额外的计划变量来捕捉这种差异......

至于约束,我希望使用周末Date会造成(高于正常)软约束权重。