mixle.doe.robust module

Noise-robust incumbent selection for Bayesian optimization (a correctness fix for noisy objectives).

mixle.doe.bayesopt.minimize() returns the incumbent as argmin of the OBSERVED objective values. That is correct for a deterministic objective, but optimistically biased for a NOISY one: the lowest observed value is often just the point that drew the luckiest negative noise, not the true optimum, so best_x chases noise and best_y is a downward-biased estimate.

The standard fix (Jones et al.; the “noisy BO” recommendation) is to report the incumbent by the surrogate’s POSTERIOR MEAN, which averages out observation noise: fit the GP over every evaluated point and return the evaluated point whose posterior-mean prediction is best. posterior_incumbent() is that primitive; noisy_minimize() runs the ordinary BO loop and then re-selects the incumbent this way – so the exploration is unchanged, only the reported answer is made robust.

class IncumbentResult(best_x, best_mean, best_index)[source]

Bases: object

The posterior-mean incumbent among evaluated points: its location, posterior mean, and index.

Parameters:
posterior_incumbent(x, y, *, maximize=False, gp=None, fit_kwargs=None)[source]

Among the evaluated points x, return the one with the best GP POSTERIOR MEAN (min by default).

Fits a GP surrogate on (x, y) – the same surrogate the BO loop uses – and predicts the denoised mean at every evaluated point, so the reported optimum reflects the model’s belief, not a single lucky noisy observation. For a deterministic objective the posterior mean at the observed points is ~the observations, so this reduces to the ordinary argmin/argmax.

Parameters:
Return type:

IncumbentResult

noisy_minimize(objective, bounds, n_init=5, n_iter=15, seed=None, *, maximize=False, gp=None, fit_kwargs=None, **minimize_kwargs)[source]

Bayesian optimization of a NOISY objective, reporting the posterior-mean incumbent.

Runs mixle.doe.bayesopt.minimize() (same exploration), then replaces the raw argmin-of- observations incumbent with the posterior-mean incumbent (posterior_incumbent()), so best_x is the model’s believed optimum rather than the luckiest noisy draw and best_y is its denoised estimate. The full (x, y) evaluation history is preserved on the result.

Parameters:
Return type:

BayesOptResult