我正在尝试使用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的约束更为复杂并不真正了解。任何建议都将是有帮助的,即使只是关于如何定义复杂的约束。预先感谢。