# This is the main Bayesian optimization loop for i in xrange(10): # Fit the model on the data we observed so far model.train(X, Y) # Update the acquisition function model with the retrained model acquisition_func.update(model) # Optimize the acquisition function to obtain a new point new_x = maximizer(acquisition_func, X_lower, X_upper) # Evaluate the point and add the new observation to our set of previous seen points new_y = objective_function(np.array(new_x)) X = np.append(X, new_x, axis=0) Y = np.append(Y, new_y, axis=0) # Visualize the objective function, model and the acquisition function fig = plt.figure() ax1 = fig.add_subplot(1, 1, 1) plotting_range = np.linspace(X_lower[0], X_upper[0], num=1000) ax1.plot(plotting_range, objective_function(plotting_range[:, np.newaxis]), color='b', linestyle="--") _min_y1, _max_y1 = ax1.get_ylim() model.visualize(ax1, X_lower[0], X_upper[0]) _min_y2, _max_y2 = ax1.get_ylim() ax1.set_ylim(min(_min_y1, _min_y2), max(_max_y1, _max_y2)) mu, var = model.predict(new_x) ax1.plot(new_x[0], mu[0], "r.", markeredgewidth=5.0) ax2 = acquisition_func.plot(fig, X_lower[0], X_upper[0], plot_attr={"color": "red"}, resolution=1000) plt.show(block=True)
# Optimize the acquisition function to obtain a new point new_x = maximizer(acquisition_func, X_lower, X_upper) # Evaluate the point and add the new observation to our set of previous seen points new_y = objective_function(np.array(new_x)) X = np.append(X, new_x, axis=0) Y = np.append(Y, new_y, axis=0) # Visualize the objective function, model and the acquisition function fig = plt.figure() ax1 = fig.add_subplot(1, 1, 1) plotting_range = np.linspace(X_lower[0], X_upper[0], num=1000) ax1.plot(plotting_range, objective_function(plotting_range[:, np.newaxis]), color='b', linestyle="--") _min_y1, _max_y1 = ax1.get_ylim() model.visualize(ax1, X_lower[0], X_upper[0]) _min_y2, _max_y2 = ax1.get_ylim() ax1.set_ylim(min(_min_y1, _min_y2), max(_max_y1, _max_y2)) mu, var = model.predict(new_x) ax1.plot(new_x[0], mu[0], "r.", markeredgewidth=5.0) ax2 = acquisition_func.plot(fig, X_lower[0], X_upper[0], plot_attr={"color": "red"}, resolution=1000) plt.show(block=True)