2017-01-24 2 views
1

Die Daten, die ich behandle, sind nicht so einfach wie die in der Dokumentation. Da meine Variablen im Wesentlichen von der Dateneingabedatei abhängen, werde ich das folgende einfache Beispiel verwenden, um zu erklären, was ich zu erreichen versuche. Ich habe folgende Einschränkungen:Einschränkungen hinzufügen CPLEX Python API

x1 + x2 + x3 = 1 
x4 + x5 + x6 + x7 =1 
x8 + x9 = 1 

Ich denke dabei an, um wiederholt die c.linear_constraints.add() Funktion aufrufen einer for-Schleife. Gibt es dafür einen besseren Weg?

Antwort

1

Im Allgemeinen erzielen Sie eine bessere Leistung, wenn Sie Stapel linearer Constraints erstellen, anstatt sie einzeln zu erstellen. Zum Beispiel (Ihr Beispiel oben verwendet wird), ist es besser, die folgendes zu tun:

import cplex 
c = cplex.Cplex() 
c.variables.add(names=["x{0}".format(i+1) for i in range(9)]) 
c.linear_constraints.add(lin_expr=[[[0, 1, 2], [1.0, 1.0, 1.0]], 
            [[3, 4, 5, 6], [1.0, 1.0, 1.0, 1.0]], 
            [[7, 8], [1.0, 1.0]]], 
         rhs=[1.0, 1.0, 1.0], 
         names=["c{0}".format(i+1) for i in range(3)]) 
c.write("example.lp") 

Dies erzeugt die folgende LP-Datei:

Minimize 
obj: 
Subject To 
c1: x1 + x2 + x3 = 1 
c2: x4 + x5 + x6 + x7 = 1 
c3: x8 + x9 = 1 
End 

So wäre es besser, in der Eingabedatei zu lesen, Speichern Sie die Constraint-Informationen in einer Datenstruktur (Listen oder was auch immer) und rufen Sie dann am Ende einmal (oder alle X-Constraints, wenn Ihre Eingabedatei sehr groß ist) c.linear_constraints.add auf.

+0

Vielen Dank! Ich habe die Indizes vorgeneriert und in eine einzige 'c.linear_constraints.add()' -Funktion eingefügt. –

Verwandte Themen