访问 constraints/objective

Accessing constraints/objective

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

问题:

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

求解器:

状态:正常 终止条件:最优 统计数据: 分支定界: 有界子问题数:0 创建的子问题数:0 错误 rc: 0 时间:0.015599727630615234

解决方案:

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

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

我尝试调用模型并得到如下信息: <pyomo.core.base.PyomoModel.ConcreteModel at xxxxxxx>

听起来 network.model 是 Pyomo 模型,是的,如果您可以访问它,您可以修改它。尝试使用 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

修改 objective 最简单的方法是找到现有的,停用它,然后添加一个新的

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

有一些方法可以就地修改 constraints/objectives,但没有详细记录。我建议使用 Python 的 dir() 函数并试用一些组件属性和方法以了解它们的工作原理。

dir(network.model.obj)