📝 问题背景
为实现多方合作的利益最大化,我们采用了 线性规划 方法,通过 PuLP 库对决策过程进行建模与自动求解,确保各方需求能够科学、平衡地达成最优协议。✨
1️⃣ 创建线性规划问题实例
首先,定义最大化问题:
from pulp import LpMaximize, LpProblem, LpVariable # 创建问题实例,设置为最大化问题 prob = LpProblem("Optimal_Agreement", LpMaximize)
2️⃣ 定义主要的决策变量
- 新购买金额 - Binary
- 发动机选择 - Binary
- 升级价值 - Binary
- 升级套件 - Binary
purchase_amount_vars = LpVariable.dicts("Purchase_Amount", range(5), cat='Binary') engine_choice_vars = LpVariable.dicts("Engine_Choice", range(3), cat='Binary') upgrade_value_vars = LpVariable.dicts("Upgrade_Value", range(4), cat='Binary') upgrade_kit_vars = LpVariable.dicts("Upgrade_Kit", range(4), cat='Binary')
3️⃣ 构建目标函数 & 偏好评分模型
目标函数 根据各方偏好打分进行:
p_stiles_purchase = [5, 4, 3, 2, 1] a_delling_purchase = [5, 4, 3, 2, 0] # 其他参与方对购买金额的打分列表同理定义 prob += sum(p_stiles_purchase[i] * purchase_amount_vars[i] for i in range(5)) + \ sum(a_delling_purchase[i] * purchase_amount_vars[i] for i in range(5)) + \ # 加上其他参与方…(略) 0
更多参与方的打分可同理扩展 👬
4️⃣ 添加约束条件与逻辑
- 每个问题 只能选择一个选项
- 逻辑关系约束(例如金额低于阈值时禁止某价值选择)
prob += sum(purchase_amount_vars[i] for i in range(5)) == 1 prob += sum(engine_choice_vars[i] for i in range(3)) == 1 prob += sum(upgrade_value_vars[i] for i in range(4)) == 1 prob += sum(upgrade_kit_vars[i] for i in range(4)) == 1 # 逻辑关系约束:如金额 < 700 时某选项不可选 prob += (sum(purchase_amount_vars[i] * [850, 800, 750, 700, 650][i] for i in range(5)) < 700) >> (upgrade_value_vars[2] == 0)
5️⃣ 求解与结果展示
prob.solve() print("Status:", LpStatus[prob.status]) for v in prob.variables(): if v.varValue == 1: print(v.name, "=", v.varValue)
💡 高亮关键词: 状态 变量 选择
🌐 小结
- PuLP 库高效建模线性规划问题
- 实现跨方需求的逻辑约束与最优解
采用线性规划,可在方案提出、利益分配等复杂问题中取得科学与公平的决策 🏆