Notions de base de la modélisation avec PuLP

Analytique de la chaîne d'approvisionnement avec Python

Aaren Stubberfield

Supply Chain Analytics Mgr.

Qu'est-ce que PuLP

  • PuLP est un cadre de modélisation pour les problèmes de programmation linéaire (LP) et en nombres entiers (IP) écrit en Python

  • Maintenu par la fondation COIN-OR (Computational Infrastructure for Operations Research)

  • PuLP s'interface avec des solveurs

    • CPLEX
    • COIN
    • Gurobi
    • etc.
Analytique de la chaîne d'approvisionnement avec Python

Exemple PuLP – ordonnancement des ressources

  • Mandat de consultation pour une pâtisserie artisanale qui vend 2 types de gâteaux
  • Mois de 30 jours
  • Ressources :
    • 1 four
    • 2 pâtissiers
    • 1 emballeur — travaille seulement 22 jours
Analytique de la chaîne d'approvisionnement avec Python

Exemple PuLP – ordonnancement des ressources

  • Besoins en ressources pour les 2 types de gâteaux :
Gâteau A Gâteau B
Four 0,5 jour 1 jour
Pâtissiers 1 jour 2,5 jours
Emballeurs 1 jour 2 jours

.

Gâteau A Gâteau B
Profit 20,00 $ 40,00 $
Analytique de la chaîne d'approvisionnement avec Python

Exemple PuLP – ordonnancement des ressources

  • Objectif : maximiser le profit
    • Profit = 20*A + 40*B
  • Sous contraintes :
    • A ≥ 0
    • B ≥ 0
    • 0.5A + 1B ≤ 30
    • 1A + 2.5B ≤ 60
    • 1A + 2B ≤ 22
Analytique de la chaîne d'approvisionnement avec Python

Processus courant de modélisation avec PuLP

  1. Initialiser le modèle
  2. Définir les variables de décision
  3. Définir la fonction objectif
  4. Définir les contraintes
  5. Résoudre le modèle
Analytique de la chaîne d'approvisionnement avec Python

Initialiser le modèle - LpProblem()

LpProblem(name='NoName', sense=LpMinimize)
  • name = Nom du problème utilisé dans le fichier de sortie .lp, p. ex. « My LP Problem »
  • sense = Maximiser ou minimiser la fonction objectif
    • Minimiser = LpMinimize (par défaut)
    • Maximiser = LpMaximize
Analytique de la chaîne d'approvisionnement avec Python

Exemple PuLP – ordonnancement des ressources

  1. Initialiser le modèle
from pulp import *

# Initialize Class
model = LpProblem("Maximize Bakery Profits", LpMaximize)
Analytique de la chaîne d'approvisionnement avec Python

Définir les variables de décision - LpVariable()

LpVariable(name, lowBound=None, upBound=None, cat='Continuous', e=None)
  • name = Nom de la variable utilisé dans le fichier de sortie .lp
  • lowBound = Borne inférieure
  • upBound = Borne supérieure
  • cat = Type de variable
    • Integer
    • Binary
    • Continuous (par défaut)
  • e = Utilisé pour la modélisation par colonnes
Analytique de la chaîne d'approvisionnement avec Python

Exemple PuLP – ordonnancement des ressources

  1. Initialiser la classe
  2. Définir les variables
# Define Decision Variables
A = LpVariable('A', lowBound=0, cat='Integer')
B = LpVariable('B', lowBound=0, cat='Integer')
Analytique de la chaîne d'approvisionnement avec Python

Exemple PuLP – ordonnancement des ressources

  1. Initialiser la classe
  2. Définir les variables
  3. Définir la fonction objectif
# Define Objective Function
model += 20 * A + 40 * B
Analytique de la chaîne d'approvisionnement avec Python

Exemple PuLP – ordonnancement des ressources

  1. Initialiser la classe
  2. Définir les variables
  3. Définir la fonction objectif
  4. Définir les contraintes
# Define Constraints
model += 0.5 * A + 1 * B <= 30
model += 1 * A + 2.5 * B <= 60
model += 1 * A + 2 * B <= 22
Analytique de la chaîne d'approvisionnement avec Python

Exemple PuLP – ordonnancement des ressources

  1. Initialiser la classe
  2. Définir les variables
  3. Définir la fonction objectif
  4. Définir les contraintes
  5. Résoudre le modèle
# Solve Model
model.solve()
print("Produce {} Cake A".format(A.varValue))
print("Produce {} Cake B".format(B.varValue))
Analytique de la chaîne d'approvisionnement avec Python

Exemple PuLP – ordonnancement des ressources

from pulp import *

# Initialize Class
model = LpProblem("Maximize Bakery Profits",
                   LpMaximize)

# Define Decision Variables
A = LpVariable('A', lowBound=0,
                cat='Integer')
B = LpVariable('B', lowBound=0, 
                cat='Integer')

# Define Objective Function
model += 20 * A + 40 * B
# Define Constraints
model += 0.5 * A + 1 * B <= 30
model += 1 * A + 2.5 * B <= 60
model += 1 * A + 2 * B <= 22

# Solve Model
model.solve()
print("Produce {} Cake A".format(A.varValue))
print("Produce {} Cake B".format(B.varValue))
Analytique de la chaîne d'approvisionnement avec Python

Résumé

  • PuLP est un modéliseur LP / IP en Python
  • Nous avons revu les 5 étapes de la modélisation avec PuLP

    1. Initialiser le modèle
    2. Définir les variables de décision
    3. Définir la fonction objectif
    4. Définir les contraintes
    5. Résoudre le modèle
  • Exemple d'ordonnancement des ressources complété

Analytique de la chaîne d'approvisionnement avec Python

Passons à la pratique !

Analytique de la chaîne d'approvisionnement avec Python

Preparing Video For Download...