Solusi pengujian simulasi

Analitik Rantai Pasok dengan Python

Aaren Stubberfield

Supply Chain Analytics Mgr.

Peringatan

  • Masalah yang butuh waktu lama untuk diselesaikan sebaiknya tidak digunakan dengan LP atau IP

gambar peringatan, pria terpeleset

Analitik Rantai Pasok dengan Python

Konsep keseluruhan

Konsep umum:

  • Tambahkan noise acak ke input kunci yang dipilih
  • Selesaikan model berulang kali
  • Amati distribusinya
Analitik Rantai Pasok dengan Python

Mengapa kita coba

Alasan:

  • Input sering berupa estimasi. Ada risiko ketidakakuratan.
  • Analisis Sensitivitas sebelumnya hanya mengubah satu input sekaligus.
Analitik Rantai Pasok dengan Python

Konteks

Konteks - Perusahaan Kaca - Perencanaan Sumber Daya:

Resource Prod. A Prod. B Prod. C
Profit $US $500 $450 $600

Kendala:

  • Ada kendala permintaan, kapasitas produksi, dan kapasitas gudang

Risiko:

  • Estimasi profit bisa tidak akurat
Analitik Rantai Pasok dengan Python
# Initialize Class, & Define Variables
model = LpProblem("Max Glass Co. Profits", LpMaximize)
A = LpVariable('A', lowBound=0)
B = LpVariable('B', lowBound=0)
C = LpVariable('C', lowBound=0)

# Define Objective Function
model += 500 * A + 450 * B + 600 * C

# Define Constraints & Solve
model += 6 * A + 5 * B + 8 * C <= 60
model += 10.5 * A + 20 * B + 10 * C <= 150
model += A  <= 8
model.solve()
Analitik Rantai Pasok dengan Python

Contoh kode - langkah 2

a, b, c = normalvariate(0,25), 
          normalvariate(0,25),
          normalvariate(0,25)
# Define Objective Function
model += (500+a)*A + (450+b)*B + (600+c)*C
# Initialize Class, & Define Variables
model = LpProblem("Max Glass Co. Profits", 
                   LpMaximize)

A = LpVariable('A', lowBound=0)
B = LpVariable('B', lowBound=0)
C = LpVariable('C', lowBound=0)
a, b, c = normalvariate(0,25), 
          normalvariate(0,25), 
          normalvariate(0,25)
# Define Objective Function
model += (500+a)*A + (450+b)*B + (600+c)*C

# Define Constraints & Solve
model += 6 * A + 5 * B + 8 * C <= 60
model += 10.5 * A + 20 * B + 10 * C <= 150
model += A  <= 8
model.solve()
Analitik Rantai Pasok dengan Python
def run_pulp_model():
    # Initialize Class
    model = LpProblem("Max Glass Co. Profits", LpMaximize)
    A = LpVariable('A', lowBound=0)
    B = LpVariable('B', lowBound=0)
    C = LpVariable('C', lowBound=0)
    a, b, c = normalvariate(0,25), normalvariate(0,25), normalvariate(0,25)

    # Define Objective Function
    model += (500+a)*A + (450+b)*B + (600+c)*C

    # Define Constraints & Solve
    model += 6 * A + 5 * B + 8 * C <= 60
    model += 10.5 * A + 20 * B + 10 * C <= 150
    model += A  <= 8
    model.solve()
    o = {'A':A.varValue, 'B':B.varValue, 'C':C.varValue, 'Obj':value(model.objective)}
    return(o)
Analitik Rantai Pasok dengan Python

Contoh kode - langkah 4

def run_pulp_model():
    # Initialize Class
    model = LpProblem("Max Glass Co. Profits",
                       LpMaximize)
    A = LpVariable('A', lowBound=0)
    B = LpVariable('B', lowBound=0)
    C = LpVariable('C', lowBound=0)
    a, b, c = normalvariate(0,25), 
              normalvariate(0,25),
              normalvariate(0,25)

    # Define Objective Function
    model += (500+a)*A + (450+b)*B + 
             (600+c)*C
    # Define Constraints & Solve
    model += 6 * A + 5 * B + 8 * C <= 60
    model += 10.5 * A + 20 * B + 10 * C <= 150
    model += A  <= 8
    model.solve()
    o = {'A':A.varValue, 'B':B.varValue, 
         'C':C.varValue, 
         'Obj':value(model.objective)}
    return(o)
for i in range(100):
    output.append(run_pulp_model())
df = pd.DataFrame(output)
Analitik Rantai Pasok dengan Python

Contoh kode - langkah 5

print(df['A'].value_counts())
print(df['B'].value_counts())
print(df['C'].value_counts())

Output: (hasil bisa berbeda)

6.666667    73
0.000000    14
8.000000    13
Name: A, dtype: int64
4.000000    73
5.454546    14
2.400000    13
Name: B, dtype: int64
0.000000    86
4.090909    14
Name: C, dtype: int64
Analitik Rantai Pasok dengan Python

Visualisasi sebagai histogram

Produk A: histogram produk a, b, c, dan objektif

Produk B: histogram produk b

Produk C: histogram produk c

Nilai objektif: histogram nilai objektif

Analitik Rantai Pasok dengan Python

Ringkasan

  • Jangan digunakan untuk masalah yang butuh waktu lama diselesaikan
  • Manfaat

    • Lihat bagaimana hasil optimal berubah saat input model berubah
  • Langkah

    1. Mulai dengan kode model PuLP standar
    2. Tambahkan noise ke input kunci dengan normalvariate Python
    3. Bungkus kode model PuLP dalam fungsi yang mengembalikan output model
    4. Buat loop untuk memanggil fungsi baru dan simpan hasil ke DataFrame
    5. Visualisasikan DataFrame hasil
Analitik Rantai Pasok dengan Python

Ayo berlatih!

Analitik Rantai Pasok dengan Python

Preparing Video For Download...