Skip to content

Presolve #153

Open
1 of 7 issues completed
Open

Description

@glebbelov

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.
  • Scaling. Some users have huge and/or very different scale in the constants, and Xpress scaling=8 works best then.
  • An option to control out-mulitplication: cvt:multoutcard. Are there cases when it's not best?
  • Context propagation: Redefinition context #248.
  • 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 on pooling_setup. Possibly, for Gurobi because indicators are converted to SOS.

Activity

  1. added 4 commits that reference this issue on Jan 9, 2022
  2. glebbelov commented on Jan 13, 2022

    @glebbelov
    ContributorAuthor

    fd4f127 Added constraint groups to Backend for convenience of attribute access

  3. added 2 commits that reference this issue on Jan 18, 2022
  4. glebbelov commented on Feb 24, 2022

    @glebbelov
    ContributorAuthor

    Separating model and solution presolve.

    Model presolve and constraint / objective redefinitions create bridges which can be used to pre- / postsolve solutions, suffixes, etc

  5. glebbelov commented on Jul 21, 2022

    @glebbelov
    ContributorAuthor

    Done, continued in #170, #184

  6. self-assigned this
    on Dec 29, 2024
  7. changed the title [-]Add a presolve mechanism[/-] [+]Presolve[/+] on Dec 29, 2024
  8. added a commit that references this issue on Dec 29, 2024
  9. 71 remaining items

  10. added a commit that references this issue on Aug 13, 2026
  11. added a commit that references this issue on Sep 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions