Schlanke Programme mit ortools in Python

In einem früheren Beitrag zum ortools – Modul von Google in Python habe ich das unten angegebene lineare Optimierungsproblem gelöst:

Der in meinem vorherigen Beitrag geschriebene Code kann auf weniger Codezeilen reduziert werden, was zu schlankem Code führt. In diesem Beitrag werde ich eine schlankere Version meines vorherigen ortools-Skripts teilen.

Auch hier beginne ich mit dem Import von pywraplp aus ortools .linear_solver:

from ortools.linear_solver import pywraplp

Als Nächstes erstelle ich eine Solver-Instanz (mit GLOP- Solver) und speichere ihre Referenz in einem Referenz-Handler:

solver = pywraplp.Solver.CreateSolver('linear_programming_examples', 'GLOP')

Ich muss jetzt relevante Optimierungsvariablen deklarieren. In diesem Beispiel sind die Optimierungsvariablen x, y und z:

x = solver.NumVar(0, solver.infinity(), "x")
y = solver.NumVar(0, solver.infinity(), "y")
z = solver.NumVar(0, solver.infinity(), "z")

Jetzt kann ich das Problem modellieren, indem ich die Zielfunktionen und alle relevanten Nebenbedingungen spezifiziere. In den folgenden Codezeilen ist dies sehr schlank realisiert:

solver.Maximize(x+2*y+3*z)

solver.Add(2*x+y+z <= 20)
solver.Add(x+y+z <= 15)
solver.Add(x-y-z >= 0)
<ortools.linear_solver.pywraplp.Constraint; Proxy von <Swig Object of type 'operations_research::MPConstraint *' at 0x000001B9AEC956C0> >

Das Modell ist nun vollständig und kann gelöst werden:

solver.Solve()

Die optimale Lösung für x wird unten ausgegeben:

print("x_opt: ", x.solution_value())
x_opt: 6.666666666666667

Die optimale Lösung für y wird unten ausgegeben:

print("y_opt: ", y.solution_value())
y_opt: 0,0

Die optimale Lösung für z wird unten ausgegeben:

print("z_opt: ", z.solution_value())
z_opt: 6.666666666666667

Der optimale Zielfunktionswert wird unten ausgegeben:

print("optimal value: " + str(x.solution_value()+2*y.solution_value()+3*z.solution_value()))
optimaler Wert: 26,666666666666668

You May Also Like

Leave a Reply

Leave a Reply

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.