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
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
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