Skip to content

feat: add DistributionallyRobustSampler (ICML 2022)#362

Open
Rishabh-git10 wants to merge 4 commits intooptuna:mainfrom
Rishabh-git10:distributionally_robust_bo
Open

feat: add DistributionallyRobustSampler (ICML 2022)#362
Rishabh-git10 wants to merge 4 commits intooptuna:mainfrom
Rishabh-git10:distributionally_robust_bo

Conversation

@Rishabh-git10
Copy link
Contributor

@Rishabh-git10 Rishabh-git10 commented Mar 19, 2026

Contributor Agreements

Please read the contributor agreements and if you agree, please click the checkbox below.

  • I agree to the contributor agreements.

Motivation

Resolves #75
Adds support for Bayesian Optimization with Distributionally Robust Chance Constraints (DRCC). Standard BO assumes known distributions for environmental variables. This sampler targets optimization in environments with uncertain/noisy variables where strict safety thresholds must be maintained, implementing the algorithm from "Bayesian Optimization for Distributionally Robust Chance-constrained Problem" (Imamura et al., ICML 2022).

Description of the changes

  • Added DistributionallyRobustSampler under samplers/distributionally_robust_bo.
  • Kept the package lightweight (no BoTorch dependency). The 1D RBF Gaussian Process uses numpy, and chance constraints are evaluated via scipy.optimize.linprog (Highs solver), directly mirroring the authors' original lpSolve methodology.
  • Implemented the proposed Acquisition Function (AF_num 6) to penalize candidates failing the $P(g(x,w) > h) \ge \alpha$ constraint.
  • Integrated exploration fallbacks and micro-jitter to prevent GP convergence collapse on identical candidates.

Empirical Validation:
benchmark_results
Note for reviewer: Benchmark compares this against TPESampler on a noisy maximization problem subject to a safety threshold $h = -10$. TPE frequently violates the constraint due to environmental noise, whereas DRCC remains conservative and stabilizes safely above the threshold.

TODO List towards PR Merge

  • Copy ./template/ to create your package
  • Replace <COPYRIGHT HOLDER> in LICENSE of your package with your name
  • Fill out README.md in your package
  • Add import statements of your function or class names to be used in __init__.py
  • (Optional) Add from __future__ import annotations at the head of any Python files that include typing to support older Python versions
  • Apply the formatter based on the tips in README.md
  • Check whether your module works as intended based on the tips in README.md

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.

Support "Bayesian Optimization for Distributionally Robust Chance-constrained Problem"

1 participant