【问题标题】:Optaplanner project job scheduling: weekends and holidaysOptaplanner 项目作业调度:周末和节假日
【发布时间】:2014-02-07 23:15:11
【问题描述】:

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

“除非经理特别批准,否则应用程序不得在任何给定的周末或节假日安排工作。”

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

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

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

【问题讨论】:

    标签: java optaplanner


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-08
      • 2021-10-02
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多