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
Industriingeniør som gerne beskæftiger sig med optimering, simulation og matematisk modellering i R, SQL, VBA og Python
Leave a Reply