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 基于工作量的员工调度的主要内容,如果未能解决你的问题,请参考以下文章
airflow实战系列 基于 python 的调度和监控工作流的平台