<div dir="ltr"><div>Hi Stefan,</div><div>   Thank you for answering my questions and posting the document. It is good news that scip will provide</div><div>   1. more control over the expression graph.</div><div>   2. more automatic reformulation.</div><div>   I want to do some experiments on the expression graph for the research purpose, can you please send me the still-in-development version? <br></div><div><br></div><div>Best regards,</div><div>Liding<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Stefan Vigerske <<a href="mailto:svigerske@gams.com">svigerske@gams.com</a>> 于2021年6月14日周一 上午10:09写道:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi,<br>
<br>
SCIP does this reformulation during presolve. cons_nonlinear adds new <br>
variables and changes constraints of the transformed problem. It doesn't <br>
really keep record of variables and constraints that are added during <br>
the reformulation, so there is no function to get these auxiliary <br>
variables or to get the constraints that were added. Their name <br>
typically starts with nlreform, though.<br>
<br>
For the signomial function, auxiliary variables are only introduced for <br>
the terms that aren't linear or quadratic. As said, there is no function <br>
that takes the parameters of the signomial and returns you some variable <br>
or constraint. But you could look through the constraints of the <br>
transformed problem which name starts with nlreform and that are of the <br>
form 0 <= signomial-term - nlreformxy <= 0. "signomial-term" is here an <br>
expression graph node of type polynomial (should probably better be <br>
named signomial) that has only one monomial or of type product. However, <br>
if the signomial term is neither convex nor concave, then it is <br>
reformulated further: Factors x_j^{p_{ij}} are replaced by new variables <br>
and products of more than two factors are split up.<br>
<br>
We have some code in development that replaces all this and would also <br>
make it easier to identify the signomial terms and corresponding <br>
auxiliary variables <br>
(<a href="https://www.scipopt.org/workshop2020/slides/minlp.pdf" rel="noreferrer" target="_blank">https://www.scipopt.org/workshop2020/slides/minlp.pdf</a>, starting with <br>
slide 9 or page 23). If you plan to do some work that builds on the <br>
handling of nonlinear constraints in SCIP and if you prefer to use this <br>
newer still-in-development version, then we can give you access to it.<br>
<br>
Stefan<br>
<br>
On 6/13/21 3:30 PM, liding xu wrote:<br>
> Dear SCIP community,<br>
>      I am aware that scip uses an expression graph to represent general<br>
> nonlinear functions and constructs its  linear under-estimators via<br>
> factorizable programming. Given a general nonlinear function (e.g.<br>
> signomial functions), scip adds auxiliary variables and constraints<br>
> associated with some intermediate nodes of the expression graph.<br>
>    I have the following common questions:<br>
>    1. In which phase (e.g. transformation, resolve), does scip reformulate<br>
> the expression graph to a set of auxiliary variables and constraints?<br>
>    2.How can get these auxiliary variables after reformulation, i.e.<br>
> (SCIP_VAR *) and constraints (SCIP_CONS*)?<br>
>    3. For example, given a signomial function f(x)  = \sum_i s_i(x), where<br>
> \sum_i s_i(x) =  c_i \prod_j x_j^{p_{ij}}.  how can I get the variable<br>
> associated to the signomial term s_i(x) = c_i \prod_j x_j^{p_{ij}}?<br>
> <br>
>   Best wishes,<br>
> Liding Xu<br>
> <br>
> <br>
> _______________________________________________<br>
> Scip mailing list<br>
> <a href="mailto:Scip@zib.de" target="_blank">Scip@zib.de</a><br>
> <a href="https://listserv.zib.de/mailman/listinfo/scip" rel="noreferrer" target="_blank">https://listserv.zib.de/mailman/listinfo/scip</a><br>
> <br>
<br>
</blockquote></div>