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

如何在GurobiPy实现的0-1背包模型中添加产品配对约束?

0-1背包模型添加配对产品约束的实现方法

核心逻辑

你需要实现的约束是:若产品i被选入新仓库(Xᵢ=1),则其配对产品j必须也被选入(Xⱼ=1)。对应整数规划的数学约束为:
Xᵢ ≤ Xⱼ
因为Xᵢ和Xⱼ都是0-1变量,当Xᵢ=1时,Xⱼ必须≥1(即Xⱼ=1);当Xᵢ=0时,Xⱼ可以取0或1,完全符合需求。

代码实现步骤

假设你已经定义了Gurobi模型model,以及0-1变量字典X(键为产品编号,值为对应Gurobi Var对象),根据不同的配对数据结构,实现方式如下:

情况1:配对列表为二元组列表(如pairings = [(i1,j1), (i2,j2), ...])

直接遍历每个配对,添加约束:

# 遍历所有配对,添加i选中则j必须选中的约束
for i, j in pairings:
    model.addConstr(X[i] <= X[j], name=f"pair_constraint_{i}_{j}")

情况2:配对列表为字典(如pair_dict = {i: [j1,j2,...], ...},一个产品对应多个配对产品)

遍历字典的每个键值对,为每个配对产品单独添加约束:

# 遍历每个主产品,为其所有配对产品添加约束
for i, required_js in pair_dict.items():
    for j in required_js:
        model.addConstr(X[i] <= X[j], name=f"pair_constraint_{i}_{j}")

注意事项

  • 如果需求是双向必选(i和j必须同时选或同时不选),则需要添加双向约束,等价于Xᵢ == Xⱼ,可直接用model.addConstr(X[i] == X[j], ...)简化。
  • 约束名称name参数可选,但建议添加,方便后续调试时查看约束详情。

内容的提问来源于stack exchange,提问作者RB Vries de

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:50:36