search_space = Box([0, 0], [1, 1]) fig = plot_function_plotly(scaled_branin, search_space.lower, search_space.upper, grid_density=20) fig.update_layout(height=400, width=400) fig.show() # %% [markdown] # We begin our Bayesian active learning from a two-point initial design built from a space-filling Halton sequence. # %% import trieste observer = trieste.objectives.utils.mk_observer(scaled_branin) num_initial_points = 4 initial_query_points = search_space.sample_halton(num_initial_points) initial_data = observer(initial_query_points) # %% [markdown] # ## Surrogate model # # Just like in sequential optimization, we fit a surrogate Gaussian process model to the initial data. # %% import gpflow from trieste.models.gpflow.models import GaussianProcessRegression def build_model(data): variance = tf.math.reduce_variance(data.observations)
def test_box_haltom_sampling_returns_different_points_for_different_call() -> None: box = Box(tf.zeros((3,)), tf.ones((3,))) halton_samples_1 = box.sample_halton(num_samples=100) halton_samples_2 = box.sample_halton(num_samples=100) npt.assert_raises(AssertionError, npt.assert_allclose, halton_samples_1, halton_samples_2)
def test_box_halton_sampling_raises_for_invalid_sample_size(num_samples: int) -> None: with pytest.raises(TF_DEBUGGING_ERROR_TYPES): box = Box(tf.zeros((3,)), tf.ones((3,))) box.sample_halton(num_samples)
def test_box_halton_sampling_returns_same_points_for_same_seed(seed: int) -> None: box = Box(tf.zeros((3,)), tf.ones((3,))) halton_samples_1 = box.sample_halton(num_samples=100, seed=seed) halton_samples_2 = box.sample_halton(num_samples=100, seed=seed) npt.assert_allclose(halton_samples_1, halton_samples_2)
def test_box_halton_sampling_returns_correct_shape(num_samples: int) -> None: box = Box(tf.zeros((3,)), tf.ones((3,))) halton_samples = box.sample_halton(num_samples) _assert_correct_number_of_unique_constrained_samples(num_samples, box, halton_samples)