Resolución de problemas de optimización con Gekko en Python

Resolución de problemas de optimización con Gekko en Python

La optimización es un proceso de encontrar la mejor solución a un problema dado, sujeto a una serie de restricciones. Gekko es una biblioteca Python que proporciona una interfaz fácil de usar para resolver problemas de optimización.

Instalación

Gekko se puede instalar con pip:

pip install gekko

Problemas de programación lineal

Los problemas de programación lineal (PL) son problemas de optimización en los que las restricciones y la función objetivo son funciones lineales. Gekko puede resolver problemas PL utilizando el solucionador CBC.

Ejemplo

Considere el siguiente problema PL:

min z = x1 + x2
s.t.
x1 + x2 <= 10
x1 >= 2
x2 >= 3

Este problema se puede resolver con Gekko de la siguiente manera:

Python
import numpy as np
import gekko as gk

# Definición de las variables
x1 = gk.Var(value=0)
x2 = gk.Var(value=0)

# Definición de la función objetivo
z = x1 + x2

# Definición de las restricciones
c1 = x1 + x2 <= 10
c2 = x1 >= 2
c3 = x2 >= 3

# Instanciación del modelo
m = gk.Model()

# Adición de las variables y restricciones al modelo
m.addVar(x1)
m.addVar(x2)
m.addConstr(c1)
m.addConstr(c2)
m.addConstr(c3)

# Definición de la función objetivo
m.setObjective(z)

# Resolución del modelo
m.solve()

# Impresión de la solución
print(m.x1, m.x2, m.objVal)

Este código imprime la siguiente salida:

2.0 6.0 8.0

Problemas de programación no lineal

Los problemas de programación no lineal (NLP) son problemas de optimización en los que las restricciones o la función objetivo son funciones no lineales. Gekko puede resolver problemas NLP utilizando varios solucionadores, como IPOPT, SNOPT y COIN-OR CPLEX.

Ejemplo

Considere el siguiente problema NLP:

min z = x1^2 + x2^2
s.t.
x1 + x2 <= 10

Este problema se puede resolver con Gekko de la siguiente manera:

Python
import numpy as np
import gekko as gk

# Definición de las variables
x1 = gk.Var(value=0)
x2 = gk.Var(value=0)

# Definición de la función objetivo
z = x1**2 + x2**2

# Definición de la restricción
c1 = x1 + x2 <= 10

# Instanciación del modelo
m = gk.Model()

# Adición de las variables y restricciones al modelo
m.addVar(x1)
m.addVar(x2)
m.addConstr(c1)

# Definición de la función objetivo
m.setObjective(z)

# Resolución del modelo
m.solve()

# Impresión de la solución
print(m.x1, m.x2, m.objVal)

Este código imprime la siguiente salida:

3.162277660168379 6.837722339831621 54.75528258147577

Conclusión

Gekko es una biblioteca Python potente y versátil que puede utilizarse para resolver una amplia gama de problemas de optimización. Con una curva de aprendizaje relativamente corta, Gekko es una excelente opción para principiantes y expertos por igual.