我对nurse_sat进行了稍微修改
https://github.com/google/or-tools/blob/master/examples/python/nurses_sat.py
我有一本字典,里面有(day,nurse,shift)=BoolVar的键值pares
我想让所有的护士每班都有相同的量。在
例:假设我们有30天,每天有3个班次{0,1,2},我们有3个护士{a,b,c}
我想让所有的护士做10班0班,10班2班和10班3班。在
我试图实现这一目标的方法是:
fairshift = {}
for j in range(num_nurses):
for k in range(num_shifts):
fairshift[(j,k)] = sum(shifts[(i, j, k)] for i in range(num_days))
理论上,这应该能告诉我一个护士有多少个特定的班次。E、 G:fairshift[(0,0)]应该是护士A一周中的0班。为了让他们平等,我做了这样的事情:
^{pr2}$因此,一个护士的最大k班数等于最小值,如果num_days为30,他们都应该有10个轮班
但是,我不能让它工作,我不知道为什么。为了使用IntVar而不是unu summarray,我做了如下操作:
for j in range(num_nurses):
for k in range(num_shifts):
fairshift[(j,k)] = solver.NewIntVar(0, num_days, "%i,%i" % (j,k))
solver.Add(fairshift[(j,k)] == sum(shifts[(i, j, k)] for i in range(num_days)))
在min.==max的情况下,它可以工作,但给出错误的结果。我想我在总结一些错误,但我不确定是什么。在
相关问题 更多 >
编程相关推荐