问题描述
以下,每天(d)只有一名工人(w)可以工作。我想根据剩余的工作量/工作来安排工人。当前的解决方案将每天安排工人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,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))
解决方法
因此,每天您都想在jobs_to_do_by_worker数组中选择一个值最大的索引,删除两个,然后重复?