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
Wirtschaftsingenieur mit Interesse an Optimierung, Simulation und mathematischer Modellierung in R, SQL, VBA und Python
Leave a Reply