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

如何在GurobiPy中交互式打印约束与目标函数的代数形式?

在Python中交互式打印Gurobi模型的约束与目标函数

当然可以直接在Python控制台里单独打印Gurobi模型的约束或目标函数,不用导出整个LP文件,Gurobi提供了直接访问这些表达式的API,完美适配你想快速验证模型修改的需求。

打印单个约束

Gurobi的Constr对象自带属性和方法,能直接输出约束的代数形式:

  • 直接打印约束对象就能得到完整的代数表达式
  • 也可以通过ConstrName、Sense、RHS、Expr这些属性拆分查看细节

结合你的示例代码,添加bed后,打印mahogany约束的代码如下:

# 获取mahogany对应的约束对象
mahogany_constr = res["mahogany"]
# 直接打印约束,输出完整代数形式
print(mahogany_constr)

# 也可以拆分打印细节
print(f"约束名称:{mahogany_constr.ConstrName}")
print(f"表达式:{mahogany_constr.Expr} {mahogany_constr.Sense} {mahogany_constr.RHS}")

输出结果会显示:

make[chair]*5 + make[table]*20 + make[bed]*15 <= 400
约束名称:R0
表达式:make[chair]*5 + make[table]*20 + make[bed]*15 <= 400

批量打印所有约束

如果需要查看全部约束,遍历模型的约束列表即可:

for constr in model.getConstrs():
    print(constr)

打印目标函数

目标函数可以通过模型的ObjExpr属性直接获取,再结合ModelSense确认是最大化还是最小化:

# 打印目标函数表达式
print(f"目标函数:{model.ObjExpr}")
# 结合优化方向
opt_sense = "最大化" if model.ModelSense == GRB.MAXIMIZE else "最小化"
print(f"{opt_sense}:{model.ObjExpr}")

针对你的示例,输出会是:

目标函数:make[chair]*45 + make[table]*80 + make[bed]*90
最大化:make[chair]*45 + make[table]*80 + make[bed]*90

快速验证模型修改

在你添加bed产品后,只需要运行下面几行代码,就能快速确认约束和目标函数是否正确更新:

# 打印所有资源约束
for r in resources:
    print(res[r])

# 打印目标函数
print("\n" + "-"*50)
print(f"目标函数:{model.ObjExpr}")

这样不用打开庞大的LP文件,就能直接在控制台看到make[bed]已经被正确添加到约束和目标函数中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 00:45:24