{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Fast Computation for Multi-objective Optimization\n", "\n", "In the [previous tutorial](./tutorial_multi.ipynb), we independently modeled each objective function using Gaussian process and directly maximized the Pareto hypervolume. However, this approach becomes computationally expensive when the number of objective functions increases.\n", "\n", "In this tutorial, we will learn how to speed up multi-objective optimization by unifying multiple objective functions into a single objective function, and performing Bayesian optimization on that unified objective.\n", "\n", "## Unification of Multi-objective Optimization\n", "\n", "Let the $i$-th data point (feature vector) be $\\vec{x}_i$, and its objective values be $\\vec{y}_i = (y_{i,1}, y_{i,2}, \\dots, y_{i,p})$.\n", "We construct a new unified objective $z_i$ from $\\vec{y}_i$. We model the function from $\\vec{x}_i$ to $z_i$, $z_i = g(\\vec{x}_i)$, by Gaussian process regression and perform Bayesian optimization on it.\n", "\n", "In the current version of PHYSBO, two methods are provided to construct $z_i$ from $\\vec{y}_i$: the Non-dominated Sorting (NDS) method and the ParEGO method." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Non-dominated Sorting Method\n", "\n", "#### Definition\n", "\n", "Non-dominated Sorting (NDS) is a method where the training data $\\vec{y}_i$ are ranked using non-dominated sorting, and a new objective function is created based on these ranks. The rank is recursively defined as follows:\n", "\n", "1. Points that are on the Pareto front of the entire training dataset are assigned a rank of $r_i = 1$.\n", "2. After removing the points with rank $r_i = 1$, the points on the next Pareto front are assigned a rank of $r_i = 2$.\n", "3. Similarly, after removing all points with ranks $r_i = 1,2,\\dots,k-1$, the points on the next Pareto front are assigned a rank of $r_i = k$.\n", "4. This process is repeated until the maximum rank $r_\\text{max}$ is reached. Any remaining points are assigned $r_i = \\infty$.\n", "\n", "Based on the rank $r_i$, the new objective function $z_i$ is defined as follows and is maximized:\n", "\n", "$$\n", "z_i = \\frac{1}{r_i}\n", "$$\n", "\n", "#### How to Use in PHYSBO\n", "\n", "In PHYSBO, the NDS method is implemented as the `physbo.search.unify.NDS` class.\n", "\n", "``` python\n", "unify_method = physbo.search.unify.NDS(rank_max=10)\n", "```\n", "\n", "Any points with ranks above `rank_max` are handled as $z_i = 0$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### ParEGO Method\n", "\n", "#### Definition\n", "\n", "The ParEGO method converts multi-objective optimization into single-objective optimization by taking a weighted sum and a weighted maximum of the objective function values.\n", "Let the weights for the objectives be $\\vec{w} = (w_1, w_2, \\dots, w_p)$, and let the coefficients for sum and max be $\\rho_\\text{sum}$ and $\\rho_\\text{max}$, respectively. Then, the new unified objective function is defined as:\n", "\n", "$$\n", "z_i = \\rho_\\text{sum} \\sum_{j} w_j y_{i,j} + \\rho_\\text{max} \\max_{j} w_j y_{i,j}\n", "$$\n", "\n", "#### Usage in PHYSBO\n", "\n", "In PHYSBO, the ParEGO method is implemented as the `physbo.search.unify.ParEGO` class.\n", "\n", "``` python\n", "unify_method = physbo.search.unify.ParEGO(weight_sum=0.05, weight_max=1.0, weights=None, weights_discrete=0)\n", "```\n", "\n", "`weight_sum` and `weight_max` correspond to $\\rho_\\text{sum}$ and $\\rho_\\text{max}$, respectively. \n", "`weights` specifies the weight vector $\\vec{w}$.\n", "\n", "- The weights $\\vec{w}$ are automatically normalized so that $\\sum_{j} w_j = 1$.\n", "- If `weights = None`, weights are randomly generated at each Bayesian optimization step.\n", " - If `weights_discrete` is set to an integer $s>0$, each weight is generated as $w_j = \\frac{a_j}{s}$.\n", " - Here $a_j$ is an integer from $0$ to $s$, and $\\sum_{j} a_j = s$.\n", " - If $s=0$, weights are sampled uniformly at random from $[0,1)$ and then normalized so that their sum is 1.\n", "\n", "Also, for each objective $j$, $y_{i,j}$ is normalized to the range $[-1, 0]$ using the minimum and maximum values in the training data." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Tutorial\n", "\n", "### Preparations" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:06:13.657438Z", "start_time": "2021-01-05T06:06:13.061216Z" } }, "outputs": [], "source": [ "import time\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import pandas as pd\n", "import physbo\n", "%matplotlib inline\n", "\n", "seed = 12345\n", "num_random_search = 10\n", "num_bayes_search = 40" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Test Functions\n", "\n", "In this tutorial, we continue to use VLMOP2, which is a benchmark function for multi-objective optimization.\n", "PHYSBO provides several multi-objective benchmark functions, including VLMOP2, under `physbo.test_functions.multi_objective`." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:06:13.662277Z", "start_time": "2021-01-05T06:06:13.658957Z" } }, "outputs": [], "source": [ "sim_fn = physbo.test_functions.multi_objective.VLMOP2(dim=2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Preparing Candidate Data for Search\n", "\n", "The `sim_fn` object contains `min_X` and `max_X`, which specify the minimum and maximum values of the search space.\n", "Using these, you can generate a grid of candidate points with `physbo.search.utility.make_grid`." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "test_X = physbo.search.utility.make_grid(min_X=sim_fn.min_X, max_X=sim_fn.max_X, num_X=101)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### simulator" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:06:13.699166Z", "start_time": "2021-01-05T06:06:13.694489Z" } }, "outputs": [], "source": [ "simu = physbo.search.utility.Simulator(test_X=test_X, test_function=sim_fn)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### HVPI\n", "\n", "As a comparison, we perform Bayesian optimization using HVPI." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4.200511932373047" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "policy = physbo.search.discrete_multi.Policy(test_X=test_X, num_objectives=2)\n", "policy.set_seed(seed)\n", "\n", "policy.random_search(max_num_probes=num_random_search, simulator=simu, is_disp=False)\n", "time_start = time.time()\n", "res_HVPI = policy.bayes_search(max_num_probes=num_bayes_search, simulator=simu, score='HVPI', interval=10, is_disp=False)\n", "time_HVPI = time.time() - time_start\n", "time_HVPI" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'HVPI')" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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gdMyIio4yPmf5+dTLw4AAIchxMFXB66gQCQ1NfDT0B46badOHAAAjkOxX/hoUMvOZsUGAAAsQYhD4NBqVhafCAAAFmA4FQAAwEKEOAAAAAsR4gAAACxEiAMAALAQIQ4AAMBChDgAAAALEeIAAAAsRIgDAACwECEOAADAQoQ4AAAACxHiAAAALESIAwAAsFDTWJ8ALFBeLrJihcj27SIdO4pkZookJMT6rAAAiGuEONRswQKR3FyR4uKjbWlpIjNmiOTk8OkBABAjDKei5gA3YkRggFMlJb523Q8AAGKCEIfqh1C1B87rrbrP35aX5zsOAABEHSEOoek9cME9cMFBrqjIdxwAAIg6QhxC00kM4TwOAACEFSEOoeks1HAeBwAAwooQh9C0jIjOQvV4Qu/X9vR033EAACDqCHEITevAaRkRFRzk/M/z86kXBwBAjBDiUD2tA1dQIJKaGtiuPXTaTp04AABixpoQt2fPHhkzZowkJSVJmzZtZNy4cbJ///4aj7/llluka9eu0qJFCznxxBPl1ltvldLS0qiet/U0qH35pciyZSJz5/oeCwsJcAAAxJg1KzZogNu+fbssWbJEDh8+LNddd52MHz9e5mqwCOHrr78227Rp06RHjx7y1Vdfye9+9zvTVqC9SKjf0GpWFp8YAAAO4vF6Q1VzdZYNGzaYILZ27Vrp1auXaVu8eLEMGzZMiouLpVOnTnV6n/nz58uvf/1r+f7776Vp07rl17KyMklOTjY9eNoLCAAAECn1yR1WDKeuWrXKDKH6A5waNGiQNGnSRFavXl3n9/F/IDUFuIMHD5oPsPIGAADgNFaEuB07dkj79u0D2jSItW3b1uyri927d8sDDzxghmBrMmXKFJOA/Vu6ltEAAABwmJiGuEmTJonH46lx27hxY6O/j/amXXLJJWZI9t57763x2MmTJ5seO/9WpEtLAQAAOExMJzZMnDhRxo4dW+MxnTt3lg4dOsiuXbsC2n/66SczA1X31WTfvn0ydOhQad26tSxcuFCaNWtW4/GJiYlmQz2Vl/vWUdVluHQVBy0CrBMiAACA+0Jcu3btzFabPn36yN69e2X9+vVy7rnnmra33npLjhw5Ir17966xB27IkCEmlL388svSvHnzsJ4/frZggUhurkhxcWAtOS0WTC05AADi95647t27m960G264QdasWSMrV66U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/nm5/fbbTRmR999/X84880zz+3bXrl0hj3/33Xfl6quvNp+z/h64/PLLzabXIOJ07VTExt/+9jdvcnJyrccdOXLE26FDB+/DDz9c0bZ3715vYmKid968eRE+S/f67LPPdN1g79q1ayvaXnvtNa/H4/GWlJRU+7pWrVp5n3322YC2tm3bev/6179G9HzdrKHXonfv3t4777wzSmfpfg29DuqDDz7wpqamerdv327eY+HChVE4Y/dqzLWo7IUXXvAec8wx3sOHD0foTN3n/PPP9958880Vz8vLy72dOnXyTpkyJeTxI0eO9F5yySVVfjbdeOONET9X/rlqgcLCQjOEp0OolddV0y5e7YlAw+hnp0MUvXr1qmjTz1h7cbS3szo6FK7/UtOhiyNHjshzzz1nekSzsrK4FFG8FvqvYt3Xvn17c01SUlKkX79+8s4773Adongd1IEDB2T06NFmCEpvM0DsrkUwHUrV4dimTVkqva4jZevXrw/4faufuT6v7vettlc+XmnPXTR+PxPiLKABTukvqcr0uX8fGva5agCoTH/QtW3btsbP9YUXXpDDhw/L8ccfbyp233jjjbJw4ULp0qULlyGK1+KLL74wj/fee6/ccMMNZthI708cOHAg94tG8Tqo2267zQTp7Ozshn5rhOlaVLZ792554IEH6jwcDjGfWXl5eb1+32p7rH4/E+LCZNKkSeZekJq2jRs3huvbIYbX4q677pK9e/fKm2++KevWrTP3Tug9cXp/HKJ3LbQXVGmIvu666+Tss8+W6dOnm5u6n3rqKS5FlK6D3hv61ltvmfvh4JzfFWVlZXLJJZdIjx49zD904E70r4bJxIkTZezYsTUe07lz5wa9t394YufOnWZ2qp8+P+ussxr0nm5W12uhn2vwjao//fSTGSatbkho69at8thjj5kbVnv27Gna9KbXFStWmKEknXiC6FwL/98F/SVVWffu3WXbtm1chihdBw1w+vcieKb9FVdcIZmZmbJ8+XKuRZSuhd++ffvMhJ/WrVubUYJmzZpxDerohBNOkISEBPP7tTJ9Xt3nru31OT6cCHFh0q5dO7NFwkknnWT+Z1i6dGlFaNN/Zel9EfWZ4Rov6not+vTpY3rU9P6Hc889t+IXkvbw6P2G1d37o4JnP+pfen/PEKJzLXT6f6dOncxM4co2b95sylwgOtdBe5au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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(7, 7))\n", "physbo.search.utility.plot_pareto_front_all(res_HVPI, ax=ax, steps_end=num_random_search, marker=\"+\")\n", "physbo.search.utility.plot_pareto_front_all(res_HVPI, ax=ax, steps_begin=num_random_search)\n", "ax.set_title(\"HVPI\")" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.float64(0.3285497837573861)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "VID_HVPI = res_HVPI.pareto.volume_in_dominance([-1,-1],[0,0])\n", "VID_HVPI" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Bayesian Optimization with Unified Objective\n", "\n", "Use the `physbo.search.discrete_unified.Policy` class as `Policy` class.\n", "\n", "As with other `Policy` classes, you can create initial data using `random_search` etc., and perform Bayesian optimization with the `bayes_search` method.\n", "The difference from other `Policy` classes is as follows.\n", "\n", "#### Unification of Objective Function\n", "\n", "The algorithm used for unification is specified by the `unify_method` argument of the `bayes_search` method.\n", "PHYSBO provides `physbo.search.unify.ParEGO` and `physbo.search.unify.NDS`.\n", "\n", "#### Acquisition Function\n", "\n", "The acquisition function is the same as that for single-objective optimization.\n", "\n", "- PI (Probability of Improvement)\n", "- EI (Expected Improvement)\n", "- TS (Thompson Sampling)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### NDS" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:08:41.237335Z", "start_time": "2021-01-05T06:06:29.201353Z" }, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "1.7535040378570557" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "policy = physbo.search.discrete_unified.Policy(test_X=test_X, num_objectives=2)\n", "policy.set_seed(seed)\n", "\n", "unify_method = physbo.search.unify.NDS(num_objectives=2)\n", "\n", "policy.random_search(max_num_probes=num_random_search, simulator=simu, is_disp=False)\n", "time_start = time.time()\n", "res_NDS = policy.bayes_search(max_num_probes=num_bayes_search, simulator=simu, unify_method=unify_method, score='EI', interval=10, is_disp=False)\n", "time_NDS = time.time() - time_start\n", "time_NDS" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Plotting Pareto Front" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:08:41.386473Z", "start_time": "2021-01-05T06:08:41.239067Z" } }, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'NDS')" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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+6OPPqrVzyXkRcCdd95p/kLzf6xaterMjRExJVYqllF5+OGH3R06dDD/RxkwYIB7x44dkbh8q3311VfmL0AN3xoOxowZ4xO+9+zZU+le7dy5052RkeFu3769++yzz3ZfcskllUqqIDL3RmmJguTkZHNv+vbt687Ly+N2RMm9qYiQFx33Rr8G+v2kDz0Xdff888+7zzvvPFOORkuqvPfee+XHrr32WpMN/EvXfP/73zfn9+zZs04dBy79n3r0QgIAACAKsboWAADAQoQ8AAAACxHyAAAALETIAwAAsBAhDwAAwEKEPAAAAAsR8gAAACxEyAMAALAQIQ9ATNE9bbOzs+t9Tn3NmTNHWrduHdafASC2EfIAWCE/P19+8YtfSKdOncyG4N/73vckMzNTvvrqq1q/16ZNm2TcuHEhu7ZAofG2226TnTt3Sjh9++23Mnr0aOnVq5c0bty4fHN0ALGBkAfA8T777DO56qqrZNeuXbJgwQL59NNPZfbs2bJy5Urp27evHD58uFbv165dOzn77LMlnJo3by7t27cP688oLS01P+f++++XgQMHhvVnAYg+hDwAjnfvvfea3rt//OMfcu2118p5550nN910k7z99ttSUFAgDz74oM/5X3/9tdx+++3SokULSUpKklmzZlXb83bkyBG56667TPiLj4+X6667Tv71r3/5vOavf/2r/OAHP5BmzZpJ27Zt5ZZbbjHtaWlp8vnnn8vEiRPF5XKZh/9wrfboafv27dt93nPGjBly/vnnlz//+OOPzZ+rZcuW0qFDB7njjjvk0KFDVX4u+uf73//9X7n77rulY8eOdfhkATgZIQ+Ao2kv3d///nf55S9/aXqtKtJgM3LkSFm4cKG43e7y9meeeUYuvfRS+eCDD2Ty5MlmWHfFihVV/oxbb71VDh48KG+99ZZs2bJFrrjiChkwYEB5D+Hf/vY3E+oGDRpk3lN7EHv37m2OLV68WJKTk+WJJ56QwsJC8/D3/e9/3/REzps3z6ddn48YMaI8aGq4vPzyy2Xz5s2yfPlyOXDggAwbNqyenyAAWzWO9AUAQH3oEK0GuB49egQ8ru3/+c9/5MsvvywfHv3hD39owp03YK1du9b0mv34xz+u9Pp3331XNm7caEJe06ZNTdv06dNl6dKlkpuba+buPfXUUzJ8+HB5/PHHy1+nIVK1adNG4uLipFWrVtX2pmkYnTlzpjz55JPlvXsaKP/yl7+Y53pMA95vf/vb8te89NJLkpKSYs7VPwcAVERPHgArVOypq4nO0/N/vm3btoDn6rDs0aNH5dxzzzXDpN7Hnj17ZPfu3eacDz/80PTs1YeGxL1798p7771X3ounPYbdu3cvv45Vq1b5XIP3mPc6AKAievIAOFq3bt3MfDYNad55cBVp+znnnGPm09WFBrzExERZvXp1pWPeOXX+w8R1ob18Ohw7f/58ufrqq83Xe+65x+c6Bg8eLE8//XSl1+r1AYA/evIAOJr2sOkw6x/+8Ac5fvy4z7GioiLTI6blSrwLHpS3t6zi86qGe7U3Td9HS5BooKz40AUW6pJLLjHz8Kqii0J0pWtNvPMH169fb1YMa+9exevYunWrWRTifx26wAIA/BHyADiezlc7ceKE3HDDDbJmzRpTM08XJmj409WzOmeuIp2DN23aNDOXTVfWLlq0yCy+CERLj+hwrtaY09W7OqS6bt06s2JXF0CoRx991JRu0a/ac/jRRx/59LhpMNPr0pW+1a2GzcjIMCt/tQevf//+puZfxRXEutBDVwVrHT8dotUFJ2PGjKk2QH7yySdmOFlfW1xcbL7XB4AY4AYAC+zdu9d95513ujt06OA+66yz3CkpKe777rvPfejQIZ/zvve977kff/xx96233uo+++yz3R07dnTn5ORUOmfGjBnlz0tKSsx7derUqfy9R44c6d63b1/5Oa+99pr7sssuczdp0sTdtm1bd0ZGRvmx9evXuy+55BJ306ZNdeKgafvzn//sTkhIqPTnGDZsmDnnpZdeqnRs586d7ltuucXdunVrd/Pmzd3du3d3Z2VlucvKyqr8XPTPou/n/wBgP5f+T6SDJgBEE53jpqtctTYeADgVCy8A4DvffPONGcrV+nM9e/bkcwHgaMzJA4DvvPDCC2axQ1ZWVqUyKwDgNAzXAgAAWIiePAAAAAsR8gAAACxEyAMAALAQIQ8AAMBChDwAAAALEfIAAAAsRMgDAACwECEPAABA7PP/ATz00Aaq3gtqAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(7, 7))\n", "physbo.search.utility.plot_pareto_front_all(res_NDS, ax=ax, steps_end=num_random_search, marker=\"+\")\n", "physbo.search.utility.plot_pareto_front_all(res_NDS, ax=ax, steps_begin=num_random_search)\n", "ax.set_title(\"NDS\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Volume of Dominance Region" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:08:41.402348Z", "start_time": "2021-01-05T06:08:41.394521Z" } }, "outputs": [ { "data": { "text/plain": [ "np.float64(0.30923409715730354)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "VID_NDS = res_NDS.pareto.volume_in_dominance([-1,-1],[0,0])\n", "VID_NDS" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### ParEGO" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:06:29.019463Z", "start_time": "2021-01-05T06:06:14.668034Z" } }, "outputs": [ { "data": { "text/plain": [ "1.7327749729156494" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "policy = physbo.search.discrete_unified.Policy(test_X=test_X, num_objectives=2)\n", "policy.set_seed(seed)\n", "\n", "unify_method = physbo.search.unify.ParEGO(num_objectives=2)\n", "\n", "res_random = policy.random_search(max_num_probes=num_random_search, simulator=simu, is_disp=False)\n", "time_start = time.time()\n", "res_ParEGO = policy.bayes_search(max_num_probes=num_bayes_search, simulator=simu, unify_method=unify_method, score='EI', interval=10, is_disp=False)\n", "time_ParEGO = time.time() - time_start\n", "time_ParEGO" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Plotting Pareto Front" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:06:29.190434Z", "start_time": "2021-01-05T06:06:29.020967Z" } }, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'ParEGO')" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(7, 7))\n", "physbo.search.utility.plot_pareto_front_all(res_ParEGO, ax=ax, steps_end=num_random_search, marker=\"+\")\n", "physbo.search.utility.plot_pareto_front_all(res_ParEGO, ax=ax, steps_begin=num_random_search)\n", "ax.set_title(\"ParEGO\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Volume of Dominance Region" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:06:29.196389Z", "start_time": "2021-01-05T06:06:29.191710Z" } }, "outputs": [ { "data": { "text/plain": [ "np.float64(0.18004551161609372)" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "VID_ParEGO = res_ParEGO.pareto.volume_in_dominance([-1,-1],[0,0])\n", "VID_ParEGO" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Comparison of Results" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
AlgorithmComputation TimeVolume of Dominance Region
0NDS1.7535040.309234
1ParEGO1.7327750.180046
2HVPI4.2005120.328550
\n", "
" ], "text/plain": [ " Algorithm Computation Time Volume of Dominance Region\n", "0 NDS 1.753504 0.309234\n", "1 ParEGO 1.732775 0.180046\n", "2 HVPI 4.200512 0.328550" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# make table\n", "df = pd.DataFrame({\n", " \"Algorithm\": [\"NDS\", \"ParEGO\", \"HVPI\"],\n", " \"Computation Time\": [time_NDS, time_ParEGO, time_HVPI],\n", " \"Volume of Dominance Region\": [VID_NDS, VID_ParEGO, VID_HVPI]\n", "})\n", "df\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "NDS achieves a comparable result in terms of the volume of the dominance region to HVPI, but with a shorter computation time.\n", "\n", "On the other hand, while ParEGO has the shortest computation time, the volume of the dominance region it achieves is smaller.\n", "\n", "Depending on the optimization problem, the algorithm that produces the best results may vary as seen below." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Another Benchmark Function\n", "\n", "We now perform Bayesian optimization using the Kita-Yabumoto-Mori-Nishikawa function:\n", "\n", "$$\n", "\\begin{cases}\n", "f_1(x, y) = -x^2 + y^2 \\\\\n", "f_2(x, y) = 0.5x + y + 1 \\\\\n", "\\end{cases}\n", "$$\n", "\n", "Furthermore, $x$ and $y$ have the following constraints:\n", "\n", "$$\n", "\\begin{cases}\n", "g_1(x, y) = 6.5 - x/6 - y \\ge 0 \\\\\n", "g_2(x, y) = 7.5 - x/2 - y \\ge 0 \\\\\n", "g_3(x, y) = 30 - 5x - y \\ge 0 \\\\\n", "\\end{cases}\n", "$$\n", "\n", "\n", "Kita, H., Yabumoto, Y., Mori, N., Nishikawa, Y. (1996). Multi-objective optimization by means of the thermodynamical genetic algorithm. In: Voigt, HM., Ebeling, W., Rechenberg, I., Schwefel, HP. (eds) Parallel Problem Solving from Nature — PPSN IV. PPSN 1996. Lecture Notes in Computer Science, vol 1141. Springer, Berlin, Heidelberg. https://doi.org/10.1007/3-540-61723-X_1014\n", "\n" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "fn_KYMN = physbo.test_functions.multi_objective.KitaYabumotoMoriNishikawa()\n", "test_X_KYMN = physbo.search.utility.make_grid(min_X=fn_KYMN.min_X, max_X=fn_KYMN.max_X, num_X=101, constraint=fn_KYMN.constraint)\n", "simu_KYMN = physbo.search.utility.Simulator(test_X=test_X_KYMN, test_function=fn_KYMN)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### HVPI" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'HVPI')" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnUAAAJwCAYAAADvOpfnAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAOFxJREFUeJzt3QmclVX9P/DvAILsIpsouO+pZZqmaeGSZq6hWEmlZphFKerLhdTUSkgtl8y1RS0lzf2X5Z5Wpv7dLS0Ut0QCFFAQVFS4/9d5aMYZGGAGZubOPff9fr0e597nPvdy5nhn7mfOWlMqlUoBAEBF61DuAgAAsOKEOgCADAh1AAAZEOoAADIg1AEAZECoAwDIgFAHAJABoQ4AIANCHQBABoQ6AIAMCHVA1bviiiuipqYmHn300UbrYujQobHZZpvF448/Xlx38sknL7HOJk6cWFxzzDHHFPdPO+204n7t0a1bt9h0002L15g9e3aTywCwLEIdQBN9/OMfj4033jh+97vfLfGa8ePHF1+/8pWvNDh/8cUXx29/+9s455xzitc444wz4nOf+1zYfhtoKUIdQDOMGDEiXnzxxXjooYcafTwFvhTaUgCs74ADDiiC3hFHHBE33nhjDBs2LB588MElvg5Acwl1AM0MdfVb5Op77LHH4tlnn627Zml23nnn4utLL72k/oEWIdQB/M+sWbNi+vTpix3vv/9+XR2ts846sf3228fvf//7mD9/foO6qw16Bx100DLr9IUXXii+9u3bV/0DLaJTy7wMQOXbddddl/jYRz7ykbrbqSVu1KhRcc8998Ruu+1WnFuwYEFce+21sd1228W666672PNnzpxZfJ0zZ07ceeedcdFFF8XAgQNjxx13bJXvBag+Qh3A/1x44YWx4YYbLlYfxx57bINWuS9+8YsxevToomWuNtT95S9/icmTJ8eYMWMarc+NNtposZB45ZVXFrNhAVqCUAfwP9tss01svfXWi9VHnz59im7YWqnLdPfdd4+bbropLrnkklh55ZWLgNepU6c48MADG63PG264IXr16hUrrbRSDB48ONZbbz31DrQooQ5gOaSZrLfeemtx7LPPPkVoS612/fv3b/T6T3/609GvXz91DbQaoQ5gOaQg17Nnz6KFLrW+vfHGG02a9QrQWoQ6gOXQtWvX+MIXvlBMjnj77beje/fuse+++6pLoGwsaQKwAl2w8+bNizvuuCP222+/ItgBlItQB7Cc0gLCgwYNKm7regXKraZk40EAgIqnpQ4AIANCHQBABoQ6AIAMZBXq0jY+p5xySrHhdlpuIK3Y/sMf/jAMGwQAcpfVOnVnnnlmXHzxxcV+imlfxUcffTQOPfTQ6N27dxx55JHlLh4AQKvJavbrXnvtFQMHDoxf/epXdef233//otXuqquuKmvZAABaU1Ytddtvv31cdtll8dxzz8WGG24YTz31VNx///1xzjnnLPE5aeHQdNRasGBBzJw5s9iwu6ampo1KDgBUo1KpFG+99Vasvvrq0aHDCo6KK2Vk/vz5pRNOOKFUU1NT6tSpU/F17NixS33OqaeemloqHerAe8B7wHvAe8B7wHugVK46mDRp0grnoKy6X6+55po47rjj4uyzzy7G1D355JMxevTooqXu4IMPblJL3axZs2LNNdeMSZMmRa9evdqw9ABAtZk9e3YMGTIk3nzzzWIOwIrIKtSlSjnxxBNj1KhRded+9KMfFePpJkyY0OTKTZWawp1QBwC0ppbMHVktafL2228v1h/dsWPHYpwcAEDOspoosffee8cZZ5xRdJ+m7tcnnnii6Hr9+te/Xu6iAQC0qqy6X9PskbT48E033RSvvfZaMZPky1/+cnz/+9+Pzp07N+k1dL8CAG2lJXNHVqGuJQh1AEBbMaYOAIB8J0oAAFQroQ4AIANCHQBABoQ6AIAMCHUAABkQ6gAAMiDUAQBkQKgDAMiAUAcAkAGhDgAgA0IdAEAGhDoAgAwIdQAAGRDqAAAyINQBAGRAqAMAyIBQBwCQAaEOACADQh0AQAaEOgCADAh1AAAZEOoAADIg1AEAZECoAwDIgFAHAJABoQ4AIANCHQBABoQ6AIAMCHUAABkQ6gAAMiDUAQBkQKgDAMiAUAcAkAGhDgAgA0IdAEAGhDoAgAwIdQAAGRDqAAAyINQBAGRAqAMAyIBQBwCQAaEOACADQh0AQAaEOgCADAh1AAAZ6FTuAgAAFWb+/Ii//S1iypSIQYMidtwxomPHcpeq6gl1AEDT3XhjxFFHRbz66ofn1lgj4vDDIzbYQMgrI6EOAGh6oDvggIhSqeH5yZMjTj31w/uDB0ecf37EsGFqtg1lN6Zu8uTJ8ZWvfCX69u0bXbt2jc033zweffTRchcLACq/yzW10C0a6BqTWvH23z/iBz9Y+DzaRFah7o033ohPfepTsdJKK8Vtt90W//rXv+KnP/1p9OnTp9xFA4DKlsbQ1e9ybYrUerf22gtb+Gh1WXW/nnnmmTFkyJC4/PLL686ts846ZS0TAGQhTYpYHrWtdqefHnHSSSZUtKKsWur+7//+L7beeusYPnx4DBgwILbccsv4xS9+sdTnzJs3L2bPnt3gAAAWkWa5rojUarfaahFHHx1x3326ZVtBVqHuxRdfjIsvvjg22GCDuOOOO+Jb3/pWHHnkkXHllVcu8Tnjxo2L3r171x2ppQ8AWERatiRNgKipWf6qmT494rzzInbaSbdsK6gplZoy4rEydO7cuWipe+CBB+rOpVD3yCOPxIMPPrjElrp01EotdSnYzZo1K3r16tUm5QaAipr9mrRUfKjybtnZs2cXjUotkTuyaqkbNGhQbLrppg3ObbLJJvHKK68s8TldunQpKrH+AQA0Ii1Rcv31C9elaykmU7SYrEJdmvn67LPPNjj33HPPxVprrVW2MgFAdsHu5Zcj7r03Yvz4hS1tKxryLIHSIrIKdUcffXQ89NBDMXbs2Hj++edj/Pjxcdlll8WoUaPKXTQAyEfqKh06NOLLX474/vcj/vOfheGuJVrt+ve3vt1yympMXXLrrbfGmDFjYuLEicVyJsccc0yMHDmyLH3bAFB1Y+6OPHLhDhMrqm/fiMsuy35XitktmDuyC3UrSqgDgBWQdpA444yG24atiN//PmL48Gz/l8w2UQIAaLdds6lL9oYbFi6BsqK+9KWI006zrl21jakDANrhhIrRoyP69Vu+11mwYOF4vYEDbTe2DEIdANC6EyrOPTdi6tQVm0wxY8bC7cauu64lS5gVoQ4AqJxu2TTjNq2Vx2KEOgCg7btll7fVLk3ESBMnBLvFCHUAQPla7dLSJcvji1+MuPbali5ZRRPqAIDytdpNm7Zw+ZOamuZPoEgzY48/vrVKV3GEOgCgvK12acmStB7d8jj77OV/bmaEOgCg/A44YPm7Y9PkievMihXqAIDK7o5NXbEHHlj169gJdQBAHt2xhx9e1TtPCHUAQPvsjk1dqh06NG+B4hEjoloJdQBA+w1248c37znXXlu14+uEOgCg/Urr0R13XPOeM2pUVXbDCnUAQPt21lkLW+CaOnni9dcj/va3qDZCHQDQ/qXZrWkXiqaaPDmqjVAHAFSGU06J6NatadfefXdUG6EOAKic5U5GjmzatddfX3Xj6oQ6AKBy7Ldf066bMyfivvuimgh1AEDl2HHHiJ49m3btxRdHNRHqAIDK6oLdffemXXvnnVXVBSvUAQCV5YgjmnbdW29V1dImQh0AUFHm7zg05kSPpl08ZUpUC6EOAKgo9/2tY5wZTdxlYtCgqBZCHQBQUdKk1rFxUkyPvlFawjULoibe7DVk4cSKKiHUAQAVZ0F0jMPjsiLULVjssZri6227nbdwYkWVEOoAgIoydOjCrzfFsDggbojJMbjB46/G4Dggro8BRwyLalJTKpWW1HJZlWbPnh29e/eOWbNmRa9evcpdHABgEWmVkoEDI2bMWHi/Q8yPHeNvMSimxJQYFH+LHaNP344xbVr7b6hrydzRqcVKBQDQBlJQu+yyiP33/7Ar9i/xv+a7/0mPt/dA19J0vwIAFWfYsIgbbogY3LDnNdL9dD49Xm201AEAFSkFt333Xbi+8JQpC1cvSZNdq62FrpZQBwBUrBTgaidOVDvdrwAAGRDqAAAyINQBAGRAqAMAyIBQBwCQAaEOACADQh0AQAaEOgCADAh1AAAZEOoAADIg1AEAZECoAwDIgFAHAJABoQ4AIANCHQDQLHPnRtTULDzSbdoHoQ4AIAOdyl0AAKAy1LbK1W+dq3+7e/e2LxNV0lL34x//OGpqamL06NHlLgoAVLwePRYeAwd+eC7drj1PeWUb6h555JG49NJLY4sttih3UQAAWl2WoW7OnDkxYsSI+MUvfhF9+vQpd3EAIAtz5iw8pk378Fy6XXue8soy1I0aNSr23HPP2HXXXZd57bx582L27NkNDgBgcWnMXO2xtHOUR3YTJa655pp4/PHHi+7Xphg3blycfvrprV4uAIDWlFVL3aRJk+Koo46Kq6++OlZeeeUmPWfMmDExa9asuiO9BgCwZKlVrlRaeGihaz9qSqX0vyQPN998c3zhC1+Ijh071p2bP39+MQO2Q4cORVdr/ccak7pfe/fuXQS8Xr16tUGpAYBqNbsFc0dW3a+77LJL/POf/2xw7tBDD42NN944TjjhhGUGOgCASpVVqOvZs2dsttlmDc517949+vbtu9h5AICcZDWmDgCgWmXVUteY++67r9xFAABodVrqAAAyINQBAGRAqAMAyIBQBwCQAaEOACADQh0AQAaEOgCADAh1AAAZEOoAADIg1AEAZECoAwDIgFAHAJABoQ4AIANCHQBABoQ6AIAMCHUAABkQ6gAAMiDUAQBkQKgDAMiAUAcAkAGhDgAgA0IdAEAGhDoAgAwIdQAAGRDqAAAyINQBQETMnRtRU7PwSLeh0gh1AAAZ6FTuAgBAOdW2ytVvnat/u3v3ti8TLA+hDoCq1qPH4ucGDvzwdqnUpsWB5ab7FQAgA1rqAKhqc+Z82OVa20I3bZpuVyqPUAdAVWtszFw6ZywdlUb3KwBABrTUAcD/WudMiqCSaakDAMiAUAcAkAGhDgAgA0IdAEAGhDoAgAwIdQAAGRDqAAAyINQBAGRAqAMAyIBQBwCQAaEOACADQh0AQAaEOgCADAh1AECTzJ0bUVOz8Ei3aV+EOgCADGQV6saNGxef+MQnomfPnjFgwIDYb7/94tlnny13sQCgoqVWudpjaecor6xC3V/+8pcYNWpUPPTQQ3HXXXfF+++/H7vttlvM9Y4DgOXWo8fCY+DAD8+l27XnaR9qSqVSKTL1+uuvFy12Kex9+tOfbvSaefPmFUet2bNnx5AhQ2LWrFnRq1evNiwtALRPaQzd0uSbJFpfyh29e/dukdyRVUvdolIFJauuuupSu2xTZdYeKdABAB+aM2fhMW3ah+fS7drztA/ZttQtWLAg9tlnn3jzzTfj/vvvX+J1WuoAoGnSaKba7tYU5rp3V3PtqaWuU2Qqja17+umnlxroki5duhQHAEAlyzLUfec734lbb701/vrXv8bgwYPLXRwAyEJqmcuzfy8PWYW61JP83e9+N2666aa47777Yp111il3kQAA2kSn3Lpcx48fH7fcckuxVt3UqVOL86mvumvXruUuHgBAq8lqokTNEuZcX3755XHIIYe0+YBFAIClMVFiCTLKpwAAzZL1OnUAANVCqAMAyIBQBwCQAaEOACADQh0AQAaEOgCADAh1AAAZEOoAADIg1AFAOzR3btopaeGRbsOyCHUAABnoVO4CAAAfqm2Vq986V/929+5qi8YJdQDQjvTosfi5gQM/vG2bc5ZE9ysAQAa01AFAOzJnzoddrrUtdNOm6XZl2YQ6AGhHGhszl84ZS8ey6H4FYLlYcgPaFy11ANAOpZY5kyJoDqEOgGax5Aa0T0IdAM1iyQ1on4ypAwDIgJY6AJrFkhvQPgl1ADSLJTegfdL9CgCQAS11ACwXS25A+6KlDgAgA0IdAFQ4u3uQCHUAABkwpg4AKpTdPahPqAOACmV3D+rT/QoAkAEtdQBQoezuQX1CHQBUKLt7UJ/uVwCADGipA4AKZ3cPEi11AAAZEOoAADIg1AEAZECoAwDIgFAHAJABoQ4AIANCHQBABoQ6AIAMCHUAABkQ6gAAMiDUAQBUW6j705/+FN/4xjfi+OOPjwkTJjR47I033oidd965pcsHAEBLhrrx48fHPvvsE1OnTo0HH3wwttxyy7j66qvrHn/vvffiL3/5S1NfDgCAFtSpqReeffbZcc4558SRRx5Z3P/9738fX//61+Pdd9+Nww47rCXLBABAa7XUTZw4Mfbee++6+wceeGD84Q9/iNGjR8cll1wS7cmFF14Ya6+9dqy88sqx7bbbxsMPP1zuIgEAtI+Wul69esW0adNinXXWqTu30047xa233hp77bVXvPrqq9EeXHvttXHMMccUQTMFuvPOOy923333ePbZZ2PAgAHlLh4AQHlb6rbZZpu47bbbFjv/mc98pmixS+GpPUhdxCNHjoxDDz00Nt100yLcdevWLX7961+Xu2gAAOUPdUcffXTRndmYoUOHFsHua1/7WpRTmqzx2GOPxa677lp3rkOHDsX9NLmjMfPmzYvZs2c3OAAAsu1+TS1y6ViS1BWbjnKaPn16zJ8/PwYOHNjgfLq/6BIstcaNGxenn356G5UQAKB1VP3iw2PGjIlZs2bVHZMmTWqlqgYAaActdZWgX79+0bFjx2JCR33p/mqrrdboc7p06VIcAACVLKuWus6dO8dWW20V99xzT925BQsWFPe32267spYNAKA1ZdVSl6TlTA4++ODYeuutixm7aVbu3Llzi9mwAAC5Wu5Q9/zzz8cLL7wQn/70p6Nr165RKpWipqYmyu2LX/xivP766/H973+/2NLsYx/7WNx+++2LTZ4AAMhJTSmlsWaYMWNGEZz+/Oc/FyEu7TSx7rrrFluG9enTJ376059GJUtLmvTu3buYNJEWXAYAqITc0ewxdWm9uk6dOsUrr7xSLOpbKwW91CIGAEAFdL/eeeedcccdd8TgwYMbnN9ggw3iP//5T0uWDQCA1mqpS5MO6rfQ1Zo5c6alQQAAKiXU7bjjjvGb3/ym7n4aV5eWDTnrrLPKvqMEAEC1anb3awpvu+yySzz66KPFXqvHH398PPPMM0VL3d///vfWKSUAsFzmzo3o0WPh7TlzIrp3V5G5anZL3WabbRbPPfdc7LDDDrHvvvsW3bHDhg2LJ554ItZbb73WKSUAAC2/Tl2aenvSSSctz1MBgDZqoav/ddHbWuzy0+yWuvXXXz9OO+20Yn06AKB9Sl2u6ai/9n66XXue/DQ71I0aNSr++Mc/xkYbbRSf+MQn4vzzzy92bgAAoHyWa/HhRx55JCZMmBCf//zn48ILL4whQ4bEbrvt1mBWLABQPmlSRDqmTfvwXLpde578NHubsMY89NBD8a1vfSv+8Y9/xPz586OS2SYMgJyY/Vo9uWO5JkrUevjhh2P8+PFx7bXXFoUaPnz4ChUGAIA26n5Ny5mceuqpseGGG8anPvWp+Pe//x1nnnlmTJs2La655prlLAYA0BrSLNfUJ5e6XNMEiZqahrNgyUezW+o23njjYoJEmjDxpS99KQbWn1YDAEBlhLpnn302Nthgg9YpDQDQoqxXVz2aHeoEOgCoHI2tSVe/k23Fp0tSUaFu1VVXLcbS9evXL/r06RM1qUN+CdIesAAAtMNQd+6550bPnj3rbi8t1AEA7UftmnSpG7a2hS6tV2ebsPy0yDp1ObFOHQA5sl5d/rmj2UuadOzYMV577bXFzs+YMaN4DACACpgosaSGvXnz5kXnzp1bokwAQCutV0e+mhzqfvaznxVf03i6X/7yl9Gj3nSatDXYX//612INOwAA2nGoSxMkalvqLrnkkgZdramFbu211y7OAwDQjkPdSy+9VHzdaaed4sYbbyyWNgEAoELH1N17772tUxIAANpu9uv+++8fZ5555mLnzzrrrBg+fPjylwQAgLYLdWlCxOc///nFzu+xxx7FYwAAVEComzNnTqNLl6y00krFAnoAAFRAqNt8883j2muvXez8NddcE5tuumlLlQsAgNacKHHKKafEsGHD4oUXXoidd965OHfPPffE7373u7juuuua+3IAAJQj1O29995x8803x9ixY+P666+Prl27xhZbbBF33313fOYzn2mJMgEA0Ew1pSXt+1WlWnJjXQCAtsodzR5Tl7z55pvFVmHf+973YubMmcW5xx9/PCZPnrxChQEAoI26X//xj3/ErrvuWqTKl19+Ob7xjW/EqquuWuwy8corr8RvfvOb5SwKAABt1lJ3zDHHxCGHHBITJ06MlVdeue58WrvOOnUAABUS6h555JH45je/udj5NdZYI6ZOndpS5QIAoDVDXZcuXRpdZPi5556L/v37N/flAAAoR6jbZ5994gc/+EG8//77xf2amppiLN0JJ5xQ7AsLAEAFhLqf/vSnxVZhAwYMiHfeeadYm2799dePnj17xhlnnNE6pQQAoGVnv6ZZr3fddVfcf//9xUzYFPA+/vGPFzNiAQAoD4sPL8LiwwBAJeaOJrXU/exnP4vDDz+8WMIk3V6aHj16xEc+8pHYdtttV6hgAAC0cEvdOuusE48++mj07du3uL008+bNi9deey2OPvroOPvss6PSaKkDACoxd7RK92sac3fQQQfF66+/HpVGqAMAqmbv12XZYYcd4uSTT26NlwYAoKVC3T333BN77bVXrLfeesWRbt999911j3ft2jWOOuqo5XlpAADaItRddNFF8bnPfa5Yly4Ft3Sk5sK09+uFF164PGUAAGAFNXtM3eDBg+PEE0+M73znOw3Op0A3duzYmDx5clQyY+oAgKoYU/fmm28WLXWL2m233YoCAQBQIXu/3nTTTYudv+WWW4qxdeXy8ssvx2GHHVYsuZLG9KWxfqeeemq89957ZSsTAEBbafLiw7U23XTTYo/X++67L7bbbrvi3EMPPRR///vf49hjj41ymTBhQixYsCAuvfTSYi/ap59+OkaOHBlz586Nn/zkJ2UrFwBAu1p8uEkvVlMTL774YrQXafHjiy++uFllMqYOAMh2m7CXXnopKlGqoFVXXXWZO2Cko37lAgBUmuVefHj69OnF0V49//zzccEFF8Q3v/nNpV43bty4IiHXHkOGDGmzMgIAlCXUpZmvo0aNin79+sXAgQOLI91Oy5ukx1pDWj4ldesu7Ujj6epLy6qkGbrDhw8vxtUtzZgxY4oWvdpj0qRJrfJ9AAC0i3XqZs6cWUyMSIFpxIgRsckmmxTn//Wvf8X48eOLFq4HHngg+vTp06IFTPvHzpgxY6nXrLvuutG5c+fi9n//+98YOnRofPKTn4wrrrgiOnRoXmOkMXUAQFtpydzR5FA3evToYnuwtB1YaqGrb+rUqcU6dbvsskuce+65US4pcO60006x1VZbxVVXXRUdO3Zs9msIdQBA1osP33zzzcXSIIsGumS11VaLs846q9H169oy0KUWujXXXLMoZ2rh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rnlSfamz5lNv6qyteK+pM++19qtDhw6VHer69+9fHC0hzYpNy5689tprxXImyV133VX8Ett0001b5N8AAGivKmZMXeoOnTlzZvE1LV/y5JNPFufXX3/96NGjR+y2225FePvqV78aZ511VjGO7uSTT45Ro0Y12hIHAJCTigl13//+9+PKK6+su187m/Xee++NoUOHRseOHePWW28tZrumVrvu3bvHwQcfHD/4wQ+a9e+kAHjqqacKguqs1XmvqbO24r2mzrzXquPns+LWqQMAoIK3CQMAYMmEOgCADAh1AAAZEOoAADIg1NXzxz/+Mbbddtvo2rVr9OnTJ/bbb78GlZWWU9lzzz2jW7duxVp4xx13XHzwwQdRzdZee+2oqalpcPz4xz9ucM0//vGP2HHHHWPllVcudp5IS86wcN/hj33sY0Wd1S7Ro86WbJ999ilWXU/vo0GDBhXLF/33v/9Vb0vw8ssvx2GHHRbrrLNO8TttvfXWK2bYvffee+psGdKap9tvv33xu36VVVZp9BqfB4u78MILi8+E9DOaPksX3RCg2v31r3+NvffeO1ZfffXi9/7NN9/c4PE0bzWt9JF+v6Wf2V133TUmTpzYrH9DqPufG264ofiQOPTQQ+Opp56Kv//973HQQQfVVVRaGy8FuvQL8YEHHiiWV7niiiuK/wHVLi0bM2XKlLrju9/9boPtidIagmnrtcceeyzOPvvsOO200+Kyyy6Lanf88ccXP9yLUmeN22mnneL3v/99PPvss8XP6wsvvBAHHHCAeluCCRMmxIIFC+LSSy+NZ555Js4999y45JJL4nvf+546W4b0e3748OHFElmN8XmwuGuvvbbYcjP94fD444/HRz/60dh9992LDQFYaO7cuUW9pPDbmNTg8bOf/az4Of1//+//FUuzpTp89913o8nSkibV7v333y+tscYapV/+8pdLvOZPf/pTqUOHDqWpU6fWnbv44otLvXr1Ks2bN69UrdZaa63Sueeeu8THL7roolKfPn0a1NEJJ5xQ2mijjUrVLL2fNt5449IzzzyTlhQqPfHEE3WPqbOmueWWW0o1NTWl9957T7010VlnnVVaZ511vNea6PLLLy/17t17sfM+Dxa3zTbblEaNGlV3f/78+aXVV1+9NG7cuKZWd1WJiNJNN91Ud3/BggWl1VZbrXT22WfXnXvzzTdLXbp0Kf3ud79r8utqqYso/qqYPHlyse9aWtQ4NX3uscce8fTTT9eF3wcffDA233zzGDhwYN25lKBTq0r6K7iape7Wvn37FnWXWuLqd0mnevv0pz8dnTt3blBvqbXljTfeiGqU9iQeOXJk/Pa3vy26dxalzpYt7S5z9dVXF11kK620knprxsbh9TcN915bPj4PFm/ZTD0xqbuwVvo8TfdTXbFsL730UrETVv06THvQp27s5tShUBcRL774YlEZqVswbS2WdqZIY+rSThXpwyNJlV0/0CW199Nj1erII4+Ma665ptjZ45vf/GaMHTu26Faspd4aSn+gHXLIIXHEEUfE1ltv3WidqrMlO+GEE4ouifRHRBrTdMstt6i3Jnr++efjggsuKH5OvddWjJ/RhqZPn150STf2GVnNn4/NUVtPK1qHWYe6E088cbFB/IseteNOkpNOOin233//2GqrreLyyy8vHr/uuuui2jS13pI0hiKF3y222KIIKj/96U+LD440CaCaNLXOUt289dZbMWbMmHIXueLea0manPTEE0/EnXfeWWwN+LWvfa0IytWkuXWWpJ6Iz33uc8U4sdRKXI2Wp96g0lTM3q/L49hjjy1aRZZm3XXXLQb3J5tuumnd+bQHW3ostQYkq6222mIzeVI3Wu1j1VhvjUlNxan7Nc2822ijjYq6qa2nnOutqXX25z//uWhKX3SPv9RqN2LEiGICTrXU2fK81/r161ccG264YWyyySbFbOqHHnqo2O+5WuqtuXWWZginSSapq3rRCUrVUmcr+nttUdX0edAU6Wcy/ZHV2HupGutjedTWU6qzNASsVrqfVkloqqxDXf/+/YtjWVLLXPqQTeO8dthhh+Lc+++/XwSTNGszSR8aaZp7msmTljNJ7rrrrujVq1eDMFhN9daYtDRHGktRW0ep3lILaKrP2rFPqd5S4Etd3NVWZ2lm049+9KMGH7hpjGGaOZYCcTXV2Yq+12pb2Gtbhaul3ppTZ6mFLgW62t6H9LNZX7XU2Yq+1xZVTZ8HTZHGTKf32D333FO3FFj6+Uz3v/Od75S7eBUhLT2Ugl2qs9oQl8bsp1mwS5qF3agWn9JRoY466qhiBuwdd9xRmjBhQumwww4rDRgwoDRz5szi8Q8++KC02WablXbbbbfSk08+Wbr99ttL/fv3L40ZM6ZUrR544IFi5muqjxdeeKF01VVXFXXyta99rcHsnYEDB5a++tWvlp5++unSNddcU+rWrVvp0ksvLWvZ24uXXnppsdmv6mxxDz30UOmCCy4o6unll18u3XPPPaXtt9++tN5665Xeffdd9daIV199tbT++uuXdtlll+L2lClT6g7vtaX7z3/+U7zXTj/99FKPHj2K2+l46623isd9Hiwu/W5PMzWvuOKK0r/+9a/S4YcfXlpllVUarBhR7d56662691L6vX/OOecUt9P7Lfnxj39c1Fma2f+Pf/yjtO+++xaz1d95550m/xtC3f+kZRGOPfbYIsj17NmztOuuuxYhpL70YbLHHnuUunbtWurXr19xfVoOpVo99thjpW233baY8r/yyiuXNtlkk9LYsWPrPmRrPfXUU6Uddtih+IFPwTm9cVlyqFNni0u/4HbaaafSqquuWryP1l577dIRRxxRhBX1tuTlONJ7q7FDnS3dwQcf3Gi93XvvvXXX+DxYXPrDa8011yx17ty5WOIk/THGh9L7p7H3VXq/1S5rcsoppxQNIen3XPqD7Nlnny01R036T+s1KAIA0Baynv0KAFAthDoAgAwIdQAAGRDqAAAyINQBAGRAqAMAyIBQBwCQAaEOACADQh2QrbXXXjvOO++8Fb5mRV1xxRWxyiqrtOq/ASDUARVn0qRJ8fWvfz1WX331YjPxtdZaK4466qiYMWNGs1/rkUceicMPP7zFytZYSPziF78Yzz33XLSmd999Nw455JDYfPPNo1OnTnUbqwPVQ6gDKsqLL74YW2+9dUycODF+97vfxfPPPx+XXHJJ3HPPPbHddtvFzJkzm/V6/fv3j27dukVr6tq1awwYMKBV/4358+cX/86RRx4Zu+66a6v+W0D7JNQBFWXUqFFF69ydd94Zn/nMZ2LNNdeMPfbYI+6+++6YPHlynHTSSQ2uf+utt+LLX/5ydO/ePdZYY4248MILl9qy9uabb8Y3vvGNIuz16tUrdt5553jqqacaPOcPf/hDfOITn4iVV145+vXrF1/4wheK80OHDo3//Oc/cfTRR0dNTU1xLNr9mlrs0vkJEyY0eM1zzz031ltvvbr7Tz/9dPF99ejRIwYOHBhf/epXY/r06Uusl/T9XXzxxTFy5MhYbbXVlqNmgUon1AEVI7XC3XHHHfHtb3+7aJWqLwWZESNGxLXXXhulUqnu/Nlnnx0f/ehH44knnogTTzyx6Ka96667lvhvDB8+PF577bW47bbb4rHHHouPf/zjscsuu9S1AP7xj38sQtznP//54jVTC+E222xTPHbjjTfG4MGD4wc/+EFMmTKlOBa14YYbFi2NV199dYPz6f5BBx1UFyxTmNxyyy3j0Ucfjdtvvz2mTZsWBx544ArWIJCzTuUuAEBTpS7XFNg22WSTRh9P59944414/fXX67o7P/WpTxVhrjZQ/f3vfy9axT772c8u9vz7778/Hn744SLUdenSpTj3k5/8JG6++ea4/vrri7F3Z5xxRnzpS1+K008/ve55KTQmq666anTs2DF69uy51NayFD5//vOfxw9/+MO61rsUIK+66qrifnosBbqxY8fWPefXv/51DBkypLg2fR8Ai9JSB1Sc+i1xy5LG2S16/9///nej16Zu1jlz5kTfvn2Lbs/a46WXXooXXnihuObJJ58sWu5WRAqFL7/8cjz00EN1rXSpRXDjjTeuK8e9997boAy1j9WWA2BRWuqAirH++usX49FSKKsdx1ZfOt+nT59iPNzySIFu0KBBcd999y32WO2YuEW7fZdHasVL3avjx4+PT37yk8XXb33rWw3Ksffee8eZZ5652HNT+QAao6UOqBipBS11m1500UXxzjvvNHhs6tSpRYtXWj6kdoJCUtsaVv/+krpvU2tZep20JEgKkPWPNCEi2WKLLYpxdEuSJnGkmajLUjv+78EHHyxm9KbWu/rleOaZZ4pJHIuWI02IAGiMUAdUlDTebN68ebH77rvHX//612LNujSRIIW9NLs1jXmrL42hO+uss4qxaGnm63XXXVdMlmhMWgokdc+mNd7S7NrURfrAAw8UM2rThIXk1FNPLZZSSV9Ty+A///nPBi1qKYilcqWZuEubrTps2LBiZm5qodtpp52KNffqz/BNEzPSrN20jl7qck0TRA499NClBsZ//etfRfdweu6sWbOK2+kAqkQJoMK8/PLLpYMPPrg0cODA0korrVQaMmRI6bvf/W5p+vTpDa5ba621Sqeffnpp+PDhpW7dupVWW2210vnnn7/YNeeee27d/dmzZxevtfrqq9e99ogRI0qvvPJK3TU33HBD6WMf+1ipc+fOpX79+pWGDRtW99iDDz5Y2mKLLUpdunRJA/+Kc5dffnmpd+/ei30fBx54YHHNr3/968Uee+6550pf+MIXSqusskqpa9eupY033rg0evTo0oIFC5ZYL+l7Sa+36AFUh5r0n3IHS4BySWPU0izUtDYdQCUzUQKoSm+//XbRNZvWf/vIRz5S7uIArDBj6oCqdNlllxWTE0aPHr3YsicAlUj3KwBABrTUAQBkQKgDAMiAUAcAkAGhDgAgA0IdAEAGhDoAgAwIdQAAGRDqAACi8v1/eKyX7IGTAUEAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "policy = physbo.search.discrete_multi.Policy(test_X=test_X_KYMN, num_objectives=2)\n", "policy.set_seed(seed)\n", "\n", "policy.random_search(max_num_probes=num_random_search, simulator=simu_KYMN, is_disp=False)\n", "time_start = time.time()\n", "res_KYMN_HVPI = policy.bayes_search(max_num_probes=num_bayes_search, simulator=simu_KYMN, score='HVPI', interval=10, is_disp=False)\n", "time_KYMN_HVPI = time.time() - time_start\n", "VID_KYMN_HVPI = res_KYMN_HVPI.pareto.volume_in_dominance(fn_KYMN.reference_min, fn_KYMN.reference_max)\n", "VID_KYMN_HVPI\n", "fig, ax = plt.subplots(figsize=(7, 7))\n", "physbo.search.utility.plot_pareto_front_all(res_KYMN_HVPI, ax=ax, steps_end=num_random_search, marker=\"+\")\n", "physbo.search.utility.plot_pareto_front_all(res_KYMN_HVPI, ax=ax, steps_begin=num_random_search)\n", "ax.set_xlim(-60, 10)\n", "ax.set_ylim(-10, 8)\n", "ax.set_title(\"HVPI\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### ParEGO" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'ParEGO')" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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XNeuY506AACAEAl169atk3vuuSdbee3atWXfvn3+qhcAAAAKM9SVKlXK6yLD27Ztk2rVquX17QAAABCIUHfjjTfKk08+KadPnzaPXS6XGUs3cuRIsy8sAAAAQiDUPf/882arsOrVq8vJkyfN2nSNGzeWChUqyDPPPFM4tQQAAIB/Z7/qrNelS5fK119/bWbCasC7+OKLzYxYAAAABAaLD2fB4sMAACAUc4dPLXUvvvii3H333WYJE72fm/Lly8v5558vbdq0KVDFAAAA4OeWugYNGsj69eulSpUq5n5uUlJSZP/+/TJ8+HCZNGmShBpa6gAAQCjmjkLpftUxd/369ZMDBw5IqCHUAQCAsNn79WzatWsnjz76aGG8NQAAAPwV6pYvXy433HCDNGrUyBx6f9myZRnPlylTRoYNG5aftwYAAEBRhLrp06fLtddea9al0+CmhzYX6t6v06ZNy08dAAAAUEB5HlNXp04dGTVqlNx///0e5Rro4uLiZO/evRLKGFMHAADCYkzd0aNHTUtdVl26dDEVAgAAQIjs/frRRx9lK1+4cKEZWxcou3btkkGDBpklV3RMn471Gzt2rJw6dSpgdQIAACgqPi8+7NasWTOzx+uKFSvk8ssvN2Vr1qyRb775RkaMGCGBsmXLFklLS5NXX33V7EW7efNmGTx4sJw4cUKee+65gNULAAAgqBYf9unNXC759ddfJVjo4sevvPJKnurEmDoAAGDtNmE7d+6UUKQXqHLlymfdAUOPzBcXAAAg1OR78eGDBw+aI1j98ssv8tJLL8k999yT63njx483Cdl9xMTEFFkdAQAAAhLqdObr0KFDpWrVqhIdHW0Ova/Lm+hzhUGXT9Fu3dwOHU+XmS6rojN0+/TpY8bV5Wb06NGmRc99xMfHF8r3AQAAEBTr1B0+fNhMjNDA1L9/f2natKkp/+mnn2T27NmmhWvVqlVSqVIlv1ZQ9489dOhQruc0bNhQSpYsae7//vvv0qFDB7nssstk1qxZUqxY3hojGVMHAACKij9zh8+hLjY21mwPptuBaQtdZvv27TPr1F199dUyefJkCRQNnB07dpRWrVrJO++8IxEREXl+D0IdAACwevHhBQsWmKVBsgY6VaNGDZk4caLX9euKMtBpC13dunVNPbWFT8OmHgAAALbzafarSkhIkPPPPz/H5y+44IKABqil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XxkaguPj4+my5rrxWQtC/IxyzfisBS/tIaxbt65Urly5wO8V0FA3YsQIGThwYK7nNGzY0Kf30gkSa9eu9ShLTEzMeC4npUqVMkdWGugYU5c3er24ZnnHdeOaFRU+a1wzPmvBq1ixYqEd6qpVq2YOf9BZsbrsyf79+81yJmrp0qXml1izZs388jUAAACCVciMqdPu0MOHD5tbXb5k06ZNprxx48ZSvnx56dKliwlvt912m0ycONGMo3v00Udl6NChXlviAAAAbBIyoe7xxx+Xt956K+OxezbrF198IR06dJCIiAhZtGiRme2qrXblypWTAQMGyJNPPpmnr6MBcOzYsQRBrlmh47PGNSsqfNa4ZnzWwuPnM+TWqQMAAEAIbxMGAACAnBHqAAAALECoAwAAsAChDgAAwAKEukw++eQTadOmjZQpU0YqVaokPXv29LhYupzK9ddfL2XLljVr4T388MPy119/STirX7++uFwuj+PZZ5/1OOf777+X9u3bS+nSpc3OE7rkDNL3Hb7ooovMNXMv0cM1y9mNN95oVl3Xz1HNmjXN8kW///471y0Hu3btkkGDBkmDBg3M77RGjRqZGXanTp3imp2Frnnatm1b87u+YsWKXs/h70F206ZNM38T9GdU/5Zm3RAg3H311VfSvXt3qVWrlvm9v2DBAo/ndd6qrvShv9/0Z7Zz586yffv2PH0NQt3/fPjhh+aPxB133CHfffedfPPNN9KvX7+MC6Vr42mg01+Iq1atMsurzJo1y/wPCHe6bExCQkLG8cADD3hsT6RrCOrWaxs2bJBJkybJE088Ia+99pqEu0ceecT8cGfFNfOuY8eO8v7778vWrVvNz+uOHTukd+/eXLccbNmyRdLS0uTVV1+VH3/8USZPniwzZsyQf/7zn1yzs9Df83369DFLZHnD34Ps5s6da7bc1H84fPvtt3LhhRdK165dzYYASHfixAlzXTT8eqMNHi+++KL5Of2///s/szSbXsM///xTfKZLmoS706dPO7Vr13Zef/31HM/573//6xQrVszZt29fRtkrr7ziREZGOikpKU64qlevnjN58uQcn58+fbpTqVIlj2s0cuRI57zzznPCmX6emjRp4vz444+6pJCzcePGjOe4Zr5ZuHCh43K5nFOnTnHdfDRx4kSnQYMGfNZ8NHPmTCcqKipbOX8Psrv00kud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muPX6NOnj+zfv18WL14sGzZskIsvvliuvvrqjBbATz75xIS46667zrynthBeeuml5rn58+dLnTp15Mknn5SEhARzZHXuueealsZ3333Xo1wf9+vXLyNYaphs2bKlrF+/Xj799FNJTEyUvn37FvAKArBZ8UBXAAB8pV2uGtiaNm3q9XktP3LkiBw4cCCju/OKK64wYc4dqL755hvTKnbNNddke/3XX38ta9euNaGuVKlSpuy5556TBQsWyLx588zYu2eeeUZuvfVWGTduXMbrNDSqypUrS0REhFSoUCHX1jINny+//LI89dRTGa13GiDfeecd81if00AXFxeX8Zo333xTYmJizLn6fQBAVrTUAQg5mVvizkbH2WV9/PPPP3s9V7tZjx8/LlWqVDHdnu5j586dsmPHDnPOpk2bTMtdQWgo3LVrl6xZsyajlU5bBJs0aZJRjy+++MKjDu7n3PUAgKxoqQMQMho3bmzGo2koc49jy0zLK1WqZMbD5YcGupo1a8qKFSuyPeceE5e12zc/tBVPu1dnz54tl112mbm99957PerRvXt3mTBhQrbXav0AwBta6gCEDG1B027T6dOny8mTJz2e27dvn2nx0uVD3BMUlLs1LPPjnLpvtbVM30eXBNEAmfnQCRGqRYsWZhxdTnQSh85EPRv3+L/Vq1ebGb3aepe5Hj/++KOZxJG1HjohAgC8IdQBCCk63iwlJUW6du0qX331lVmzTicSaNjT2a065i0zHUM3ceJEMxZNZ75+8MEHZrKEN7oUiHbP6hpvOrtWu0hXrVplZtTqhAU1duxYs5SK3mrL4A8//ODRoqZBTOulM3Fzm63aq1cvMzNXW+g6duxo1tzLPMNXJ2borF1dR0+7XHWCyB133JFrYPzpp59M97C+NikpydzXA0CYcAAgxOzatcsZMGCAEx0d7ZQoUcKJiYlxHnjgAefgwYMe59WrV88ZN26c06dPH6ds2bJOjRo1nKlTp2Y7Z/LkyRmPk5OTzXvVqlUr47379+/v7N69O+OcDz/80LnooouckiVLOlWrVnV69eqV8dzq1audFi1aOKVKldKBf6Zs5syZTlRUVLbvo2/fvuacN998M9tz27Ztc2666SanYsWKTpkyZZwmTZo4sbGxTlpaWo7XRb8Xfb+sB4Dw4NL/BDpYAkCg6Bg1nYWqa9MBQChjogSAsPTHH3+Yrlld/+38888PdHUAoMAYUwcgLL322mtmckJsbGy2ZU8AIBTR/QoAAGABWuoAAAAsQKgDAACwAKEOAADAAoQ6AAAACxDqAAAALECoAwAAsAChDgAAwAKEOgAAAAl9/w+qO/SY6kygbAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "policy = physbo.search.discrete_unified.Policy(test_X=test_X_KYMN, num_objectives=2)\n", "policy.set_seed(seed)\n", "\n", "unify_method = physbo.search.unify.ParEGO(num_objectives=2)\n", "\n", "policy.random_search(max_num_probes=num_random_search, simulator=simu_KYMN, is_disp=False)\n", "time_start = time.time()\n", "res_KYMN_ParEGO = policy.bayes_search(max_num_probes=num_bayes_search, simulator=simu_KYMN, unify_method=unify_method, score='EI', interval=10, is_disp=False)\n", "time_KYMN_ParEGO = time.time() - time_start\n", "VID_KYMN_ParEGO = res_KYMN_ParEGO.pareto.volume_in_dominance(fn_KYMN.reference_min, fn_KYMN.reference_max)\n", "VID_KYMN_ParEGO\n", "fig, ax = plt.subplots(figsize=(7, 7))\n", "physbo.search.utility.plot_pareto_front_all(res_KYMN_ParEGO, ax=ax, steps_end=num_random_search, marker=\"+\")\n", "physbo.search.utility.plot_pareto_front_all(res_KYMN_ParEGO, ax=ax, steps_begin=num_random_search)\n", "ax.set_xlim(-60, 10)\n", "ax.set_ylim(-10, 8)\n", "ax.set_title(\"ParEGO\")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### NDS" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'NDS')" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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AGqhvFxk4UKR4mKRjAyRPn1EUlK4hQASj1AHAFGaPVskL09k3brdbZ07i0yfLjJwILcRQGIx/AoAUQa6QYNCA50qKvK36+sA4JpQ99///lcuvvhiueGGG2TFihUhr/34449y0kknxfr6ACAphly1hy7S3pqBtvx8/3kAkPShbubMmXLmmWfK+vXrZcmSJXLYYYfJs88+W/H6zp075d13343XdQJAwugcuvAeuvBgV1joPw8Akn5O3ZQpU+Tee++Va665xjz/z3/+IxdddJH8+uuvMmLEiHheIwAklBZFxPI8AEhoT93XX38tZ5xxRsXzc889V15++WXJz8+Xhx9+WJLJAw88INnZ2dKsWTM56qij5IMPPkj0JQFwMa1yjeV5AJDQUJeamiobNmwIacvNzZVXXnlFrr/+epkxY4Ykg1mzZsl1110n48aNk08++UQOOeQQ6d+/v2zcuDHRlwbApXTZEq1y9fkiv67tWVn+8wAg6UPdkUceKa+99lql9hNPPNH02E2bNk2SgQ4RX3LJJXLhhRdKz549TS9iixYt5PHHH0/0pQFwKV2HTpctUeHBLvBc/wpkvToArgh11157rRnOjCQnJ8cEuwsuuEASSYs1Pv74Y+nXr19FW6NGjcxzLe6IpKysTEpLS0MOAAin69AVFIhkZoa2aw+etrNOHQDXFEpoj5weVdGhWD0SafPmzVJeXi7p6ekh7fo8fAmWgEmTJsn48eMb6AoBuJkGtwED2FECQHLy/I4SY8aMMXPwArSnLksnxwBABDrEmpPDrQGQfKwKde3bt5eUlJRKBR36vGPHjhHf07RpU3MAAAC4mVXbhDVp0kQOP/xwefvttyvadu3aZZ4fc8wxCb02AACAeLKqp07pUOqwYcOkd+/epmJXq3J37NhhqmEBAABsVedQ980338i3334rJ5xwgjRv3lwcxxFfVYs4NaC//vWvsmnTJrnlllvMlmaHHnqovP7665WKJwAAAGziczSN1cKWLVtMcHrnnXdMiNOdJrp27Wq2DGvTpo3cc8894mZaKJGWliYlJSVmwWUAAAA35I5az6nT9eoaN24s33//vVnUN0CDnvaIAQAAwAXDr2+++aa88cYb0llX3Ayy7777ynfffRfLawMAAEC8euq06CC4hy5g69atLA0CAADgllDXp08fefrppyue67w6XTZk8uTJCd9RAgAAwKtqPfyq4a1v377y0Ucfmb1Wb7jhBlm+fLnpqVu0aFF8rhIAANTJjh0irVr5H2/fLtKyJTfSVrXuqevVq5esWrVKjj/+eBkwYIAZjh04cKB8+umn0q1bt/hcJQAAAGK/Tp2W3o4dO7YubwUAAA3UQxf8NfwxPXb2qXVPXffu3eXWW28169MBAIDkpEOuegSvva+PA+2wT61D3ciRI+XVV1+V/fffX4444giZPn262bkBAAAAiVOnxYc//PBDWbFihZx66qnywAMPSFZWlpx88skhVbEAACBxtChCjw0bdrfp40A77FPrbcIiWbp0qVxxxRXyxRdfSHl5ubgZ24QBAGxC9at3ckedCiUCPvjgA5k5c6bMmjXLXNTgwYPrdTEAAABooOFXXc5k3Lhxst9++8lxxx0nX331ldx1112yYcMGef755+t4GQAAIB60ylXH5HTIVQskfL7QKljYo9Y9dT169DAFElow8be//U3Sg8tqAAAA4I5Qt3LlStl3333jczUAACCmWK/OO2od6gh0AAC4R6Q16YIH2epfLglXhbq2bduauXTt27eXNm3aiE8H5Kuge8ACAAAgCUPd1KlTpXXr1hWPqwt1AAAgeQTWpNNh2EAPna5XxzZh9onJOnU2YZ06AICNWK/O/txR6yVNUlJSZOPGjZXat2zZYl4DAACACwolqurYKysrkyZNmsTimgAAQJzWq4O9og519913n/mq8+n++c9/SqugchrdGuy9994za9gBAAAgiUOdFkgEeuoefvjhkKFW7aHLzs427QAAAEjiULdmzRrzNTc3V2bPnm2WNgEAAIBL59TNnz8/PlcCAACAhqt+Peecc+Suu+6q1D558mQZPHhw3a8EAAAADRfqtCDi1FNPrdR+yimnmNcAAADgglC3ffv2iEuX7LHHHmYBPQAAALgg1B100EEya9asSu3PP/+89OzZM1bXBQAAgHgWStx8880ycOBA+fbbb+Wkk04ybW+//bY899xz8sILL9T22wEAACARoe6MM86QuXPnysSJE6WgoECaN28uBx98sLz11lty4oknxuKaAAAAUEs+p6p9vzwqlhvrAgAANFTuqPWcOrVt2zazVdg//vEP2bp1q2n75JNPpKioqF4XAwAAgAYafv3iiy+kX79+JlWuXbtWLr74Ymnbtq3ZZeL777+Xp59+uo6XAgAA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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "policy = physbo.search.discrete_unified.Policy(test_X=test_X_KYMN, num_objectives=2)\n", "policy.set_seed(seed)\n", "\n", "unify_method = physbo.search.unify.NDS(num_objectives=2)\n", "\n", "policy.random_search(max_num_probes=num_random_search, simulator=simu_KYMN, is_disp=False)\n", "time_start = time.time()\n", "res_KYMN_NDS = policy.bayes_search(max_num_probes=num_bayes_search, simulator=simu_KYMN, unify_method=unify_method, score='EI', interval=10, is_disp=False)\n", "time_KYMN_NDS = time.time() - time_start\n", "VID_KYMN_NDS = res_KYMN_NDS.pareto.volume_in_dominance(fn_KYMN.reference_min, fn_KYMN.reference_max)\n", "VID_KYMN_NDS\n", "fig, ax = plt.subplots(figsize=(7, 7))\n", "physbo.search.utility.plot_pareto_front_all(res_KYMN_NDS, ax=ax, steps_end=num_random_search, marker=\"+\")\n", "physbo.search.utility.plot_pareto_front_all(res_KYMN_NDS, ax=ax, steps_begin=num_random_search)\n", "ax.set_xlim(-60, 10)\n", "ax.set_ylim(-10, 8)\n", "ax.set_title(\"NDS\")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Comparison of Results" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
AlgorithmComputation TimeVolume of Dominance Region
0NDS1.740349970.781427
1ParEGO1.728085975.909589
2HVPI3.897053932.139351
\n", "
" ], "text/plain": [ " Algorithm Computation Time Volume of Dominance Region\n", "0 NDS 1.740349 970.781427\n", "1 ParEGO 1.728085 975.909589\n", "2 HVPI 3.897053 932.139351" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.DataFrame({\n", " \"Algorithm\": [\"NDS\", \"ParEGO\", \"HVPI\"],\n", " \"Computation Time\": [time_KYMN_NDS, time_KYMN_ParEGO, time_KYMN_HVPI],\n", " \"Volume of Dominance Region\": [VID_KYMN_NDS, VID_KYMN_ParEGO, VID_KYMN_HVPI]\n", "})\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this case, ParEGO works better than NDS and HVPI." ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "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.11.14" } }, "nbformat": 4, "nbformat_minor": 4 }