Optimización matemática con Pyomo en Python: Resolución de problemas de programación lineal
En este tutorial, aprenderemos a resolver problemas de programación lineal utilizando la biblioteca Pyomo de Python. Pyomo es una biblioteca de optimización matemática de alto nivel que proporciona una interfaz sencilla para modelar y resolver problemas de optimización.
Introducción
La programación lineal es un tipo de optimización matemática que se utiliza para encontrar la solución óptima a un problema en el que las variables están restringidas a tomar valores lineales. La programación lineal se utiliza en una amplia gama de aplicaciones, como la planificación de la producción, la asignación de recursos y la toma de decisiones financieras.
Problemas de programación lineal
Un problema de programación lineal se puede representar mediante la siguiente ecuación:
min/max z = c * x
s.t.
A * x <= b
x >= 0
En esta ecuación,
- z es la función objetivo, que se debe minimizar o maximizar.
- c es un vector de coeficientes que representa el costo o beneficio de cada variable.
- x es un vector de variables que se deben determinar.
- A es una matriz de coeficientes que representa las restricciones.
- b es un vector de límites que representan las restricciones.
Modelamiento de problemas de programación lineal con Pyomo
Para modelar un problema de programación lineal con Pyomo, debemos crear un modelo Pyomo y agregarle las variables, restricciones y la función objetivo.
from pyomo.environ import *
# Crear el modelo
model = ConcreteModel()
# Agregar variables
x1 = model.add_var('x1', within=NonNegativeReals)
x2 = model.add_var('x2', within=NonNegativeReals)
# Agregar restricciones
model.c1 = x1 + x2 <= 10
model.c2 = 2 * x1 + x2 <= 20
# Agregar la función objetivo
model.obj = Objective(expr=x1 + x2, sense=minimize)
En este ejemplo, tenemos dos variables, x1 y x2, que deben ser no negativas. Las restricciones son que x1 + x2 <= 10 y 2 * x1 + x2 <= 20. La función objetivo es minimizar x1 + x2.
Resolución de problemas de programación lineal con Pyomo
Para resolver un problema de programación lineal con Pyomo, podemos utilizar el método solve() del modelo.
# Resolver el modelo
solver = SolverFactory('glpk')
solver.solve(model)
# Imprimir la solución
print(model.obj())
print(x1.value)
print(x2.value)
Este código resolverá el modelo y devolverá la solución óptima. En este caso, la solución óptima es x1 = 5 y x2 = 5.
Ejemplo de aplicación
Considere el siguiente problema de programación lineal:
min z = 3x + 2y
s.t.
x + y <= 10
2x + y <= 20
x, y >= 0
Este problema se puede modelar con Pyomo de la siguiente manera:
from pyomo.environ import *
# Crear el modelo
model = ConcreteModel()
# Agregar variables
x = model.add_var('x', within=NonNegativeReals)
y = model.add_var('y', within=NonNegativeReals)
# Agregar restricciones
model.c1 = x + y <= 10
model.c2 = 2 * x + y <= 20
# Agregar la función objetivo
model.obj = Objective(expr=3 * x + 2 * y, sense=minimize)
# Resolver el modelo
solver = SolverFactory('glpk')
solver.solve(model)
# Imprimir la solución
print(model.obj())
print(x.value)
print(y.value)
Este código resolverá el problema y devolverá la solución óptima. En este caso, la solución óptima es x = 5 y y = 5.
Conclusión
En este tutorial, aprendimos a resolver problemas de programación lineal utilizando la biblioteca Pyomo de Python. Pyomo es una herramienta poderosa que puede utilizarse para resolver una amplia gama de problemas de optimización.
Referencias
- [Pyomo documentation](https://pyomo.readthedocs.io