Replies: 1 comment 10 replies
-
Interesting finding! This pretty much boils down to two Sobol sequences not being independent of each other. We can produce similar plots using
I haven't looked into the code to see if there is an easy fix for this, but here are a couple thoughts that may help in the short term:
cc @Balandat -- maybe we should use |
Beta Was this translation helpful? Give feedback.
10 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
First off, thanks to the Botorch contributors for developing, maintaining, and supporting this incredible resource!!
Summary
I recently updated from Botorch 0.6.6 + GPyTorch 1.8.1 (I know, very out of date) to Botorch 0.8.5 + GPyTorch 1.10 and noticed some odd behavior: when evaluating a UCB acquisition function on a Botorch
Objective
that includes outcome constraints, I saw big differences across repeated runs.After digging into it, I found that the issue lies in sampling: in Botorch 0.8.5, when I sample from multiple posteriors (wrapped in a
PosteriorList
), I don't get independent samples for each posterior!Digging further, the issue seems to be in the "base samples": when constructing a separate
SobolQMCNormalSampler
for each posterior (as Botorch 0.8.5 does inget_sampler
), the base samples are not independent for some reason.(NOTE: I verified that the same problematic behavior also exists in Botorch 0.12.0 + GPyTorch 1.13 + torch 2.0.1. But this description will continue to compare Botorch 0.6.6 vs 0.8.5.)
Full details below. Please let me know if I'm missing something vs. whether you think this is a genuine bug. Thank you in advance!
Minimal example
Below is a minimal example to illustrate the problem. Call this file
botorch_sampler.py
:Running the minimal example
✅ On Botorch 0.6.6, running this script produces a 2D distribution where each posterior is sampled independently, as expected:
SobolQMCNormalSampler
for each posterior (run the script with the--manual
CLI argument), which is similar to what Botorch 0.8.5'sget_sampler()
does on thePosteriorList
:Beta Was this translation helpful? Give feedback.
All reactions