2016-03-22 12 views
2

Ich habe folgendes Stück Python Code Bündel „obj“ zu definieren:Wie kann ich eine "Zeichenfolge" verwenden, um auf einen "linearen Ausdruck" als Argument innerhalb einer Python-Gurobi-Funktion zu verweisen?

obj1=LinExpr(sumOFw_plusPLUSw_minus) 
obj2=LinExpr(quicksum(epsilon[s] for s in N)) 

wobei „sumOFw_plusPLUSw_minus“ ist ein Ausdruck und „epsilon“ ist ein Typ Var.

Ich möchte es parametrisch machen, so dass ich später mehr objektive Ausdrücke hinzufügen kann. Um zu beantragen, dass ich versuchte, eine Zeichenfolge in einer Schleife zu erstellen und wie unten die obigen Ausdrücke mit dieser Zeichenfolge rief, bekam aber einen „GurobiError: Kann Argument in einen Ausdruck umwandeln“ in Zeile 5.

for j in range(1,2): 
    for i in range(1,num_obj): 
     valid_obj='obj'+str(i) 
     if j==1: 
      m.setObjective(valid_obj, GRB.MINIMIZE) 
     else: 
      m.setObjective(valid_obj, GRB.MAXIMIZE) 
     m.update()  
     m.optimize() 
+1

Könnten Sie bitte etwas mehr Code hinzufügen, um Ihr Beispiel reproduzierbar zu machen? Was genau ist "m", "Epsilon". Vielen Dank. – lrnzcig

+0

N = Bereich (1, Reihe + 1) # Anzahl der Proben – Ozgu

+0

m = Modell ("gurobi_model_name") – Ozgu

Antwort

1

Das Problem ist, dass 'obj' + str [i] nur eine Python-Zeichenfolge ist, kein Objekt. Gurobi weiß nicht, wie man den Objective-Wert auf einen String setzt, er sucht nach einem objektiven Ausdruck.

Um verschiedene Zielfunktionen basierend auf einem Parameter zu erhalten, können Sie Objective costs deklarieren und in einer Liste speichern. Zum Beispiel:

cost =[] 
cost[0] = LinExpr(sumOFw_plusPLUSw_minus) 
cost[1] = LinExpr(quicksum(epsilon[s] for s in N)) 
... 

Jetzt können Sie das Ziel gesetzt, durch die entsprechenden das Element in der Kostenliste Aufruf auf dem Wert des Index abhängig i. (Sie können sogar verschiedene Elemente hinzufügen, solange sie gültig sind und linear.)

valid_obj = cost[i] 

m.setObjective(valid_obj, GRB.MINIMIZE) wird funktionieren, solange jedes Element der Liste ist ein gültiger linearer Ausdruck Ihrer Entscheidungsvariablen in dem Modell m.