【发布时间】:2018-07-10 08:57:07
【问题描述】:
我正在研究一种需要修改具体(混合整数非线性)pyomo 模型的 Python 算法。 特别是,我需要知道一般代数约束中存在哪些变量。 例如。对于一个约束
model.con1 = Constraint(expr=exp(model.x_1) + 2*model.x_2 <= 2)
我想做一个查询(如 model.con1.variables ),它返回(列表)变量([model.x_1,model.x_2])。
在this documentation 中,我发现对于线性 约束,参数variables 完全符合我的目的。但是,我正在使用的模型也将包含一般代数约束。
Chapter 14 of this book 提供了一些使用 pyomo 开发高级算法的详细信息,但我没有在那里找到我的问题的答案。我能想到的唯一非常笨拙的方法是使用表达式的 to_string() 方法(在我们的示例中返回 exp( x_1 ) + x_2 <= 1.0),然后搜索此字符串以查找所有变量的出现。我确信有更好的方法使用 pyomo 来访问约束中出现的变量。
请注意,here 已经提出了一个类似但不太详细且未回答的问题。
【问题讨论】:
-
您为线性约束提供的链接仅适用于
kernel接口。该接口是一种专门的低级编程 API,已被提议用于在编程上下文中有效地生成模型。目前(从 Pyomo 5.3 开始),它不一定适用于“正常”的 Pyomo 模型。
标签: python mathematical-optimization pyomo