在Python中使用OR工具处理调度问题的复杂约束

时间:2019-12-21 14:52:42

标签: python constraints or-tools

我正在尝试使用OR Tools库来解决Python中的调度问题,这确实类似于他们的blog中解决的护士调度问题。唯一的区别是我无法使用ID为班次建模,我必须写出班次开始和班次结束的分钟。您可以想到它,就像护士必须完成三项不同的工作,而每项工作都有自己的班次写在日历中。

我想写一个约束条件,就是没有护士以不同的时间间隔从事不同的工作。问题是我的尝试使用了ifs,看来这不是定义约束的好方法。

# The total number of shifts each person has at each moment has to be less than one
for p in people:
    for r in roles_per_person[p]:
        for h in range(len(hours_per_role[r])-1):
            sum_other_roles = sum(shifts[(p, hours_per_role[r2][h2], hours_per_role[r2][h2+1], r2)] for r2 in roles_per_person[p] for h2 in range(len(hours_per_role[r2])-1) if (hours_per_role[r2][h2+1] > hours_per_role[r][h] and hours_per_role[r][h+1] > hours_per_role[r2][h2]))
            model.AddImplication(shifts[(p, hours_per_role[r][h], hours_per_role[r][h+1], r)] == 1, sum_other_roles <= 0)

我想不出任何正确的方法,而且我对sofisticated example的约束更为复杂并不真正了解。任何建议都将是有帮助的,即使只是关于如何定义复杂的约束。预先感谢。

编辑:我的意思的小例子: enter image description here

0 个答案:

没有答案