Codificación ajustada de modelos ortools de optimización lineal simple en Python

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

You May Also Like

Leave a Reply

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.