pyomo:块连接器不工作
pyomo: Connector for blocks not working
我正在尝试使用以下简单的示例代码将两个块与 pyomo 中实现的 "Connector" class 连接起来。
from pyomo.environ import *
m = ConcreteModel()
# Block 01
m.block_01 = Block()
m.block_01.flow = Var(within=NonNegativeReals, bounds=(2, 10))
m.block_01.OUT = Connector(initialize= {'flow': m.block_01.flow})
# Block 02
m.block_02 = Block()
m.block_02.flow = Var(within=NonNegativeReals)
m.block_02.IN = Connector(initialize= {'flow': m.block_02.flow})
m.con = Constraint(expr=m.block_01.OUT == m.block_02.IN)
def _obj(_m):
return _m.block_01.flow + _m.block_02.flow
m.obj = Objective(rule=_obj)
在 "optimization" 之后,所有变量都取其下限值(m.block_01.flow = 2 和 m.block_02.flow = 0)。所以连接器似乎没有为变量传输任何数据。
如果我使用:
m.con = Constraint(expr=m.block_01.flow == m.block_02.flow)
相反,它有效。然而,这不是连接器的想法,对吧?
关于问题的原因有什么想法吗?
在将模型发送到求解器之前,您是否应用了 expand_connectors
转换?
TransformationFactory('core.expand_connectors').apply_to(m)
我正在尝试使用以下简单的示例代码将两个块与 pyomo 中实现的 "Connector" class 连接起来。
from pyomo.environ import *
m = ConcreteModel()
# Block 01
m.block_01 = Block()
m.block_01.flow = Var(within=NonNegativeReals, bounds=(2, 10))
m.block_01.OUT = Connector(initialize= {'flow': m.block_01.flow})
# Block 02
m.block_02 = Block()
m.block_02.flow = Var(within=NonNegativeReals)
m.block_02.IN = Connector(initialize= {'flow': m.block_02.flow})
m.con = Constraint(expr=m.block_01.OUT == m.block_02.IN)
def _obj(_m):
return _m.block_01.flow + _m.block_02.flow
m.obj = Objective(rule=_obj)
在 "optimization" 之后,所有变量都取其下限值(m.block_01.flow = 2 和 m.block_02.flow = 0)。所以连接器似乎没有为变量传输任何数据。
如果我使用:
m.con = Constraint(expr=m.block_01.flow == m.block_02.flow)
相反,它有效。然而,这不是连接器的想法,对吧?
关于问题的原因有什么想法吗?
在将模型发送到求解器之前,您是否应用了 expand_connectors
转换?
TransformationFactory('core.expand_connectors').apply_to(m)