【发布时间】:2022-01-04 15:04:02
【问题描述】:
对于轮班优化问题,我在 PuLP 中定义了一个二进制变量,如下所示:
pulp.LpVariable.dicts('VAR', (range(D), range(N), range(T)), 0, 1, 'Binary')
在哪里
- D = 我们创建的每个计划中的 # 天(=28 或 4 周)
- N = 工人数
- T = 轮班类型 (=6)
对于第 5 和第 6 类工作班次(索引为 4 和 5),我需要添加一个约束条件,即任何从事这些班次工作的工人必须连续工作 7 天......而不是任何 7 天,而是从星期一开始的 7 天(又名一整周)。我尝试按如下方式定义约束,但是当我添加此约束并尝试解决问题时,我得到了一个不可行的解决方案(之前没有它也可以工作)
我知道这个约束(以及之前的其他约束)在理论上应该是可行的,因为我们手动使用相同的约束集安排工作班次。我编写约束的方式有什么问题吗?
## looping over each worker
for j in range(N):
## looping for every Monday in the 28 days
for i in range(0,D,7):
c = None
## accessing only the 5th and 6th work shift type
for k in range(4,T):
c+=var[i][j][k]+var[i+1][j][k]+var[i+2][j][k]+var[i+3][j][k]+var[i+4][j][k]+var[i+5][j][k]+var[i+6][j][k]
problem+= c==7
【问题讨论】:
标签: optimization constraints linear-programming pulp