2014-05-10 48 views
1

我試圖使用gurobi庫在Python(gurobi是一個優化庫) 我得到這個錯誤---- Value Error: too many values to unpack試圖定義一個6維變量,我得到了太多值解壓錯誤

我試圖在python中定義一個6維變量。我將每個維度定義爲列表 尺寸是遊戲,班次,小時,坑,order1和order2 由於只有這6個維度的某些組合是有效的,所以我將組合定義爲tuplelist以指定存在哪些組合。 然後我想用有效的組合來定義變量。有些人喜歡tuplelist和addVar對象自帶gurobipy庫
的Python代碼是:

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

你的「二合一」變量是無法解壓縮成多個變量的字符串。你的代碼也是,如果你的代碼確實運行了,那麼使用「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 return「x」+ str(c).translate(None,「'」)combo,oi = multidict(1,1,'bj',1 (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) (1,1,'cr',1,1,1):400, (1,1,'cr',1,1,2):450, }) x = { # s,t,i,p,n, i,p,n,k], #name = label((s,t,i,p,n,k))) – Zed

相關問題