2017-07-21 8 views
1

のうち、私のコード:ERROR 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!= x ')、(y!= y')、および(z!= z ')の(x'、y '、z')が存在する。

ここでのアイデアは、2進数の3D「マトリックス」でした。 1の場合、教師xは時間zで教室yにあり、0なら無料です。

問題は、IndexError:リストのインデックスが範囲外です。私はxが1から10、yが1から10、zが1から15まで動いています。

私はすべての助けに感謝します。

編集:念のために、私はここでエラーを貼り付けています:Model.addConstrs()はPythonのジェネレータ式をとりながら

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

Model.addConstr()は、次式(LinExprオブジェクト)を取ります。制約を次のように書き直す必要があります。

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)) 
関連する問題