Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Overhaul PyROS Preprocessor Subroutine and Subproblem Objects #3341

Open
wants to merge 216 commits into
base: main
Choose a base branch
from

Conversation

shermanjasonaf
Copy link
Contributor

@shermanjasonaf shermanjasonaf commented Aug 12, 2024

Fixes #2964.

Summary/Motivation:

Driven by recent algorithmic developments of the PyROS preprocessor, this PR implements sweeping changes to the PyROS preprocessor subroutine and subproblem formulations/object structures.

Changes proposed in this PR:

Update PyROS as follows:

  • Overhaul the preprocessor
    • Leverage decision rules and equality constraints to identify second-stage variables and state variables that are mathematically nonadjustable
    • More structured methods for reformulating variable domains/bounds to constraints
    • More structured methods for rearranging inequality constraints
    • Rewrite and extend coefficient matching: carefully account for state variable-independent constraints that cannot be reformulated by casting to inequality constraint pairs
  • Update the subproblem formulations and modeling objects
    • Modify block structures of the working model, master-like models, and separation model: partition the constraints by stage
    • Change the objective of the decision rule polishing problem to the 1-norm of the nonstatic terms of the decision rule expressions
    • Perform more careful initialization of the auxiliary uncertain parameter variables of the separation problem
  • Update the UncertaintySet class and pre-implemented subclasses to facilitate changes to the subproblems
    • Modify return protocol of UncertaintySet.set_as_constraint to make auxiliary uncertain parameters easier to track
    • Add new efficient methods for calculation of auxiliary uncertain parameter values for the CardinalitySet and FactorModelSet classes
    • Restrict range of valid FactorModelSet instances to those for which psi_mat is full column rank
    • Bug fix(es) for the IntersectionSet
  • Logging updates
    • Make log of the model component statistics slightly more informative
    • Add DEBUG-level messages for logging of the individual preprocessor steps
  • Documentation updates
    • Update "Methodology Overview" section
    • Add section on PyROS installation instructions
  • Make tests more rigorous and extensive
    • Address Restore PyROS failed separation problem test #2964
    • Use expression comparison methods (core.expr.compare.assertExpressionsEqual) for more precise model testing
    • Separate testing modules for the:
      • preprocessor
      • subproblem formulations
      • uncertainty set classes
        • more rigorous testing for point_in_set, set_as_constraint
      • PyROS solver as a whole

TODO

Legal Acknowledgement

By contributing to this software project, I have read the contribution guide and agree to the following terms and conditions for my contribution:

  1. I agree my contributions are submitted under the BSD license.
  2. I represent I am authorized to make the contributions and grant the license. If my employer has rights to intellectual property that includes these contributions, I represent that I have received permission to make contributions and grant the required license on behalf of that employer.

@mrmundt mrmundt self-requested a review October 8, 2024 18:57
@shermanjasonaf
Copy link
Contributor Author

@jsiirola On my machine, the test test_grcs::RegressionTest::test_discrete_separation_invalid_value_error fails; this appears to be a consequence of #3386.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Restore PyROS failed separation problem test
5 participants