Bases de la modélisation avec PuLP

Analyse de la chaîne d’approvisionnement en 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.
Analyse de la chaîne d’approvisionnement en Python

Exemple PuLP – planification des ressources

  • Consultant pour une pâtisserie artisanale qui vend 2 types de gâteaux
  • Mois de 30 jours
  • Ressources :
    • 1 four
    • 2 pâtissiers
    • 1 personne pour l'emballage – ne travaille que 22 jours
Analyse de la chaîne d’approvisionnement en Python

Exemple PuLP – planification des ressources

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

.

Gâteau A Gâteau B
Profit 20,00 $ 40,00 $
Analyse de la chaîne d’approvisionnement en Python

Exemple PuLP – planification 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
Analyse de la chaîne d’approvisionnement en 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
Analyse de la chaîne d’approvisionnement en 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
    • Minimize = LpMinimize (par défaut)
    • Maximize = LpMaximize
Analyse de la chaîne d’approvisionnement en Python

Exemple PuLP – planification des ressources

  1. Initialiser le modèle
from pulp import *

# Initialize Class
model = LpProblem("Maximize Bakery Profits", LpMaximize)
Analyse de la chaîne d’approvisionnement en 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ée 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
Analyse de la chaîne d’approvisionnement en Python

Exemple PuLP – planification des ressources

  1. Initialiser le modèle
  2. Définir les variables
# Define Decision Variables
A = LpVariable('A', lowBound=0, cat='Integer')
B = LpVariable('B', lowBound=0, cat='Integer')
Analyse de la chaîne d’approvisionnement en Python

Exemple PuLP – planification des ressources

  1. Initialiser le modèle
  2. Définir les variables
  3. Définir la fonction objectif
# Define Objective Function
model += 20 * A + 40 * B
Analyse de la chaîne d’approvisionnement en Python

Exemple PuLP – planification des ressources

  1. Initialiser le modèle
  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
Analyse de la chaîne d’approvisionnement en Python

Exemple PuLP – planification des ressources

  1. Initialiser le modèle
  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))
Analyse de la chaîne d’approvisionnement en Python

Exemple PuLP – planification 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))
Analyse de la chaîne d’approvisionnement en Python

Résumé

  • PuLP est un modéliseur LP / IP en Python
  • Rappel des 5 étapes du processus 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 de planification des ressources réalisé

Analyse de la chaîne d’approvisionnement en Python

Passons à la pratique !

Analyse de la chaîne d’approvisionnement en Python

Preparing Video For Download...