Description
I would like to be able to solve Pyomo Blocks with variables that do not live on the Block. I will describe my use case, but there are others.
I have a structured MINLP. In fact, it looks like a binary tree of Blocks. I have a transformation to relax this MINLP. The the root block has a constraint with a bilinear term (for example), x*y
, then I will replace that bilinear term with an auxiliary variable, aux
, and add constraints for the McCormick envelopes relating aux
to x
and y
. If this same bilinear term, x*y
appears in other constraints, I want to replace it with the same auxiliary variable aux
. I do not want to create a new variable for the same term. Now, suppose I encounter the same bilinear term in a constraint on a child Block. I already have the auxiliary variable on the root Block. It is not easy to move the auxiliary variable so that it has a new parent. I also have a need to solve individual child Blocks.
Another example I am aware of arises in GDP transformations. Maybe @jsiirola can elaborate.