Descripció
PuLP és una llibreria de Python utilitzada per a modelar i resoldre problemes d’optimització mitjançant programació lineal, la qual cosa inclou suport per a problemes de maximització i minimització amb restriccions. Està disponible amb una llicència de codi obert (open source), la qual cosa en fomenta i facilita l’ús dins d’altres projectes que necessitin capacitats d’optimització lineal.
PuLP permet indicar el tipus de problema que cal optimitzar mitjançant paraules reservades de la pròpia llibreria, maximització (LpMaximize) o minimització (LpMinimize), que hauran d’usar-se quan comencem a definir-lo. A més, inclou suport base per a tots i cadascun dels elements bàsics d’un problema d’optimització:
- Variables (LpVariable)
- Funció objectiu
- Restriccions o constraints
Enllaç al recurs
https://github.com/coin-or/pulp
Exemple d’ús
L’exemple següent (trivial) mostra com, després de modelar un problema d’optimització de programació lineal de minimització, procedim a resoldre’l mitjançant l’ús de la llibreria PuLP. El codi Python utilitzat és el següent (s’han numerat les línies per millorar-ne la lectura):
1 # carregar la llibreria PuLP 2 from pulp import * 3 4 # Problema de programació 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 # Objectiu 14 prob += x + 4*y, "obj" 15 16 # Restriccions 17 prob += x+y <= 5, "c1" 18 19 prob.solve() 20 21 # Impressió dels valors de les variables òptimes 22 for v in prob.variables(): 23 print(v.name, "=", v.varValue) 24 25 # Valor objectiu 26 print("objective=", value(prob.objective))
En primer lloc, a la línia 2, carreguem la llibreria PuLP. Seguidament inicialitzem el problema de programació lineal (línia 5), indicant que es tracta d’un problema de minimització (LpMinimize). Després es defineixen les variables x (línia 9) i y (línia 11), i així mateix establim com a funció objectiu x + 4*y a la línia 14. Addicionalment, afegim la restricció típica d’aquest tipus de problemes (normalment n’hi ha més d’una), en aquest cas x + y no ha de ser superior a 5, a la línia 17.
Una vegada plantejat el problema, procedim a iniciar la cerca de les possibles solucions (línia 19). Després s’imprimeixen els resultats de les variables (línies 22 i 23) i el valor objectiu (línia 26). L’exemple proposat prendrà com a valors per a resoldre el problema plantejat: x = 0,0, y = –1,0, objectiu = –4,0, com era d’esperar.
Enllaç relacionat
Documentació: https://pythonhosted.org/pulp/