Seite 1 von 1

Gurobi Modell wiederholt lösen

Verfasst: Freitag 4. Januar 2019, 16:37
von schuesra
Hallo,
ich würde gerne ein Gurobi Modell k-mal lösen. Problem dabei ist , dass eine
Fehlermeldung bei den Zielfunktionen kommt.

Das Modell sieht folgendermaßen aus:

Code: Alles auswählen

from gurobipy import Model
import numpy as np
import gurobipy as GRB
from gurobipy import quicksum
models = {}
objective = {}
y= {}
omega = {}
c19 = {}
c20 = {}
obj = {}
K = np.arange(1)
L = np.arange(1) 
n = np.arange(144)
tau = np.arange(360)
f = np.array([100] * 16 + [400] *16 + [150] * 56 + [600] *56)
teta = np.array([400] * 16 + [1600] * 16 + [600] * 56 + [2400] *56)


for k in K:
                 models[k] = Model("RLP")
                 y[k] = models[k].addVars(tau, n, name="y")
                 omega[k] = models[k].addVars(L, tau, n, name="omega")
                 models[k].update()
                 obj[k] = models[k].setObjective(quicksum(f[j]*y[k][t, j] for t, j in y) , GRB.MAXIMIZE)
Dabei kommt folgende Fehlermeldung heraus:
'numpy.int32' object is not iterable
Kann mir jemand helfen das Problem zu lösen?

Liebe Grüße

Re: Gurobi Modell wiederholt lösen

Verfasst: Freitag 4. Januar 2019, 16:39
von __deets__
Und in welcher Zeile? Bitte poste den *gesamten* Stacktrace, dann kann man das sehen.

Re: Gurobi Modell wiederholt lösen

Verfasst: Freitag 4. Januar 2019, 16:56
von schuesra
Der Fehler kommt in der letzten Zeile, also da wo ich versuche die Zielfunktionen zu erstellen.


File "<ipython-input-44-fea71d194b0b>", line 25, in <genexpr>
obj[k] = models[k].setObjective(quicksum(f[j]*y[k][t, j] for t, j in y) , GRB.MAXIMIZE)

TypeError: 'numpy.int32' object is not iterable

Re: Gurobi Modell wiederholt lösen

Verfasst: Freitag 4. Januar 2019, 17:13
von __blackjack__
@schuesra: Du versuchst da die Schlüssel des Wörterbuchs `y` jeweils auf *zwei* Namen zu verteilen. Dazu müssten die Schlüssel aus iterierbaren Objekten mit jeweils zwei Elementen bestehen. Das tun sie offenbar nicht.

Re: Gurobi Modell wiederholt lösen

Verfasst: Freitag 4. Januar 2019, 17:36
von schuesra
Wie meinst du das mit jeweils auf zwei Namen verteilen? Verstehe nicht wirklich deine Hilfestellung. Könntest du es vielleicht anders erklären?
So wie ich dich verstehe reicht das eine k nicht aus. Du meinst weil ich einmal models[k] schreibe und einmal y[k]?

Re: Gurobi Modell wiederholt lösen

Verfasst: Freitag 4. Januar 2019, 17:46
von __blackjack__
@schuesra: Du schreibst ``… for t, j in y`` und dafür müsste `y` ja irgendie jweils *zwei* Werte liefern um die auf `t` und `j` zu verteilen. An der Stelle wird vielleicht klar warum man nicht so sauschlechte Namen ohne irgendeine Bedeutung verwenden sollte, denn wenn da stehen würde was die Werte jeweils bedeuten sollen, fallen solche Fehler schon beim schreiben, oder mindestens beim Lesen des Quelltextes auf. `y` ist ein Wörterbuch, das müsste also so etwas wie Tupel als Schlüssel haben, damit dieser Teil des Ausdrucks nicht zu der Ausnahme führt.

Code: Alles auswählen

In [17]: y = {42: 'answer'}

In [18]: for a, b in y:
    ...:     print(a, b)
    ...: 
    ...:     
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-18-41dca7560709> in <module>()
----> 1 for a, b in y:
      2     print(a, b)
      3 

TypeError: 'int' object is not iterable

In [19]: y = {(42, 23): 'answer'}

In [20]: for a, b in y:
    ...:     print(a, b)
    ...:     
42 23

Re: Gurobi Modell wiederholt lösen

Verfasst: Freitag 4. Januar 2019, 18:11
von schuesra
Soweit verstanden, allerdings bekomme ich auch eine Fehlermeldung wenn ich das ändere:

Code: Alles auswählen

 obj[k] = models[k].setObjective(quicksum(f[j]*y[k][t, j] for t in tau for j in n) , GRB.MAXIMIZE)
Dabei kommt folgende Fehlermeldung: TypeError: 'builtin_function_or_method' object is not subscriptable
Es ist sehr schwierig für mich als Nichtinformatiker mit den Fehlermeldungen umzugehen. Ich sitze schon seit mehreren Tagen an dieser einen Zeile und werde so langsam wahnsinnig :/

Re: Gurobi Modell wiederholt lösen

Verfasst: Freitag 4. Januar 2019, 19:28
von sparrow
Du versucht aif eine Funktion wie auf eine Liste zuzugreifen.
print[0] zum Beispiel.

Re: Gurobi Modell wiederholt lösen

Verfasst: Freitag 4. Januar 2019, 19:28
von __blackjack__
@schuesra: Da habe ich jetzt keine Lust das Anhand des Quelltextes nachzuvollziehen. Schau halt einfach mal was genau an der Zeile das Problem ist. Also lass Dir davor mal die Werte hinter den einzelnen Namen und Teilausdrücken ausgeben, solange bis Du es auf ein minimales Beispiel eingedampft hast. Irgend etwas bei dem Ausdruck ist halt nicht das was Du denkst was es ist, also musst Du Deine Erwartung an die einzelnen Werte und Zwischenergebnisse mal überprüfen. Neben den Werten, könnte die Ausgabe des jeweiligen Typs auch helfen. Den Typ eines Wertes kann man mit der `type()`-Funktion ermitteln.