护士安排不同长度的班次

时间:2019-08-02 22:36:15

标签: python job-scheduling constraint-programming or-tools integer-programming

我正在尝试将this code中的班次调度问题改编为使用不同长度的班次,但是我没有成功。包含此功能的最佳方法是什么?

在代码中,我们在以下部分(第194行)中输入shitfs的类型:

    shifts = ['OFF', 'MORNING', 'AFTERNOON', 'NIGHT']

告知需求的代码如下:

    weekly_cover_demands = [
        (2, 3, 1),  # Monday
        (2, 3, 1),  # Tuesday
        (2, 2, 2),  # Wednesday
        (2, 3, 1),  # Thursday
        (2, 2, 2),  # Friday
        (1, 2, 3),  # Saturday
        (1, 3, 1),  # Sunday
    ]

只有在该轮班中需要一些员工时,此代码段才会收到,但是在我的问题中,我要求轮班时间不同(例如7和8个小时)。

我尝试了两种方法(到目前为止没有成功):

  1. 为每种长度创建单独的需求:
    weekly_cover_demands = [
        (2, 3, 1, 7),  # Monday
        (1, 0, 1, 8),  # Monday
        (2, 3, 1, 7),  # Tuesday
        (2, 0, 1, 8),  # Tuesday
        (2, 2, 2, 7),  # Wednesday
        (1, 1, 1, 8),  # Wednesday
        (3, 3, 3, 7),  # Thursday
        (2, 3, 1, 8),  # Thursday
    ]
  1. 使用元组中的列表。
    weekly_cover_demands = [
        ([2, 1], [3, 0], [1, 1]),  # Monday
        ([2, 2], [3, 0], [1, 1]),  # Tuesday
        ([2, 1], [2, 1], [2, 1]),  # Wednesday
        ([3, 2], [3, 3], [3, 1]),  # Thursday
    ]

但是它们都不是很好。

如何利用or-tools的优势来包含此功能?

1 个答案:

答案 0 :(得分:0)

我相信您会误解(2,3,1)的语义。 这意味着2个早班,3个下午和1个晚上。

在后面加上一个数字将无济于事。