2014-05-10 3 views
1

오류를 압축을 풀 수 파이썬에서 6 차원 변수를 정의하려고합니다. 각 차원을 목록으로 정의했습니다. 차원은 게임, 교대조, 시간, 구덩이, order1 및 order2입니다. 이러한 6 가지 차원의 일부 조합 만 유효하기 때문에 콤보를 튜플리스트로 정의하여 어떤 콤보가 존재 하는지를 정의했습니다. 그런 다음 유효 콤보로 변수를 정의하려고합니다. 귀하의 "콤보"변수가 여러 변수에 압축을 풀 수없는 문자열 인는 6 차원 변수를 정의하려고 내가 너무 많은 값이 내가 (gurobi이 최적화 라이브러리) 나는이 오류가 발생했습니다 파이썬에서 gurobi 라이브러리를 사용하는 것을 시도하고있다

from gurobipy import* 
m=Model('mymodel') 

combo, oi =multidict({'(1,1,bj,1,1,1)': 100, 
    '(1,1,bj,1,1,2)':200, 
    '(1,1,bj,1,1,3)':200, 
    '(1,1,bj,1,2,1)':50, 
    '(1,1,bj,1,2,2)':70, 
    '(1,1,bj,1,2,3)':70, 
    '(1,1,cr,1,1,1)':400, 
    '(1,1,cr,1,1,2)':450}) 

combo =tuplelist(['(1,1,bj,1,1,1)', 
    '(1,1,bj,1,1,2)', 
    '(1,1,bj,1,1,3)', 
    '(1,1,bj,1,2,1)', 
    '(1,1,bj,1,2,2)', 
    '(1,1,bj,1,2,3)', 
    '(1,1,cr,1,1,1)', 
    '(1,1,cr,1,1,2)']) 

x={} 
for s,t,i,p,n,m in combo: 
    x[s,t,i,p,n,m] = m.addVar(vtype=GRB.BINARY, obj=oi[s,t,i,p,n,m],name=s+","+t+","+i+","+p+","+n+","+m) 
+0

코드를 실행할 때 어떤 일이 발생하며 달성하려는 것과 어떻게 다릅니 까? –

답변

1

: tuplelist 및 addVar 같은 개체의 일부는 gurobipy 라이브러리
파이썬 코드가 함께 제공됩니다. 또한 코드가 실행되면 "m"변수가 모델을 저장하는 데 사용되며 for 루프에 겹쳐 쓰여집니다.

from gurobipy import * 
model=Model('mymodel') 

combos, oi =multidict({ 
    (1,1,'bj',1,1,1):100, 
    (1,1,'bj',1,1,2):200, 
    (1,1,'bj',1,1,3):200, 
    (1,1,'bj',1,2,1):50, 
    (1,1,'bj',1,2,2):70, 
    (1,1,'bj',1,2,3):70, 
    (1,1,'cr',1,1,1):400, 
    (1,1,'cr',1,1,2):450}) 

x={} 
for combo in combos: 
    x[combo] = model.addVar(vtype=GRB.BINARY, 
            obj=oi[combo], 
            name=".".join(map(str, combo))) 
+0

데이비드 감사합니다. 다음은 또한 작동했습니다 : def label (c) : \t "x"+ str (c) .translate (없음, " '") 콤보, oi = multidict ({ (1,1,'bj ', 1 1, bj ', 1,1,3) : 200, (1,'bj ', 1,1,2) : 200, (1,1,'bj ', 1,1,3) : 200, 1, 'bj', 1,2,1) : 50, (1,1, 'bj', 1,2,2) : 70, (1,1, 'bj', 1,2,3) (1,1, 'cr', 1,1,2) : 450 x = {} ##x = {} x = {} # s, t, i, p, n, k에 대한 콤보 : # x [s, t, (s, t, i, p, n, k))]}} – Zed