我的代码:
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',y',z')和(x!=x'),(y!=y’)和(z!=z’)。在
这里的想法是一个带有二进制数的三维“矩阵”。如果1,教师x在时间z在教室y,如果0,空闲。在
我遇到的问题是索引器错误:列表索引超出范围。x从1到10,y从1到10,z从1到15。在
我感谢所有的帮助。在
编辑:以防万一,我将错误粘贴在这里:
^{pr2}$
Model.addConstr()采用线性表达式(LinExpr对象),而Model.addConstrs()采用Python生成器表达式。您应该将约束重写为:
相关问题 更多 >
编程相关推荐