Optimización matemática con Pyomo en Python: Resolución de problemas de programación lineal.

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.

Python
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.

Python
# 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:

Python
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