Optimització amb PuLP

1. Cicle de vida

2. Tipologia

3. Àmbit d'aplicació

4. Llenguatge de programació

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/