Lean lineært program med ortools i Python

I et tidligere indlæg om Googles ortools – modul i Python løste jeg det lineære optimeringsproblem, der er angivet nedenfor:

Koden skrevet i mit tidligere indlæg kan reduceres til færre linjer kode, hvilket resulterer i lean kode. I dette indlæg vil jeg dele en slankere version af mit tidligere ortools-script.

Igen starter jeg med at importere pywraplp fra ortools .linear_solver:

from ortools.linear_solver import pywraplp

Dernæst opretter jeg en solver-instans (ved hjælp af GLOP solver) og gemmer dens reference til en referencebehandler:

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

Jeg er nu nødt til at erklære relevante optimeringsvariabler. I dette eksempel er optimeringsvariablerne x, y og z:

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

Nu kan jeg modellere problemet ved at specificere de objektive funktioner og alle relevante begrænsninger. I de følgende kodelinjer realiseres dette på en meget slank måde:

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 af <Swig Objekt af typen 'operations_research::MPConstraint *' ved 0x000001B9AEC956C0> >

Modellen er nu færdig og kan løses:

solver.Solve()

Den optimale løsning for x vises nedenfor:

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

Den optimale løsning for y vises nedenfor:

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

Den optimale løsning for z vises nedenfor:

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

Den optimale målfunktionsværdi udlæses nedenfor:

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

You May Also Like

Leave a Reply

Leave a Reply

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *

This site uses Akismet to reduce spam. Learn how your comment data is processed.