最大程度地提高所有护士的日程安排

问题描述 投票:2回答:1
    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))
python or-tools
1个回答
3
投票

您可以尝试以下操作

您有一个布尔值列表:b(i)表示2个工作日之间的平均跨度大于或等于i

  1. 您需要确保b(i)变量之间的一致性:b(i)=> b(i-1)

  2. 如果护士n在第d天工作,且b(i)为真,则work [n,d + i-1]为假。所有相关的model.AddBoolOr(work[n, d].Not(), b(i).Not(), work[n, d + i - 1].Not()]nd都编码为i

  3. 最大化i,其中b(i)是true。粗略的解决方案就是model.Maximize(sum(b(i)))。也许可以改进。

© www.soinside.com 2019 - 2024. All rights reserved.