or-tools 基于工作量的员工调度

Posted

技术标签:

【中文标题】or-tools 基于工作量的员工调度【英文标题】:or-tools employee scheduling based on workload 【发布时间】:2020-10-08 16:52:27 【问题描述】:

下面,每天只有一名工人 (w) 可以工作 (d)。我想根据剩余的工作量/工作来安排工作人员。当前的解决方案将每天安排工人 1 或 3,因为他们的工作量最大。假设每天工作将导致工作量减少 2,我想将其合并。这应该导致工人 1 和 3 工作两天(工作量:6 > 4 > 2),工人 2 工作一天(5 > 3)。如果“工作”,我尝试将“jobs_remaining”变量减少 2,但它不会像这样工作。

我想知道是否有可能在...中实现这一目标 (A) 任何特定命令,以及 (B) 根据每天剩余的工作量排序: 第 1 天 = 工人 1 或 3(剩余 6 个),第 2 天 = 工人 1 或 3(剩余 6 个),第 3 天 = 工人 2(剩余 5 个),第 5 天 = 工人 1 或 3(剩余 4 个)

days = [1,2,3,4,5]
workers = [1,2,3,4]
jobs_to_do_by_worker = [6,5,6,2]

worked_array = [] 
for w, jobs_remaining in zip(workers,jobs_to_do_by_worker):
    for d in days:
        worked = model.NewBoolVar('name')
        model.Add(allocations[(w,d)] == 1).OnlyEnforceIf(worked)
        model.Add(allocations[(w,d)] != 1).OnlyEnforceIf(worked.Not())
        worked_array.append(worked * jobs_remaining)
        
        #### jobs_remaining = jobs_remaining-(worked * 2) ####
              
model.Maximize(sum(worked_array))

【问题讨论】:

【参考方案1】:

所以你每天都想在 jobs_to_do_by_worker 数组中选择一个值为最大值的索引,删除两个,然后重复?

【讨论】:

您好 Mizux,感谢您的回复。这是正确的。在第 1 天,分配了工人 1。 jobs_to_do_by_worker 数组更新为 [4,5,6,2]。第 2 天 = 分配的工人 3,[4,5,4,2]。第 3 天 = 工人 2,[4,3,4,2] 等。 对这款 Mizux 有什么想法吗?最终,我想根据真/假结果更新变量。这样的事情可能吗?谢谢

以上是关于or-tools 基于工作量的员工调度的主要内容,如果未能解决你的问题,请参考以下文章

Google OR-Tools简介

Google OR-Tools简介

airflow实战系列 基于 python 的调度和监控工作流的平台

优化求解基于matlab NSGA2算法多技能员工调度优化模型含Matlab源码 1775期

OR-TOOLS - 如何解决有序分配问题?

浏览器工作原理