Skip to content

PyROS Add caching for computed uncertain parameter bounds#3877

Open
jas-yao wants to merge 6 commits intoPyomo:mainfrom
jas-yao:pyros-cache-computed-param-bounds
Open

PyROS Add caching for computed uncertain parameter bounds#3877
jas-yao wants to merge 6 commits intoPyomo:mainfrom
jas-yao:pyros-cache-computed-param-bounds

Conversation

@jas-yao
Copy link
Contributor

@jas-yao jas-yao commented Mar 20, 2026

Fixes

_fbbt_parameter_bounds in uncertainty_sets.py

Summary/Motivation:

PyROS solves optimization bounding problems for every uncertain parameter multiple times throughout its routine using _compute_exact_parameter_bounds. There are up to 4 instances of PyROS accessing this method during its runtime.

  1. Validation in is_bounded. This occurs when no parameter bounds are provided and FBBT fails to find bounds. Only the bounds that FBBT has not found are evaluated.
  2. Validation in is_nonempty. This occurs for intersection, polyhedral, and custom uncertainty sets, where a feasibility problem is constructed.
  3. Preprocessing in get_effective_uncertain_dimensions if parameter bounds are not provided or the provided ones are not exact.
  4. Separation problem construction in add_uncertainty_set_constraints if no parameter bounds are provided.

The time taken to repeatedly solve these bounding problems may add up and be significant for larger uncertainty sets.

This PR adds a method for caching the solutions of these bounding problems so that subsequent processes do not need to solve the bounding problems again.

This PR also fixes a small bug in _fbbt_parameter_bounds where the returned bounds are not scalar (e.g., a binary variable m.Var = pyo.Var(within=pyo.Binary, bounds=(0,1)) or a binary variable in a model that FBBT has been used on).

Changes proposed in this PR:

  • Add a _solve_bounds_optimization method that uses functools.cache to cache solutions for bounding problems solved for any uncertain parameter that is used by _compute_exact_parameter_bounds
  • Add a line for clearing the _solve_bounds_optimization cache during validation, which is run at the start of every PyROS solve.
  • Add tests for check caching behavior of _solve_bounds_optimization
  • Fix the issue in _fbbt_parameter_bounds

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.

@jas-yao
Copy link
Contributor Author

jas-yao commented Mar 20, 2026

@shermanjasonaf @jsiirola

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.

1 participant