{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# External objective function evaluation in Bayesian optimization with Emukit" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Overview" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Bayesian optimization component of Emukit allows for objective functions to be evaluated externally. If users opt for this approach, they can use Emukit to suggest the next point for evaluation, and then evaluate the objective function themselves as well as decide on the stopping criteria of the evaluation loop. This notebook shall demonstrate how to carry out this procedure. The main benefit of using Emukit in this manner is that you can externally manage issues such as parallelizing the computation of the objective function, which is convenient in many scenarios." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] } ], "source": [ "### General imports\n", "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from matplotlib import colors as mcolors\n", "%pylab inline\n", "\n", "### --- Figure config\n", "colors = dict(mcolors.BASE_COLORS, **mcolors.CSS4_COLORS)\n", "LEGEND_SIZE = 15\n", "TITLE_SIZE = 25\n", "AXIS_SIZE = 15" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Navigation\n", "\n", "1. [Handling the loop yourself](#1.-Handling-the-loop-yourself)\n", "\n", "2. [Comparing with the high level API](#2.-Comparing-with-the-high-level-API)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Handling the loop yourself" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For the purposes of this notebook we are going to use one of the predefined objective functions that come with GPyOpt. However, the key thing to realize is that the function could be anything (e.g., the results of a physical experiment). As long as users are able to externally evaluate the suggested points and provide GPyOpt with the results, the library has options for setting the objective function's origin." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from emukit.test_functions import forrester_function\n", "from emukit.core.loop import UserFunctionWrapper\n", "\n", "target_function, space = forrester_function()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First we are going to run the optimization loop outside of Emukit, and only use the library to get the next point at which to evaluate our function.\n", "\n", "There are two things to pay attention to when creating the main optimization object:\n", "\n", "* Since we recreate the object anew for each iteration, we need to pass data about all previous iterations to it.\n", "\n", "* The model gets optimized from the scratch in every iteration but the parameters of the model could be saved and used to update the state (TODO).\n", "\n", "We start with three initial points at which we evaluate the objective function." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "X = np.array([[0.1],[0.6],[0.9]])\n", "Y = target_function(X)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And we run the loop externally." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "from emukit.examples.gp_bayesian_optimization.single_objective_bayesian_optimization import GPBayesianOptimization\n", "from emukit.core.loop import UserFunctionResult\n", "\n", "num_iterations = 10\n", "\n", "bo = GPBayesianOptimization(variables_list=space.parameters, X=X, Y=Y)\n", "results = None\n", "\n", "for _ in range(num_iterations):\n", " X_new = bo.get_next_points(results)\n", " Y_new = target_function(X_new)\n", " results = [UserFunctionResult(X_new[0], Y_new[0])]\n", "\n", "X = bo.loop_state.X\n", "Y = bo.loop_state.Y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's visualize the results. The size of the marker denotes the order in which the point was evaluated - the bigger the marker the later was the evaluation." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "x = np.arange(0.0, 1.0, 0.01)\n", "y = target_function(x)\n", "\n", "plt.figure()\n", "plt.plot(x, y)\n", "for i, (xs, ys) in enumerate(zip(X, Y)):\n", " plt.plot(xs, ys, 'ro', markersize=10 + 10 * (i+1)/len(X))" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.1 ],\n", " [0.6 ],\n", " [0.9 ],\n", " [0.0549192 ],\n", " [0.24163332],\n", " [0.44706868],\n", " [0.15537258],\n", " [0.13687813],\n", " [0.6888019 ],\n", " [0.71922108],\n", " [0.73967583],\n", " [0.75168362]])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Comparing with the high level API" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To compare the results, let's now execute the whole loop with Emukit." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "X = np.array([[0.1],[0.6],[0.9]])\n", "Y = target_function(X)\n", "\n", "bo_loop = GPBayesianOptimization(variables_list=space.parameters, X=X, Y=Y)\n", "bo_loop.run_optimization(target_function, num_iterations)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's print the results of this optimization and compare it to the previous external evaluation run. As before, the size of the marker corresponds to its evaluation order." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "x = np.arange(0.0, 1.0, 0.01)\n", "y = target_function(x)\n", "\n", "plt.figure()\n", "plt.plot(x, y)\n", "for i, (xs, ys) in enumerate(zip(bo_loop.model.model.X, bo_loop.model.model.Y)):\n", " plt.plot(xs, ys, 'ro', markersize=10 + 10 * (i+1)/len(bo_loop.model.model.X))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It can be observed that we obtain the same result as before but now the objective function is handled internally." ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.6" } }, "nbformat": 4, "nbformat_minor": 1 }