เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

แก้ปัญหา 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)}')
แก้ไขและรันโค้ด