解決資本預算問題
回想資本預算問題。
你的經理規劃公司的策略,考慮專案 $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\)
你的任務是將此利潤最大化問題線性化並求解。
我們已經匯入 pulp,並以參數 V、I、names(專案名稱依序為 A、B、C、AB)與 o(以相同索引表示二元決策)定義了一個 model。
本練習屬於課程
Python 最佳化入門
練習說明
- 定義線性化後的目標函式,補上專案 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)}')