開始使用免費開始

解決資本預算問題

回想資本預算問題。

你的經理規劃公司的策略,考慮專案 $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,並以參數 VInames(專案名稱依序為 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)}')
編輯並執行程式碼