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

如何在Gurobi中获取与对应约束绑定的影子价格(对偶值)

Gurobi打印带对应约束标识的影子价格方法

核心逻辑:Gurobi的约束对象本身携带ConstrName(约束名称)属性,同时可直接读取Pi属性获取对应对偶值,无需通过getAttr批量获取后手动匹配。

场景1:已给约束手动设置自定义名称

这是最方便的情况,定义约束时通过name参数指定可识别的业务名称,示例如下:

# 定义约束时命名示例
model.addConstr(x + 2*y <= 150, name="A类原料总量约束")
model.addConstr(3*x + y <= 200, name="B类原料总量约束")

# 求解完成后直接遍历约束打印
for con in model.getConstrs():
    print(f"约束名称:{con.ConstrName},影子价格:{con.Pi}")

如果需要将结果存储为字典后续调用,可以用推导式生成:

pi_map = {con.ConstrName: con.Pi for con in model.getConstrs()}

场景2:未提前给约束设置自定义名称

如果之前定义约束时没有手动命名,Gurobi会自动生成默认名称(格式为c0、c1……,索引顺序和你添加约束的顺序完全一致),你可以匹配自己保存的约束业务含义列表对应识别:

# 提前按约束添加顺序定义对应的业务含义列表
con_meaning = ["原料1约束", "原料2约束", "产能约束", "需求下限约束", ...]

for idx, con in enumerate(model.getConstrs()):
    print(f"约束序号:{idx},业务含义:{con_meaning[idx]},影子价格:{con.Pi}")

可选优化:过滤无意义的零值影子价格

松约束的影子价格为0,通常不需要关注,可以添加过滤条件排除浮点误差导致的极小值:

for con in model.getConstrs():
    if abs(con.Pi) > 1e-6:
        print(f"约束:{con.ConstrName},影子价格:{round(con.Pi, 4)}")

内容的提问来源于stack exchange,提问作者Sound Of Silence

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:45:02