Localizzazione impianti con capacità - caso di studio P3

Analytics per la supply chain con Python

Aaren Stubberfield

Supply Chain Analytics Mgr.

Modello di localizzazione impianti con capacità

Modello

  • Produzione in stabilimenti regionali
    • Due taglie di impianto (bassa / alta)
  • Esportazione della produzione in altre regioni
  • Apertura/chiusura degli impianti

immagine del globo con produzione regionale

Analytics per la supply chain con Python

Intervalli attesi

Cosa aspettarsi dai valori delle variabili decisionali?

Quantità prodotte:

  • Produzione alta nelle regioni con costi variabili e di spedizione bassi
  • Produzione al massimo dove anche i costi fissi sono relativamente bassi

Impianto aperto o chiuso:

  • Impianto ad alta capacità nelle regioni con domanda elevata
  • Impianto ad alta capacità dove i costi fissi sono relativamente bassi
Analytics per la supply chain con Python

Analisi di sensitività dei vincoli

Produzione totale = Domanda totale:

  • shadow prices = variazione del costo totale per incremento di domanda in una regione
  • slack = dovrebbe essere zero

Produzione totale ≤ Capacità produttiva totale:

  • shadow prices = variazione del costo totale per incremento di capacità produttiva
  • slack = regioni con capacità produttiva in eccesso
Analytics per la supply chain con Python
from pulp import *
import pandas as pd

# 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]))

# 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])
Analytics per la supply chain con Python
# Solve
model.solve()

# Print Decision Variables and Objective Value print(LpStatus[model.status]) o = [{'prod':"{} to {}".format(i,j), 'quant':x[(i,j)].varValue} for i in loc for j in loc] print(pd.DataFrame(o)) o = [{'loc':i, 'lc':y[(i,size[0])].varValue, 'hc':y[(i,size[1])].varValue} for i in loc] print(pd.DataFrame(o)) print("Objective = ", value(model.objective))
# Print Shadow Price and Slack o = [{'name':name, 'shadow price':c.pi, 'slack': c.slack} for name, c in model.constraints.items()] print(pd.DataFrame(o))
Analytics per la supply chain con Python

Domande di business

Domande probabili:

  • Qual è il costo atteso di questo modello di rete logistica?

  • Se la domanda cresce in una regione, quanta marginalità serve per coprire produzione e spedizione verso quella regione?

  • Quali regioni hanno ancora capacità produttiva per futuri aumenti di domanda?

Analytics per la supply chain con Python

Riepilogo

Ripasso:

  • Intervalli attesi per le variabili decisionali
  • Interpretazione dell’analisi di sensitività (shadow prices e slack)
  • Codice per risolvere e stampare i risultati
  • Probabili domande di business
Analytics per la supply chain con Python

Ottimo lavoro! Ora tocca a te

Analytics per la supply chain con Python

Preparing Video For Download...