For solvers accepting expression trees (SCIP 9, Xpress, Lindo), extend MP FlatConverter to support them. Advantage: better numerical properties (see SCIP 8 release paper.) Scope: - [x] Allow mixing flat constraints with expressions. For example, SCIP supports `resvar = AND(v1, ..., vn)`, along with expressions. - [x] Keep the existing automatic redefinition mechanism. - [x] Allow per-expression type setting, whether it should be passed to the solver, or redefined - similar to flat constraints. - [ ] This should obvously coexist with the `mp::NLHandler` and `mp::Expr` interfaces passing expression trees directly from the NL file. - [ ] Developer documentation when to use which. - [x] Inline expressions wherever reasonable, e.g., linear expressions into each other. See #153, #266. - [x] For MP2NL, this affects, CplexASL/XpressASL, Conopt3/4, Couenne. - [ ] Vice versa, explicify multiply-used expressions - [X] Option `cvt:expr:refcountmax` (`cvt:expr:nlassign`) - [ ] However for MP2NL it should used defined variables, unless the result variable has stronger bounds?
For solvers accepting expression trees (SCIP 9, Xpress, Lindo), extend MP FlatConverter to support them.
Advantage: better numerical properties (see SCIP 8 release paper.)
Scope:
resvar = AND(v1, ..., vn), along with expressions.mp::NLHandlerandmp::Exprinterfaces passing expression trees directly from the NL file.cvt:expr:refcountmax(cvt:expr:nlassign)