Pyomo / mpi-sppy

MPI-based Stochastic Programming in PYthon
https://mpi-sppy.readthedocs.io
Other
65 stars 38 forks source link

Presolve #373

Closed bknueven closed 5 months ago

bknueven commented 6 months ago

This PR adds "Distributed Subproblem Presolve".

This functionality is available for all Hub and Spoke algorithms which inherit from SPBase. It can be enabled by passing presolve=True into the constructor, and is available with the --presolve command line option.

Leveraging the existing feasibility-based bounds tightening (FBBT) available in Pyomo, this presolver will tighten the bounds on all variables, including the non-anticipative variables. If the non-anticipative variables have different bounds, the bounds among the non-anticipative variables will be synchronized to utilize the tightest available bound.

In its current state, the user might opt-in to presolve for two reasons:

  1. For problems without relatively complete recourse, utilizing the tighter bounds on the non-anticipative variables and speed convergence and improve primal and dual bounds. In rare cases it might also detect infeasibility.
  2. For problems where a “fixer” extension or spoke is used, determining tight bounds on the non-anticipative variables may improve the fixer’s performance.

The PR is structured in such a way that we can add additional presolve capability to mpi-sppy without too much effort.

bknueven commented 5 months ago

TODO:

bknueven commented 5 months ago

@michaelbynum if you have time and interest in reviewing this I would appreciate any feedback you might have.

michaelbynum commented 5 months ago

Very cool!! If I understand correctly, this is performing FBBT on each subproblem in parallel, communicating to update the non-ant bounds, and repeating? I think that is what you said above in different words?

bknueven commented 5 months ago

Very cool!! If I understand correctly, this is performing FBBT on each subproblem in parallel, communicating to update the non-ant bounds, and repeating? I think that is what you said above in different words?

Precisely.