python - 在 Pyomo 中使用 core.base 变量向 ConcreteModel 添加二次圆锥约束
问题描述
我目前正在使用Pyomo 6.1.2.
我得到一个AbstractModel
填充了一些Variables
从pyomo.core.base.var
类创建的实例,因为我正在使用pyomo.environ
命名空间
我想在 Pyomo 中创建一个新的圆锥约束,但约束类pyomo.core.kernel.conic.quadratic
似乎只允许内核核心类 ( pyomo.core.kernel.variable
) 作为此类约束的参数。
当我尝试使用以下代码时
import pyomo.environ as pyo
import pyomo.kernel as pmo
m = pyo.ConcreteModel(doc='Model from environ namespace')
m.set = pyo.Set(initialize=[1])
m.var = pyo.Var(m.set, domain=pyo.NonNegativeReals)
m.r = pyo.Var(domain=pyo.NonNegativeReals)
m.const = pmo.conic.quadratic(m.r, [m.var[1]])
我收到以下错误:
AssertionError
Traceback (most recent call last)
<ipython-input-17-4a7a701d28ea> in <module>
5 m.var = pyo.Var(m.set, domain=pyo.NonNegativeReals)
6 m.r = pyo.Var(domain=pyo.NonNegativeReals)
----> 7 m.const = pmo.conic.quadratic(m.r, [m.var[1]])
C:\ProgramData\Anaconda3\lib\site-packages\pyomo\core\kernel\conic.py in __init__(self, r, x)
161 self._r = r
162 self._x = tuple(x)
--> 163 assert isinstance(self._r, IVariable)
164 assert all(isinstance(xi, IVariable)
165 for xi in self._x)
AssertionError:
如果我尝试使用 apyomo.core.kernel.variable
而不是pyomo.environ.Var
上述m.var
和m.r
变量,则不会引发错误。
import pyomo.environ as pyo
import pyomo.kernel as pmo
m = pyo.ConcreteModel(doc='Model from environ namespace')
m.var = pmo.variable(lb=0)
m.r = pmo.variable(lb=0)
m.const = pmo.conic.quadratic(m.r, [m.var])
为了将这个圆锥约束添加到我的问题中,我应该将所有变量转换为 Kernel.Core Vars 还是我可以做一些其他事情来将pyomo.environ.Var
类作为参数传递给pyomo.core.kernel.conic.quadratic
,因为我希望在这个版本中尽可能少地更改我以前的代码。
编辑:我最近在这篇文章中看到了这个答案,答案表明,我认为,混合pyomo.kernel
和pyomo.environ
建模层是不可能的。
解决方案
推荐阅读
- amazon-web-services - 如何在 ubuntu 服务器上使用 maxmind geoiplite2 mmdb 文件
- c# - 保护 Azure 函数使用的私钥
- excel - 使用 VBA 从 Internet Explorer 检索 URL
- c# - Net Core 2.0 AmazonServiceException:找不到凭证
- java - 将图像与一系列模板匹配
- javascript - NodeJS函数返回未定义
- ios - 处理 Swift 中由 3rd 方库编写的目标 c 引起的异常
- flutter - 我如何使用 ReorderableListView,特别是我在“onReorder”中放了什么
- javascript - 通过 WebPack 在多个文件中使用 Vuex 存储
- docker - 来自 hub.docker.com 的 Docker 映像统计信息