始める無料で始める

資本予算問題を解く

資本予算問題を思い出してください。

あなたのマネージャーは会社の戦略を設計しており、プロジェクト \(A\), \(B\), \(C\) を検討しています。\(B\) には \(A\) が前提条件です。利益はそれぞれ $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 をインポートし、model を定義しています。パラメータは VI、プロジェクト名用の names(順に A, B, C, AB のインデックス)、そして同じインデックス規則で二値決定を表す o です。

この演習はコースの一部です

Pythonで学ぶOptimization入門

コースを見る

演習の手順

  • B の前提条件を考慮しつつ、プロジェクト B と C の項を埋めて、線形化した目的関数を定義してください。
  • 更新後の 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)}')
コードを編集して実行