Analisis sensitivitas di PuLP

Pengantar Optimasi di Python

Jasmin Ludolf

Content Developer

Analisis sensitivitas dalam pemrograman linear

  • Analisis sensitivitas mengubah satu parameter untuk melihat dampaknya pada keluaran
  • Pemrograman linear: seberapa banyak objektif berubah
  • Tiga pendekatan:
    1. Ubah koefisien pada objektif
    2. Ubah koefisien pada kendala
    3. Ubah konstanta pada kendala
  • Selesaikan model awal dan yang diubah
  • Gunakan PuLP!

Ikon indikator pengukur dengan sektor hijau kiri untuk merepresentasikan sensitivitas

Pengantar Optimasi di Python

Definisi

  • Kendala:
    • Berlaku dengan kesamaan: aktif, mengikat
    • Berlaku dengan ketaksamaan ketat: tidak aktif, tidak mengikat, longgar (adj.)
  • Slack (nomina):
    • Jumlah yang ditambahkan ke sisi kiri kendala agar menjadi mengikat
  • Shadow price:
    • Kenaikan marginal objektif terhadap sisi kanan kendala
Pengantar Optimasi di Python

Masalah diet di PuLP

Makanan Biaya ($/lb) Protein (%) Lemak (%)
jagung 0.11 10 2.5
kedelai 0.28 40 1

 

  • Rekomendasi: minimal 17% protein, 2% lemak, 7 lb makanan
  • Objektif: $0.11C + 0.28S$
  • Protein: $10C+40S \geq 17(C+S)$
  • Lemak: $2.5C + S \geq 2(C+S)$
  • Berat: $C + S \geq 7$
from pulp import *

model = LpProblem('diet', LpMinimize)

C = LpVariable('C', lowBound=0)
S = LpVariable('S', lowBound=0)

model += 0.11*C + 0.28*S

model += 10*C + 40*S >= 17 * (C+S), 'Protein' 
model += 2.5*C + S >= 2 * (C+S), 'Fat'
model += C + S >= 7, 'Weight' 

model.solve()
Pengantar Optimasi di Python

Slack dan shadow price di PuLP

print(f"Status: {LpStatus[model.status]}\n")
for name, c in model.constraints.items():
    print(f"{name}: slack = {c.slack:.2f}, shadow price = {c.pi:.2f}")
Status: Optimal
Protein: slack = -0.00, shadow price = 0.01

Lemak: slack = -1.05, shadow price = 0.00
Berat: slack = -0.00, shadow price = 0.15
Pengantar Optimasi di Python

Ayo berlatih!

Pengantar Optimasi di Python

Preparing Video For Download...