我的代码:
import sys
import gurobipy as grb
GRB = grb.GRB
m = grb.Model()
m.Params.timeLimit = 3600
b = m.addVars(10,10,15, vtype=GRB.BINARY)
F = m.addVars(vtype=GRB.INTEGER)
m.addConstrs(F == (b.sum(x,y,z) for x in range(10) for y in range(10) for z in range(15)))
for x in range(10):
for y in range(10):
m.addConstrs(sum(b[x][y][z] for z in range(15)) <= 1 )
for z in range(15):
for y in range(10):
m.addConstrs(sum(b[x][y][z] for x in range(10)) <= 1 )
for x in range(10):
for z in range(15):
m.addConstrs(sum(b[x][y][z] for y in range(10)) <= 1 )
m.setObjective(F, GRB.MAXIMIZE)
m.update()
result = m.optimize()
代码应该占用10个教师,10个教室和15个小时,并返回可以找到的唯一时间表的数量,因此,对于每个(x,y,z),有一个(x&#39; ,y&#39;,z&#39;)with(x!= x&#39;),(y!= y&#39;)和(z!= z&#39;)。
这里的想法是一个3D&#34;矩阵&#34;用二进制数。如果为1,教师x在时间z在教室y,如果为0,则为免费。
我遇到的问题是IndexError:list index超出范围。我的x从1到10,y从1到10,z从1到15。
我感谢所有人的帮助。
编辑:以防万一,我在这里粘贴错误:
Changed value of parameter timeLimit to 3600.0
Prev: 1e+100 Min: 0.0 Max: 1e+100 Default: 1e+100
Traceback (most recent call last):
File "exec2.py", line 14, in <module>
F = m.addVars(vtype=GRB.INTEGER)
File "model.pxi", line 2261, in gurobipy.Model.addVars (../../src/python/gurobipy.c:73898)
File "model.pxi", line 198, in gurobipy.__listify.__init__ (../../src/python/gurobipy.c:47440)
IndexError: list index out of range
答案 0 :(得分:0)
Model.addConstr()采用线性表达式(LinExpr对象),而Model.addConstrs()采用Python生成器表达式。您应该将约束重写为:
{{1}}