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/