Optimización con PuLP

1. Ciclo de vida

2. Tipología

3. Ámbito de aplicación

4. Lenguaje de programación

Descripción

PuLP es una librería de Python utilizada para modelar y resolver problemas de optimización mediante programación lineal, lo cual incluye soporte para problemas de maximización y minimización con restricciones. Está disponible bajo una licencia de código abierto (open source), lo que fomenta y facilita su uso dentro de otros proyectos que necesiten capacidades de optimización lineal.

PuLP permite indicar el tipo de problema que hay que optimizar mediante palabras reservadas de la propia librería, maximización (LpMaximize) o minimización (LPMinimize), que deberán usarse cuando comenzamos a definirlo. Además, incluye soporte base para todos y cada uno de los elementos básicos de un problema de optimización:

  • Variables (LpVariable)
  • Función objetivo
  • Restricciones o constraints

Enlace al recurso

https://github.com/coin-or/pulp

Ejemplo de uso

El siguiente ejemplo (trivial) muestra cómo, tras modelar un problema de optimización de programación lineal de minimización, procedemos a su resolución mediante el uso de la librería PuLP. El código Python utilizado es el siguiente (se han numerado las líneas para mejorar su lectura):

1  # cargar la librería PuLP
2  from pulp import *
3
4  # Problema de programación lineal
5  prob = LpProblem("test_de_optimizacion", LpMinimize)
6
7  # Variables
8  # 0 <= x <= 4
9  x = pulp.LpVariable("x", 0, 4)
10  # -1 <= y <= 1
11  y = pulp.LpVariable("y", -1, 1)
12
13  # Objetivo
14  prob += x + 4*y, "obj"
15
16  # Restricciones
17  prob += x+y <= 5, "c1"
18
19  prob.solve()
20
21  # Impresión de los valores de las variables óptimas
22  for v in prob.variables():
23     print(v.name, "=", v.varValue)
24
25  # Valor objetivo
26  print("objective=", value(prob.objective))

En primer lugar, en la línea 2, cargamos la librería PuLP. Seguidamente inicializamos el problema de programación lineal (línea 5), indicando que se trata de un problema de minimización (LpMinimize). Después se definen las variables x (línea 9) e y (línea 11), y así mismo establecemos como función objetivo x + 4*y en la línea 14. Adicionalmente, añadimos la restricción típica de este tipo de problemas (normalmente existe más de una), en este caso x + y no ha de ser superior a 5, en la línea 17.

Una vez planteado el problema, procedemos a iniciar la búsqueda de las posibles soluciones (línea 19). Después se imprimen los resultados de las variables (líneas 22 y 23) y el valor objetivo (línea 26). El ejemplo propuesto tomará como valores para resolver el problema planteado: x = 0,0, y = –1,0, objetivo = –4,0, como era de esperar.

Enlace relacionado

Documentación: https://pythonhosted.org/PuLP/