Repository navigation
Open
1 / 71 of 7 issues completedLabels
Description
This issue tracks the development of presolve.
Presolve in MP tackles the various kinds of model entities including nonlinearities. It is to be further discussed how much "presolve" is different from "reformulation".
Technically, reformulations are special presolvers (bridges aka JuMP) acting from a single constraint. The presolvers / bridges should support pre- & postsolve of various values like solutions, basis statuses, IIS, sensitivity values, etc., see #184, #170.
Tasks
- Inlining (elimination) of defined variables. Option
cvt:dvelim.
Inilining can greatly simplify linear and quadratic models via out-multiplication of terms.- Option
cvt:dvelim=1: substitute only those used 1x. Using reference counting information from NL file: not complete for nested DVs, they can be reported "multiply used" although only used 1x (in higher-level DVs which are indeed multiply used.) - Option
cvt:dvelim=2: substitute all algebraic uses. Making default - advantage on some examples. - Better, using own reference counting and also for DVs created during reformulations Inline algebraic expressions #266.
- Option
- Scaling. Some users have huge and/or very different scale in the constants, and Xpress
scaling=8works best then. - An option to control out-mulitplication:
cvt:multoutcard. Are there cases when it's not best? - Context propagation: Redefinition context #248.
- Propagate context into arguments of
numberof. Not by default - optioncvt:pre:ctx2countGurobi 12.0.1 different (and much slower) than 12.0.0 #267.
- Propagate context into arguments of
- Unify domains Unify variable/expression domains #268.
- Convert AMPL's
||back to==>if one side compares a binary variable. Not to proceed currently as||seems better for Gurobi 13 and equally good for Knitro 15.1.0 onpooling_setup. Possibly, for Gurobi because indicators are converted to SOS.
Activity
Toward #153: presolve manager and generic value presolve loop
To #153: generic postsolve loop. CopyBridge
To #153: copy bridges from NL vars/cons into FlatConverter
To #153: CopyBridge for vars and objs
glebbelov commentedon Jan 13, 2022
fd4f127 Added constraint groups to Backend for convenience of attribute access
To #153: distinguish RangeLinCon vs. LinCon(LE/EQ/GE)
To #153: fix 5106335: really do pre- / postsolve solution
glebbelov commentedon Feb 24, 2022
Separating model and solution presolve.
Model presolve and constraint / objective redefinitions create bridges which can be used to pre- / postsolve solutions, suffixes, etc
glebbelov commentedon Jul 21, 2022
Done, continued in #170, #184
[-]Add a presolve mechanism[/-][+]Presolve[/+]Product bounds: 0*inf=0 #153
71 remaining items
Option cvt:pow2_as_qp #153
Option cvt:pow2_as_qp: also for defined variables #153
Test pow2asqp, dvelim, multoutcard, qp2pass #153
Test pow2asqp, dvelim, multoutcard, qp2pass: details #153
Reformulation for hyperbolic functions + tests #153
Reorder constraint storage defs #153
Reorder more #153
MakeComplementVar(): check best-known bounds #153
Range con slack IIS postsolve: warn only #153
Option *cvt:pre:unnest*: bit 5: inlining into indicator constraints #153
Option cvt:nlobj #153
Another ctx chk #153
Set membership under maintenance #153 #268
Set membership under maintenance: fix typo #153 #268
Alias 'bestbound' #153