แก้ปัญหา Capital Budgeting
ทบทวนปัญหา Capital Budgeting กัน
ผู้จัดการของคุณกำลังวางกลยุทธ์ของบริษัทโดยพิจารณาโปรเจกต์ \(A\), \(B\), \(C\) โดยที่ \(A\) เป็นเงื่อนไขเบื้องต้นของ \(B\) กำไรของแต่ละโปรเจกต์คือ \(V = [250, 200, 300]\) เงินลงทุนที่ต้องใช้คือ I = [2000, 1900, 2500] และมีงบประมาณเพียง $4600 เท่านั้น โดย \(o\) คือตัวแปรไบนารีที่บ่งบอกว่าจะเลือกโปรเจกต์นั้นหรือไม่
ผู้จัดการมอบโจทย์ให้คุณดังนี้:
\(\max\ \ o_AV_A + o_{AB}V_B + o_CV_C\) \(s.t.\ o_AI_A + o_{AB}I_B + o_CI_C\leq 4600\)
หน้าที่ของคุณคือทำ linearization แล้วแก้ปัญหาการหากำไรสูงสุดนี้
เราได้ import pulp และกำหนด model พร้อมพารามิเตอร์ V, I, names สำหรับชื่อโปรเจกต์ (A, B, C และ AB ตามลำดับ index) และ o แทนการตัดสินใจแบบไบนารีโดยใช้ index เดียวกัน
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การหาค่าที่เหมาะสมที่สุดใน Python เบื้องต้น
คำแนะนำการฝึกหัด
- กำหนดฟังก์ชันวัตถุประสงค์ที่ผ่านการ linearize แล้ว โดยเติมฟังก์ชันสำหรับโปรเจกต์ B และ C โดยคำนึงถึงเงื่อนไขเบื้องต้นของ B
- กำหนดข้อจำกัดโดยใช้ตัวแปร AB ที่อัปเดตแล้ว
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Define the objective
model += o[0]*V[0] + ____*V[1] + ____*V[2]
# Define the constraints
model += o[0]*I[0] + ____*I[1] + o[2]*I[2] <= 4600, 'budget constraint'
model += o[____] <= o[0]
model += o[____] <= o[1]
model += o[____] >= o[0] + o[1] - 1
status = model.solve()
print(f"{'Optimal found' if status == 1 else 'Ignore solution'}")
for i, name in enumerate(names):
print(f"{name}: {'accepted' if o[i].varValue == 1 else 'rejected'}")
print(f'Total profit = ${value(model.objective)}')