Kapasiteli tesis yeri - vaka çalışması P4

Python ile Tedarik Zinciri Analitiği

Aaren Stubberfield

Supply Chain Analytics Mgr., Ingredion

Simülasyon vs. duyarlılık analizi

Duyarlılık Analizi ile:

  • Talep ve maliyet değişimleri üretimi nasıl etkiliyor, gözlemle:
    • Üretim nereye eklenmeli?
    • Üretim farklı bir bölgeye kayıyor mu.
    • Hangi bölgelerde üretim miktarı sabit?
  • Duyarlılık analiziyle birden çok değişimi aynı anda ya da tek tek incele
Python ile Tedarik Zinciri Analitiği

Simülasyon modellemesi

Simülasyon testini Kapasiteli Tesis Yeri Modelimize uygulayabiliriz

 

Gürültü eklemek için olası girdiler

  • Talep
  • Değişken maliyetler
  • Sabit maliyetler
  • Kapasite
Python ile Tedarik Zinciri Analitiği
# 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])
# Solve
model.solve()
print(LpStatus[model.status])
Python ile Tedarik Zinciri Analitiği

Amaç:

model += (lpSum([fix_cost.loc[i,s]*y[(i,s)] for s in size for i in loc])
          + lpSum([(var_cost.loc[i,j] + normalvariate(0.5, 0.5))*x[(i,j)] 
                   for i in loc for j in loc]))

 

Toplam Talep:

for j in loc:
    rd = normalvariate(0, demand.loc[j,'Dmd']*.05)
    model += lpSum([x[(i,j)] for i in loc]) == (demand.loc[j,'Dmd']+rd)
Python ile Tedarik Zinciri Analitiği

Kod örneği - adım 3

def run_pulp_model(fix_cost, var_cost, demand,
                   cap):
    # 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 the Constraints
    for j in loc: rd = normalvariate(
                       0, demand.loc[j,'Dmd']*.05)
        model += lpSum(
         [x[(i,j)] for i in loc]) == (
                           demand.loc[j,'Dmd']+rd)
    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])
Python ile Tedarik Zinciri Analitiği
    # Solve
    model.solve()
    o = {}
    for i in loc:
        o[i] = value(lpSum([x[(i, j)] for j in loc]))
    o['Obj'] = value(model.objective)
    return(o)
for i in range(100):
    output.append(run_pulp_model(fix_cost, var_cost, demand, cap))
df = pd.DataFrame(output)
Python ile Tedarik Zinciri Analitiği

Sonuçlar

import matplotlib.pyplot as plt
plt.title('Bölge E Üretim Histogramı')
plt.hist(df['E'])
plt.show()

E bölgesi ve amaç için histogram sonuçları

Python ile Tedarik Zinciri Analitiği

Özet

Kapasiteli Tesis Modeli

  • Simülasyon vs. duyarlılık analizi
  • Kod örneğini adım adım inceledik
Python ile Tedarik Zinciri Analitiği

Dene bakalım!

Python ile Tedarik Zinciri Analitiği

Preparing Video For Download...