Localizarea plantei capacitate - studiu de caz P3

Analitică în lanțul de aprovizionare cu Python

Aaren Stubberfield

Supply Chain Analytics Mgr.

Modelul de localizare a plantei capacitate

Modelare

  • Producție la facilități regionale
    • Două dimensiuni de plantă (mică / mare)
  • Export al producției în alte regiuni
  • Facilități de producție deschise / închise

imagine a globului cu producție regională

Analitică în lanțul de aprovizionare cu Python

Intervale așteptate

Ce valori sunt așteptate pentru variabilele de decizie?

Cantități de producție:

  • Producție ridicată în regiunile cu costuri variabile de producție și transport reduse
  • Producție maximă în regiunile cu costuri fixe relativ scăzute

Plantă de producție deschisă sau închisă:

  • Plantă cu capacitate mare în regiunile cu cerere ridicată
  • Plantă cu capacitate mare în regiunile cu costuri fixe relativ scăzute
Analitică în lanțul de aprovizionare cu Python

Analiza de sensibilitate a constrângerilor

Producție totală = Cerere totală:

  • shadow prices = Variația costului total per creștere a cererii într-o regiune
  • slack = Ar trebui să fie zero

Producție totală ≤ Capacitate totală de producție:

  • shadow prices = Variația costurilor totale per creștere a capacității de producție
  • slack = Regiunile cu capacitate de producție excedentară
Analitică în lanțul de aprovizionare cu 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])
Analitică în lanțul de aprovizionare cu 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))
Analitică în lanțul de aprovizionare cu Python

Întrebări de afaceri

Întrebări posibile:

  • Care este costul estimat al acestui model de rețea logistică?

  • Dacă cererea crește într-o regiune, cât profit este necesar pentru a acoperi costurile de producție și transport?

  • Care regiuni mai au capacitate de producție disponibilă pentru cerere viitoare?

Analitică în lanțul de aprovizionare cu Python

Rezumat

Recapitulare:

  • Intervalele așteptate pentru variabilele de decizie
  • Interpretarea rezultatelor analizei de sensibilitate (shadow prices și slack)
  • Cod pentru rezolvare și afișarea rezultatelor
  • Întrebări tipice de afaceri
Analitică în lanțul de aprovizionare cu Python

Foarte bine! Rândul dumneavoastră

Analitică în lanțul de aprovizionare cu Python

Preparing Video For Download...