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

如何在Gurobi Python中为MILP问题编写嵌套求和带乘法的约束

Gurobi嵌套求和乘法约束实现方案

根据你要构建的约束形式(嵌套求和+乘法:对每个i,Σj(Σk(xijk × yjk)) ≤ zi),直接用Gurobi的quicksum工具即可高效实现,以下是具体代码示例:

步骤1:定义集合与变量

先明确你的索引集合(比如I、J、K,可根据实际业务用列表/集合定义),再创建对应的Gurobi变量:

from gurobipy import Model, GRB, quicksum

# 示例集合,替换为你的实际索引
I = [1, 2, 3]
J = ["A", "B", "C"]
K = [0, 1]

model = Model("OptimizationModel")

# 三维决策变量x_ijk
x = model.addVars(I, J, K, vtype=GRB.CONTINUOUS, name="x")
# 二维变量/参数y_jk:如果是参数直接用字典存储,比如y = {(j,k): 1.5 for j in J for k in K}
y = model.addVars(J, K, vtype=GRB.CONTINUOUS, name="y")
# 一维变量z_i
z = model.addVars(I, vtype=GRB.CONTINUOUS, name="z")

步骤2:添加嵌套求和约束

利用双层quicksum实现嵌套求和,避免低效的Python循环:

for i in I:
    # 内层对k求和x_ijk*y_jk,外层对j求和,最终约束结果≤z_i
    left_hand_side = quicksum(quicksum(x[i,j,k] * y[j,k] for k in K) for j in J)
    model.addConstr(left_hand_side <= z[i], name=f"Constraint_{i}")

注意事项

  • 必须用quicksum而非Python内置sum,Gurobi会对quicksum生成的表达式做优化,大幅提升大规模模型的构建速度
  • 如果y是固定输入参数,无需创建Gurobi变量,直接用Python字典代入计算即可
  • 约束命名带上索引i,方便后续通过model.getConstrByName()调试特定约束

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:45:36