1

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

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

我很好奇如何更改我的域模型或评分函数以包含此要求。一个基本想法是将全球可再生资源(即员工)的产能从每月 30 天减少到每月 22 天(包括周末)。但是,我已经可以看出这是一种幼稚的方法。如果经理想要安排员工在某个特定的星期六来上班,将员工的工作时间增加到 23 天并不意味着他们将被安排在那个星期六。事实上,据我所知,由于容量只是我们 GlobalResource 模型中的一个简单整数,因此它不会根据上下文知道这些日期是哪一天。在我看来,我正在寻找的解决方案并未将“容量”定义为整数,而是定义为二进制值数组,其中:

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

这可能与 OptaPlanner 示例中给出的护士排班问题重叠。或者,也许我从完全错误的角度来处理这个问题。非常感谢任何有关解决此问题的提示。

4

1 回答 1

0

我首先添加一个域类 ManagerApproval 来捕获额外的数据输入,即 Job 和周末 Date 之间的批准关系。

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

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

于 2014-01-19T10:55:08.927 回答