การวิเคราะห์ความไวใน PuLP

การหาค่าที่เหมาะสมที่สุดใน Python เบื้องต้น

Jasmin Ludolf

Content Developer

การวิเคราะห์ความไวในการโปรแกรมเชิงเส้น

  • การวิเคราะห์ความไว เปลี่ยนพารามิเตอร์ทีละค่าเพื่อดูการเปลี่ยนแปลงของผลลัพธ์
  • การโปรแกรมเชิงเส้น: วัดว่าค่าวัตถุประสงค์เปลี่ยนแปลงอย่างไร
  • 3 แนวทาง:
    1. เปลี่ยนสัมประสิทธิ์ในฟังก์ชันวัตถุประสงค์
    2. เปลี่ยนสัมประสิทธิ์ในข้อจำกัด
    3. เปลี่ยนค่าคงที่ในข้อจำกัด
  • แก้โมเดลทั้งก่อนและหลังการเปลี่ยนแปลง
  • ใช้ PuLP!

ไอคอนเกจวัดพร้อมส่วนสีเขียวทางซ้ายเพื่อแทนการวิเคราะห์ความไว

การหาค่าที่เหมาะสมที่สุดใน Python เบื้องต้น

นิยามที่เกี่ยวข้อง

  • ข้อจำกัด:
    • เป็นสมการเท่ากัน: active, binding
    • เป็นอสมการไม่ถึงขอบเขต: non active, non-binding, slack (adj.)
  • Slack (noun):
    • ค่าที่ต้องเพิ่มทางซ้ายของข้อจำกัดเพื่อให้ข้อจำกัดนั้น binding
  • Shadow price:
    • การเพิ่มขึ้นส่วนเพิ่มของค่าวัตถุประสงค์เมื่อเทียบกับค่าทางขวาของข้อจำกัด
การหาค่าที่เหมาะสมที่สุดใน Python เบื้องต้น

ปัญหาอาหารใน PuLP

อาหาร ต้นทุน ($/ปอนด์) โปรตีน (%) ไขมัน (%)
corn 0.11 10 2.5
soybean 0.28 40 1

 

  • คำแนะนำ: โปรตีนอย่างน้อย 17%, ไขมัน 2%, อาหาร 7 ปอนด์
  • วัตถุประสงค์: $0.11C + 0.28S$
  • โปรตีน: $10C+40S \geq 17(C+S)$
  • ไขมัน: $2.5C + S \geq 2(C+S)$
  • น้ำหนัก: $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()
การหาค่าที่เหมาะสมที่สุดใน Python เบื้องต้น

Slack และ Shadow Price ใน 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

Fat: slack = -1.05, shadow price = 0.00
Weight: slack = -0.00, shadow price = 0.15
การหาค่าที่เหมาะสมที่สุดใน Python เบื้องต้น

มาฝึกกันเถอะ!

การหาค่าที่เหมาะสมที่สุดใน Python เบื้องต้น

Preparing Video For Download...