首页 > 解决方案 > 访问约束/目标

问题描述

我正在使用一个内部调用 Pyomo 的工具箱来解决优化问题。我有兴趣访问它构建的 Pyomo 模型,以便我可以修改约束/目标。所以我的问题是,假设我得到以下输出:

问题:

名称:未知 下限:6250.0 上限:6250.0 目标数:1 约束数:11 变量数:8 非零数:17 意义:最小化

求解器:

状态:好的终止条件:最佳统计信息:分支和边界:有界子问题的数量:0 创建的子问题的数量:0 错误 rc:0 时间:0.015599727630615234

解决方案:

解决方案数:0 显示的解决方案数:0

所以这个问题很好,我得到了一个解决方案,建模也是通过另一个内部完成的。是否可以访问约束/目标,以便我可以自由修改 Pyomo 语法中的优化模型?

我试图调用模型并得到这样的结果: <pyomo.core.base.PyomoModel.ConcreteModel at xxxxxxx>

标签: pyomo

解决方案


听起来像是network.modelPyomo 模型,是的,如果你可以访问它,你可以修改它。尝试使用以下pprint()方法打印模型或单个模型组件:

network.model.pprint()
network.model.con1.pprint()

或者您可以遍历模型中特定类型的组件:

for c in network.model.component_objects(Constraint):
    print(c)  # Prints the name of every constraint on the model

修改目标的最简单方法是找到现有目标,将其停用,然后添加一个新目标

network.model.obj.deactivate()
network.model.new_obj = Objective(expr=network.model.x**2)

有一些方法可以修改现有的约束/目标,但它们没有得到很好的记录。我建议使用 Python 的dir()函数并使用一些组件属性和方法来了解它们是如何工作的。

dir(network.model.obj)

推荐阅读