2017-06-28 74 views
1

我有一個字典有2個鍵(i和j),它們與數據框中的索引相同。 數據幀示例 - 需要不同的i和j配對。Python - 調用字典w/2鍵


i j Demand 
0 1 13 
0 2 24 
0 3 68 
0 4 92 
0 5 72 
0 6 11 
0 7 12 
0 8 6 
0 9 4 
0 10 3 
1 1 0 
1 2 11 
1 3 15 
. . . 

第i的從0到9和第j的重複去對於每個i從1到10 甲字典預約接受建關閉此需求的這樣:

bookingsaccepted = pulp.LpVariable.dicts("bookingsaccepted", 
        ((i, j) for i, j in demand.index), lowBound=0, cat='Integer') 

現在我正在嘗試在預訂接受的字典中引用值。我試圖在紙漿中設置一個約束,以便所有(i,j)對(i = 0)相加在一起。我使用這個,但它不起作用,我不明白爲什麼。

model += pulp.lpSum([bookingsaccepted[(0,j)] for j in demand.index]) <= capacity 

給出錯誤: KeyError異常:(0,(0,1))

+1

從你上面的帖子,它看起來像'所以你需要得到的只是一套獨特的demand.index'返回元組第二項。 'model + = pulp.lpSum([setings(b))中的j的訂單接受[(0,j)] for a,b in demand.index])<= capacity' – rlbond

回答

2

這看起來像你的demand.index包括對(i, j)的。看看這裏你通過demand.index迭代和它帶來的i和j:

bookingsaccepted = pulp.LpVariable.dicts("bookingsaccepted", 
       ((i, j) for i, j in demand.index), lowBound=0, cat='Integer') 

所以,當你迭代demand.index你得到一個元組(i, j)。如果你需要得到的只是j,這樣做的:

model += pulp.lpSum([bookingsaccepted[(0,j)] for i, j in demand.index]) <= capacity 

model += pulp.lpSum([bookingsaccepted[(0,index[1])] for index in demand.index]) <= capacity 
+0

爲什麼這個代碼不能提供相同的結果:'模型+ =預訂接受[(0,1)] +預訂接受[(0,2)] +接受預訂[(0,3)] +接受預訂[(0,4)] +預訂接受[(0,5)] +預訂接受[ (0,6)] \ +接受預訂[(0,7)] +接受預訂[(0,8)] +預訂接受[(0,9)] +預訂接受[(0,10)] <=容量' – user3242036

+0

那裏在lpSum(...)<= num'和'sum(...)<= num'之間是完全不同的含義。 –

+0

還給出比不同的結果: '爲I,J在demand.index: 如果我== 0: 模型+ = pulp.lpSum(bookingsaccepted [I,J])<=容量 否則: 休息' – user3242036