开始使用免费开始使用

求解资本预算问题

回顾资本预算问题。

您的经理在制定公司战略,考虑项目 $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 的前置条件的基础上,补全 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)}')
编辑并运行代码