ERROR GUROBI:列表索引超出范围

时间:2017-07-21 20:25:53

标签: python gurobi

我的代码:

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

1 个答案:

答案 0 :(得分:0)

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

{{1}}