Localisation d'usines capacitaires - étude de cas P2

Analyse de la chaîne d’approvisionnement en Python

Aaren Stubberfield

SuSupply Chain Analytics Mgr.

Modèle de localisation d'usines capacitaires

Modélisation

  • Production dans des sites régionaux
    • Deux tailles d'usine (faible / élevée)
  • Export de la production vers d'autres régions
  • Ouverture / fermeture d'unités de production

image d'un globe avec production par région

Analyse de la chaîne d’approvisionnement en Python

Variables de décision

Ce que l'on contrôle :

  • x$_{\text{ij}}$ = quantité produite au site _i_ et expédiée vers _j_
  • y$_{\text{is}}$ = 1 si l'usine au site _i_ de capacité _s_ est ouverte, 0 si fermée
    • s = usine de capacité faible ou élevée
Analyse de la chaîne d’approvisionnement en Python

Contraintes

  • Production totale = Demande totale
    • $\sum_{i=1}^{n}$ x$_{ij}$ = D$_{\text{j}}$ pour $j = 1, ..., m$
    • $n$ = nombre d'unités de production
    • $m$ = nombre de marchés ou points de demande régionaux
Analyse de la chaîne d’approvisionnement en Python

Contraintes

  • Production totale ≤ Capacité de production totale
    • $\sum_{j=1}^{m}$ x$_{ij}$ ≤ $\sum_{s=1}$ K$_{is}$y$_{is}$
    • K$_{is}$ = capacité potentielle de production de l'usine _i_ de taille _s_
Analyse de la chaîne d’approvisionnement en Python
from pulp import *

# Initialize Class
model = LpProblem("Capacitated Plant Location Model", LpMinimize)

# Define Decision Variables
loc = ['A', 'B', 'C', 'D', 'E']
size = ['Low_Cap','High_Cap']
x = LpVariable.dicts("production_", [(i,j) for i in loc for j in loc], 
                      lowBound=0, upBound=None, cat='Continuous')
y = LpVariable.dicts("plant_", [(i,s) for s in size for i in loc], cat='Binary')

# Define Objective Function
model += (lpSum([fix_cost.loc[i,s]*y[(i,s)] for s in size for i in loc])
          + lpSum([var_cost.loc[i,j]*x[(i,j)] for i in loc for j in loc]))
Analyse de la chaîne d’approvisionnement en Python

Suite de l'exemple de code

# Define the Constraints
for j in loc:
   model += lpSum([x[(i, j)] for i in loc]) == demand.loc[j,'Dmd']

for i in loc: model += lpSum([x[(i, j)] for j in loc]) <= lpSum([cap.loc[i,s]*y[(i,s)] for s in size])
Analyse de la chaîne d’approvisionnement en Python

Récapitulatif

Modèle de localisation d'usines capacitaires :

  • Contraintes
    • Production totale = Demande totale
    • Production totale ≤ Capacité de production totale
Analyse de la chaîne d’approvisionnement en Python

Temps de révision

Analyse de la chaîne d’approvisionnement en Python

Preparing Video For Download...