2017-06-28 1 views
1

Ich habe ein Wörterbuch mit 2 Tasten (i und j), die die gleichen sind wie Indizes in einem Datenrahmen. Beispiel für Datenrahmen - Anforderungen für unterschiedliche i- und j-Paarungen.Python - Calling Dictionary w/2 Keys


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 
. . . 

Die i gehen von 0 bis 9 und die Wiederholung des j für jedes i von 1 bis 10. Ein Wörterbuch für Buchungen wurde aus dieser Forderung als solche akzeptiert gebaut:

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

Und jetzt versuche ich, Werte im Books Acceptant Dictionary zu referenzieren. Ich versuche, eine Beschränkung in der Pulpa festzulegen, so dass alle (i, j) Paare, bei denen i = 0 ist, summiert werden. Ich benutze das, aber es funktioniert nicht und ich kann nicht herausfinden warum.

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

gibt Fehler: KeyError: (0, (0, 1))

+1

Von Ihrer oben genannten Post sieht es aus wie 'demand.index' gibt Tupel, so dass Sie nur einen einzigartigen Satz von dem bekommen müssen zweiter Gegenstand. 'model + = pulp.lpSum ([bookingsaccepted [(0, j)] für j in Menge (b) für a, b in demand.index]) <= capacity' – rlbond

Antwort

2

, die wie Ihr demand.index sieht besteht aus Paaren (i, j). Schauen Sie hier iterieren Sie durch demand.index und es bringt i und j:

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

Also, wenn Sie demand.index sind Iterieren Sie erhalten einen Tupel (i, j). Wenn Sie nur j bekommen müssen, tun Sie dies:

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

oder

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

Warum liefert dieser Code dann nicht die gleichen Ergebnisse: ' Modell + = akzeptierte Buchungen [(0,1)] + Buchungen akzeptiert [(0,2)] + Buchungen akzeptiert [(0,3)] + Buchungen akzeptiert [(0,4)] + Buchungen akzeptiert [(0,5)] + Buchungen akzeptiert [ (0,6)] \ + Buchungen akzeptiert [(0,7)] + Buchungen akzeptiert [(0,8)] + Buchungen akzeptiert [(0,9)] + Buchungen akzeptiert [(0,10)] <= Kapazität ' – user3242036

+0

Dort sind völlig unterschiedliche Bedeutungen zwischen 'lpSum (...) <= num' und' sum (...) <= num'. –

+0

gibt auch andere Ergebnisse als: 'i, j in demand.index: wenn i == 0: Modell + = pulp.lpSum (bookingsaccepted [i, j]) <= Kapazität sonst: break' – user3242036