错误GUROBI:列表索引超出范围

2024-07-03 06:05:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码:

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}$

Tags: 代码inimportfor错误sysrange教师
1条回答
网友
1楼 · 发布于 2024-07-03 06:05:19

Model.addConstr()采用线性表达式(LinExpr对象),而Model.addConstrs()采用Python生成器表达式。您应该将约束重写为:

m.addConstr(F == b.sum('*','*','*'))
m.addConstrs(b.sum(x,y,'*') <= 1 for x in range(10) for y in range(10))
m.addConstrs(b.sum('*',y,z) <= 1 for y in range(10) for z in range(15))
m.addConstrs(b.sum(x,'*',z) <= 1 for x in range(10) for z in range(15))

相关问题 更多 >