2017-10-27 4 views
1

Hallo ich in Python noch ziemlich neu bin und würde gerne wissen, warum diese Linie:KeyError: 0 Python

RP[p][t] = demand[p][t]/fillingrate[p] 

zu dem Fehler führt: KeyError: 0

folgt dem entsprechenden Teil des Codes. Ist es nur ein Fehler der Notation oder was ist der beste Weg, um es zu lösen?

productname = ('milk', 'yoghurt', 'buttermilk') 
    fillingrate = (1.5, 1.0, 2.0) 

    day = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14) 

    demand = [ 
    (5, 4, 3, 3, 4, 9, 13, 5, 4, 4, 3, 5, 10, 12), 
    (3, 5, 3, 5, 5, 4, 3, 4, 3, 4, 3, 4, 5, 5), 
    (3, 3, 5, 4, 4, 5, 4, 3, 4, 3, 4, 5, 4, 5) 
    ] 

    T = range (len(day)) 
    P = range (len(productname)) 


    for p in P: 
     for t in T: 
      RP[P,T] = model.addVar (lb = 0, vtype = GRB.CONTINUOUS, 
      name = 'Regular Production[' + str(p) + ',' + str(t) + ']') 
      print(demand[p][t]) 
      print(fillingrate[p]) 
      RP[p][t] = demand[p][t]/fillingrate[p] 
      print(RP[p][t]) 
+0

Sie indexieren 'RP' mit' [P, T] ', was ein Tupel von Bereichen ist. Wo wird "RP" deklariert? Wo bekommt 'RP' ein' [0] 'Element? – pat

Antwort

4

Indizierung von [x, y] ist absolut nicht die gleichen wie die Indizierung durch [x][y]. Die erste führt zu einer einzelnen Dimension, die mit einem Tupel indiziert wird, während die zweite zu einer zerklüfteten 2-D-Anordnung führt.

Sie müssen ein neues Objekt mit dem Index [x] erstellen, der die gewünschten Werte enthält.

1

Der Ausdruck P ist nicht dasselbe wie p. In Ihrem Code ist der erste ein Bereich, der zweite eine Ganzzahl aus diesem Bereich.

So ist der Ausdruck RP[P,T] auf zwei Arten falsch: Es verwendet die falschen Indizes und kombiniert sie auf die falsche Weise (wie eine andere Antwort darauf hinweist).

Ich denke, Sie möchten RP[p][t] stattdessen.