model.Maximize(
sum(shift_requests[n][d] * shifts[( n, d)] for n in all_nurses
for d in all_days))
很好奇我如何将上面的内容(针对轮类请求进行优化)更改为下面的内容,这将优化价差。我正在尝试尽可能地分散作业。想法?
model.Maximize(
np.std(shifts[( n, d)] for n in all_nurses
for d in all_days))
最佳答案
您可以尝试以下方法
您有一个 bool 值列表:b(i) 表示 2 个工作日之间的平均跨度大于或等于 i
您需要确保 b(i) 变量之间的一致性:b(i) => b(i-1)
如果护士 n 在 d 天工作,并且 b(i) 为 true,则 work[n, d + i - 1] 为 false。全部编码为
model.AddBoolOr(work[n, d].Not(), b(i).Not(), work[n, d + i - 1].Not()]
相关的n
、d
、i
。在 b(i) 为真时最大化 i。一个粗略的解决方案就是
model.Maximize(sum(b(i)))
。也许这可以改进。
关于python - 最大限度地分散所有护士的调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62206476/