[SCIP] Get auxiliary variables from reformulated expression graph

Stefan Vigerske svigerske at gams.com
Mon Jun 14 10:09:46 CEST 2021


Hi,

SCIP does this reformulation during presolve. cons_nonlinear adds new 
variables and changes constraints of the transformed problem. It doesn't 
really keep record of variables and constraints that are added during 
the reformulation, so there is no function to get these auxiliary 
variables or to get the constraints that were added. Their name 
typically starts with nlreform, though.

For the signomial function, auxiliary variables are only introduced for 
the terms that aren't linear or quadratic. As said, there is no function 
that takes the parameters of the signomial and returns you some variable 
or constraint. But you could look through the constraints of the 
transformed problem which name starts with nlreform and that are of the 
form 0 <= signomial-term - nlreformxy <= 0. "signomial-term" is here an 
expression graph node of type polynomial (should probably better be 
named signomial) that has only one monomial or of type product. However, 
if the signomial term is neither convex nor concave, then it is 
reformulated further: Factors x_j^{p_{ij}} are replaced by new variables 
and products of more than two factors are split up.

We have some code in development that replaces all this and would also 
make it easier to identify the signomial terms and corresponding 
auxiliary variables 
(https://www.scipopt.org/workshop2020/slides/minlp.pdf, starting with 
slide 9 or page 23). If you plan to do some work that builds on the 
handling of nonlinear constraints in SCIP and if you prefer to use this 
newer still-in-development version, then we can give you access to it.

Stefan

On 6/13/21 3:30 PM, liding xu wrote:
> Dear SCIP community,
>      I am aware that scip uses an expression graph to represent general
> nonlinear functions and constructs its  linear under-estimators via
> factorizable programming. Given a general nonlinear function (e.g.
> signomial functions), scip adds auxiliary variables and constraints
> associated with some intermediate nodes of the expression graph.
>    I have the following common questions:
>    1. In which phase (e.g. transformation, resolve), does scip reformulate
> the expression graph to a set of auxiliary variables and constraints?
>    2.How can get these auxiliary variables after reformulation, i.e.
> (SCIP_VAR *) and constraints (SCIP_CONS*)?
>    3. For example, given a signomial function f(x)  = \sum_i s_i(x), where
> \sum_i s_i(x) =  c_i \prod_j x_j^{p_{ij}}.  how can I get the variable
> associated to the signomial term s_i(x) = c_i \prod_j x_j^{p_{ij}}?
> 
>   Best wishes,
> Liding Xu
> 
> 
> _______________________________________________
> Scip mailing list
> Scip at zib.de
> https://listserv.zib.de/mailman/listinfo/scip
> 



More information about the Scip mailing list