You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Pulp线性规划:如何添加Paul1与Paul2互斥约束

解决方案:添加Paul1/Paul2互斥约束的线性规划实现

现有模型回顾

目标函数

MINIMIZE
6.84 * x_0 + 6.62 * x_1 + 6.37 * x_10 + 6.76 * x_11 + 6.34 * x_2 + 6.2 * x_3 + 6.33 * x_4 + 6.62 * x_5 + 6.37 * x_6 + 6.76 * x_7 + 6.76 * x_8 + 6.62 * x_9

现有约束

C1: x_0 + x_1 + x_2 + x_3 = 1  # 第一类服装部件选1个
C2: x_4 + x_5 + x_6 + x_7 = 1  # 第二类服装部件选1个
C3: x_10 + x_11 + x_8 + x_9 = 1  # 第三类服装部件选1个

互斥约束添加步骤

1. 明确变量归属

先整理出所有属于Paul1的变量集合(记为S_p1)和属于Paul2的变量集合(记为S_p2),需根据你的成本表实际对应调整,比如:

  • S_p1 = [x_0, x_4, x_8](Paul1负责的各部件变量)
  • S_p2 = [x_1, x_5, x_9](Paul2负责的各部件变量)

2. 引入0-1决策变量

添加一个二进制变量y:

  • y = 1:选择Paul1完成整套服装
  • y = 0:选择Paul2完成整套服装

在Pulp中定义该变量:

y = LpVariable("choose_paul1", cat='Binary')

3. 添加互斥约束

添加两个约束,强制所有选中的部件只能来自其中一位设计师:

# 若选Paul2(y=0),Paul1的变量总和必须为0;若选Paul1(y=1),最多选3个(刚好整套)
prob += lpSum(x for x in S_p1) <= 3 * y

# 若选Paul1(y=1),Paul2的变量总和必须为0;若选Paul2(y=0),最多选3个(刚好整套)
prob += lpSum(x for x in S_p2) <= 3 * (1 - y)

约束逻辑说明

结合原有C1/C2/C3的=1约束,整套服装必须选3个部件,因此上述两个约束会自动保证:

  • 当y=1时,只能从Paul1的变量中选3个(每个部件组各1个)
  • 当y=0时,只能从Paul2的变量中选3个(每个部件组各1个)
    完全满足"只能二选一,完成整套服装"的要求。

内容的提问来源于stack exchange,提问作者Explore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 09:27:30