pyomo Port Extensive 中的意外行为
Unexpected behavior in pyomo Port Extensive
我在 pyomo.network 的端口 class 中观察到一些意外行为。尽管逻辑解决方案应为 1,但以下示例不可行。问题是目标端口变量的范围(X_IN,块 3)也覆盖了源变量的范围(X_OUT,块 2)。在我看来,这对平等来说是正确的,但对广泛规则来说却不是。我是不是哪里弄错了还是有问题?
import pyomo.environ as pyomo
import pyomo.network as network
import pyomo.opt as opt
m = pyomo.ConcreteModel()
# Block 1
m.block_1 = pyomo.Block()
m.block_1.X_OUT = pyomo.Var(domain=pyomo.NonNegativeReals)
m.block_1.OUT = network.Port()
m.block_1.OUT.add(m.block_1.X_OUT, 'X', network.Port.Extensive)
# Block 2
m.block_2 = pyomo.Block()
m.block_2.X_OUT = pyomo.Var(domain=pyomo.Reals, bounds=(2, 2))
m.block_2.OUT = network.Port()
m.block_2.OUT.add(m.block_2.X_OUT, 'X', network.Port.Extensive)
# Block 3
m.block_3 = pyomo.Block()
m.block_3.X_IN = pyomo.Var(domain=pyomo.NonNegativeReals, bounds=(3, 3))
m.block_3.IN = network.Port()
m.block_3.IN.add(m.block_3.X_IN, 'X', network.Port.Extensive)
# Objective
m.obj = pyomo.Objective(expr=pyomo.summation(m.block_1.X_OUT),
sense=pyomo.maximize)
# Arcs
m.arc_block_1_block_3 = network.Arc(src=m.block_1.OUT, dest=m.block_3.IN)
m.arc_block_2_block_3 = network.Arc(src=m.block_2.OUT, dest=m.block_3.IN)
# Expand the arcs and solve
pyomo.TransformationFactory("network.expand_arcs").apply_to(m)
opt.SolverFactory('cbc').solve(m, tee=True)
我在 pyomo.network 的端口 class 中观察到一些意外行为。尽管逻辑解决方案应为 1,但以下示例不可行。问题是目标端口变量的范围(X_IN,块 3)也覆盖了源变量的范围(X_OUT,块 2)。在我看来,这对平等来说是正确的,但对广泛规则来说却不是。我是不是哪里弄错了还是有问题?
import pyomo.environ as pyomo
import pyomo.network as network
import pyomo.opt as opt
m = pyomo.ConcreteModel()
# Block 1
m.block_1 = pyomo.Block()
m.block_1.X_OUT = pyomo.Var(domain=pyomo.NonNegativeReals)
m.block_1.OUT = network.Port()
m.block_1.OUT.add(m.block_1.X_OUT, 'X', network.Port.Extensive)
# Block 2
m.block_2 = pyomo.Block()
m.block_2.X_OUT = pyomo.Var(domain=pyomo.Reals, bounds=(2, 2))
m.block_2.OUT = network.Port()
m.block_2.OUT.add(m.block_2.X_OUT, 'X', network.Port.Extensive)
# Block 3
m.block_3 = pyomo.Block()
m.block_3.X_IN = pyomo.Var(domain=pyomo.NonNegativeReals, bounds=(3, 3))
m.block_3.IN = network.Port()
m.block_3.IN.add(m.block_3.X_IN, 'X', network.Port.Extensive)
# Objective
m.obj = pyomo.Objective(expr=pyomo.summation(m.block_1.X_OUT),
sense=pyomo.maximize)
# Arcs
m.arc_block_1_block_3 = network.Arc(src=m.block_1.OUT, dest=m.block_3.IN)
m.arc_block_2_block_3 = network.Arc(src=m.block_2.OUT, dest=m.block_3.IN)
# Expand the arcs and solve
pyomo.TransformationFactory("network.expand_arcs").apply_to(m)
opt.SolverFactory('cbc').solve(m, tee=True)