En una publicación anterior sobre el módulo de ortoolas de Google en Python, resolví el problema de optimización lineal que se indica a continuación:
El código escrito en mi publicación anterior se puede reducir a menos líneas de código, lo que resulta en un código ajustado. En esta publicación, compartiré una versión más reducida de mi ortools-script anterior.
Nuevamente, empiezo importando pywraplp desde ortools.linear_solver:
from ortools.linear_solver import pywraplp
A continuación, creo una instancia de solucionador (usando el solucionador GLOP) y almaceno su referencia a un controlador de referencia:
solver = pywraplp.Solver.CreateSolver('linear_programming_examples', 'GLOP')
Ahora tengo que declarar variables de optimización relevantes. En este ejemplo, las variables de optimización son x, y y z:
# declarar la variable x, con límite inferior 0 y sin límite superior x = solver.NumVar(0, solver.infinity(), "x") # declarar variable y, con límite inferior 0 y sin límite superior y = solver.NumVar(0, solver.infinity(), "y") # # declarar la variable z, con límite inferior 0 y sin límite superiorvariable z, with lower bound 0 and no upper bound z = solver.NumVar(0, solver.infinity(), "z")
Ahora puedo modelar el problema especificando las funciones objetivo y todas las restricciones relevantes. En las siguientes líneas de código, esto se realiza de una manera muy sencilla:
# declarar como máx. problema y definir la función objetivo solver.Maximize(x+2*y+3*z) # agregar restricciones 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 of <Swig Object of type 'operations_research::MPConstraint *' at 0x000001B9AEC956C0> >
El modelo ahora está completo y se puede resolver:
solver.Solve ()
La solución óptima para x se muestra a continuación:
print("x_opt: ", x.solution_value())
x_opt: 6.666666666666667
La solución óptima para y se muestra a continuación:
print("y_opt: ", y.solution_value())
y_opt: 0.0
La solución óptima para z se muestra a continuación:
print("z_opt: ", z.solution_value())
z_opt: 6.666666666666667
El valor óptimo de la función objetivo se calcula a continuación:
print("optimal value: " + str(x.solution_value()+2*y.solution_value()+3*z.solution_value()))
optimal value: 26.666666666666668
Ingeniero industrial especializado en optimización y simulación (R, Python, SQL, VBA)
Leave a Reply