{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 多目的最適化の高速計算\n", "\n", "[前回のチュートリアル](./tutorial_multi.ipynb) では、各目的関数を独立にガウス過程回帰し、パレート超体積を直接最大化していました。この方法は、目的関数の数が多い場合に計算時間が膨大になります。\n", "\n", "本チュートリアルでは、複数の目的関数を一つの目的関数に統合し、それをベイズ最適化することで、多目的最適化を高速に行う方法を学びます。\n", "\n", "## 多目的最適化の統合\n", "\n", "$i$ 番目のデータ点(特徴量)を $\\vec{x}_i$ とし、その点での目的関数の値を $\\vec{y}_i = (y_{i,1}, y_{i,2}, \\dots, y_{i,p})$ とします。\n", "$\\vec{y}_i$ から新たな目的関数 $z_i$ を作り、 $\\vec{x}_i$ から $z_i$ への関数 $z_i = g(\\vec{x}_i)$ をガウス過程回帰でモデリングし、ベイズ最適化を行います。\n", "\n", "現在の PHYSBO では、 $\\vec{y}_i$ から $z_i$ を作る方法として、非優越ソート法とParEGO法が提供されています。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 非優越ソート法\n", "\n", "#### 定義\n", "\n", "非優越ソート法 (Non-dominated Sorting; NDS) は、学習データ $\\vec{y}_i$ について非優越ソートによるランク付けを行い、そのランクに基づいた目的関数を新たに作る手法です。ランクは以下のように再帰的に定義されます。\n", "\n", "1. 学習データ全体のパレート解となる点のランクは $r_i = 1$ である。\n", "2. 学習データからランク $r_i = 1$ となる点を除いた残りのデータのパレート解となる点のランクは $r_i = 2$ である。\n", "3. 同様に、学習データからランク $r_i = 1,2,\\dots,k-1$ となる点を除いた残りのデータのパレート解となる点のランクは $r_i = k$ である。\n", "4. 最大ランク $r_\\text{max}$ に達するまで、同様の操作を繰り返す。残った点は $r_i = \\infty$ となる。\n", "\n", "ランク $r_i$ に基づいて、新たな目的関数 $z_i$ を以下のように定義し、最大化します。\n", "\n", "$$\n", "z_i = \\frac{1}{r_i}\n", "$$\n", "\n", "#### PHYSBOでの使い方\n", "\n", "PHYSBOでは、 `physbo.search.unify.NDS` クラスとして NDS 法を実装しています。\n", "\n", "``` python\n", "unify_method = physbo.search.unify.NDS(rank_max=10)\n", "```\n", "\n", "`rank_max` はランクの最大値です。 これ以上のランクを持つ点については、 $z_i = 0$ として処理されます。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### ParEGO 法\n", "\n", "#### 定義\n", "\n", "ParEGO法は、目的関数の値について重み付き和と重み付き最大値をとることで、多目的最適化を単目的最適化に帰着させる方法です。\n", "目的関数の重みを $\\vec{w} = (w_1, w_2, \\dots, w_p)$ とし、和と最大値の重みをそれぞれ $\\rho_\\text{sum}$ と $\\rho_\\text{max}$ とすると、新たな目的関数は\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", "となります。\n", "\n", "#### PHYSBO での使い方\n", "\n", "PHYSBOでは、 `physbo.search.unify.ParEGO` クラスとして ParEGO 法を実装しています。\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` と `weight_max` はそれぞれ $\\rho_\\text{sum}$ と $\\rho_\\text{max}$ に対応します。\n", "`weights` には重み $\\vec{w}$ を指定します。\n", "\n", "- 重み $\\vec{w}$ は $\\sum_{j} w_j = 1$ として自動的に規格化されます。\n", "- `weights = None` とすると、ベイズ最適化のステップごとに重みを乱数で生成します。\n", " - `weights_discrete` に整数 $s>0$ を指定すると、それぞれの重みが $w_j = \\frac{a_j}{s}$ となるように生成されます。\n", " - ここで、 $a_j$ は $0, 1, \\dots, s$ で、なおかつ $\\sum_{j} a_j = s$ です。\n", " - $s=0$ の場合は、 $[0,1)$ の範囲で一様ランダムに重みを生成し、和が1になるように規格化されます。\n", "\n", "また、 $y_{i,j}$ は目的関数 $j$ ごとに、学習データの最小値と最大値を用いて $[-1, 0]$ の範囲に正規化されます。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## チュートリアル\n", "\n", "### 前準備" ] }, { "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": [ "#### テスト関数\n", "\n", "本チュートリアルでは引き続き、多目的最適化のベンチマーク関数である VLMOP2 を利用します。\n", "なお、PHYSBO では `physbo.test_functions.multi_objective` に、VLMOP2を含めたいくつかの多目的最適化のベンチマーク関数が用意されています。" ] }, { "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": [ "#### 探索候補データの準備\n", "\n", "`sim_fn` は探索空間の最小値と最大値を `min_X` と `max_X` に持ちます。\n", "これらを用いて、 `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", "比較対象として、HVPIを用いたベイズ最適化を行います。" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4.317495107650757" ] }, "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": [ "### ベイズ最適化\n", "\n", "`Policy` クラスは `physbo.search.discrete_unified.Policy` を利用します。\n", "\n", "他の `Policy` と同じく、 `random_search` などで初期データを作成し、 `bayes_search` メソッドでベイズ最適化を行います。\n", "他の `Policy` との違いは以下の通りです。\n", "\n", "#### 目的関数の単一化\n", "\n", "単一化に使うアルゴリズムは `bayes_search` の `unify_method` 引数で指定します。\n", "PHYSBO では `physbo.search.unify.ParEGO` と `physbo.search.unify.NDS` が用意されています。\n", "\n", "#### 獲得関数\n", "\n", "獲得関数は単目的最適化のものと同じです。\n", "\n", "- PI (Probability of Improvement)\n", "- EI (Expected Improvement)\n", "- TS (Thompson Sampling)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 非優越ソート" ] }, { "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.830704927444458" ] }, "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": [ "#### パレート解のプロット" ] }, { "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": [ "#### 劣解領域体積" ] }, { "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.7820510864257812" ] }, "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": [ "#### パレート解のプロット" ] }, { "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": [ "#### 劣解領域体積" ] }, { "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": [ "### 比較" ] }, { "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", "
アルゴリズム計算時間劣解領域体積
0NDS1.8307050.309234
1ParEGO1.7820510.180046
2HVPI4.3174950.328550
\n", "
" ], "text/plain": [ " アルゴリズム 計算時間 劣解領域体積\n", "0 NDS 1.830705 0.309234\n", "1 ParEGO 1.782051 0.180046\n", "2 HVPI 4.317495 0.328550" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# make table\n", "df = pd.DataFrame({\n", " \"アルゴリズム\": [\"NDS\", \"ParEGO\", \"HVPI\"],\n", " \"計算時間\": [time_NDS, time_ParEGO, time_HVPI],\n", " \"劣解領域体積\": [VID_NDS, VID_ParEGO, VID_HVPI]\n", "})\n", "df\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "NDS は HVPI と比較しても遜色ない結果(劣解領域体積)を、より短い計算時間で得ることができています。\n", "\n", "一方のParEGOは、計算時間こそ短いですが、劣解領域体積が小さくなっています。\n", "\n", "最適化問題によって、どのアルゴリズムがよい結果を出すかは変わります。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 別のベンチマーク関数\n", "\n", "Kita-Yabumoto-Mori-Nishikawa 関数を用いたベイズ最適化を行います。\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", "の2つの目的関数を最大化する問題です。\n", "\n", "また、 $x$ と $y$ には\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", "\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": "iVBORw0KGgoAAAANSUhEUgAAAnUAAAJwCAYAAADvOpfnAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+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/fu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Szz66KPFXqvHH398PPPMM0VL3d///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+65US4pcO60006x1VZbxVVXXRUdO3Zs9msIdQBA1osP33zzzcXSIIsGumS11VaLs846q9H169oy0KUWujXXXLMoZ2rhS2EzHQAAuWvS7NdkypQp8ZGPfGSJj2+22WZlDVB33XVXMTkiHWkrs/qauRMaAEDFaXJLXZoQkXZtWNqyJ8taPqQ1HXLIIUV4a+wAAMhdk0Pd7rvvHieddFKj226ldd5OOeWURveEBQCg9TV5osSrr74aW2+9dXTp0qVY1mTjjTcuWsH+/e9/x0UXXVQEu0cffbTi13kzUQIAyHZHiSSNU3vwwQfj29/+drG2W20WTOvEffazn42f//znFR/oAAAqVZNDXe0esLfddlu88cYbMXHixOLc+uuvX9axdAAANDPU1UoLDG+zzTbqDwCg0vd+BQCg/RDqAAAyINQBAGRAqAMAyIBQBwCQAaEOACADQh0AQAaEOgCADAh1AAAZEOoAADIg1AEAZECoAwDIgFAHAJABoQ4AIANCHQBABoQ6AIAMCHUAABkQ6gAAMiDUAQBkQKgDAMiAUAcAkAGhDgAgA0IdAEAGhDoAgAwIdQAAGRDqAAAyINQBAGRAqAMAyIBQBwCQAaEOACADQh0AQAaEOgCADAh1AAAZEOoAADIg1AEAZECoAwDIgFAHAJABoQ4AIANCHQBABoQ6AIAMCHUAABkQ6gAAMiDUAQBkQKgDAMhAlqFu3rx58bGPfSxqamriySefLHdxAABaXZah7vjjj4/VV1+93MUAAGgz2YW62267Le688874yU9+Uu6iAAC0mU6RkWnTpsXIkSPj5ptvjm7dujW5qzYdtWbPnt2KJQQAaB3ZtNSVSqU45JBD4ogjjoitt966yc8bN25c9O7du+4YMmRIq5YTAKAqQ92JJ55YTHhY2jFhwoS44IIL4q233ooxY8Y06/XT9bNmzao7Jk2a1GrfCwBAa6kppSauduz111+PGTNmLPWaddddNw488MD4wx/+UIS8WvPnz4+OHTvGiBEj4sorr2zSv5e6X1OLXQp4vXr1WuHyAwC0Re5o96GuqV555ZUG4+H++9//xu677x7XX399bLvttjF48OAmvY5QBwC0lZbMHdlMlFhzzTUb3O/Ro0fxdb311mtyoAOoFHPnpt9zC2/PmRPRvXu5SwSUW7sfUwcAQBW11C1q7bXXLmbEAuTWQlf/66K3tdhB9co21AHkqLbLtb6BAz+87W9ZqF66XwEAMqClDqCCpEkRtV2utS1006bpdgWEOoCK0tiYuXTOWDpA9ysAQAZ0vwJUoNQyZ1IEUJ+WOgCADAh1AAAZEOoAADIg1AEAZECoAwDIgFAHAJABoQ4AIANCHQBABoQ6AIAMCHUAABkQ6gAAMiDUAQBkQKgDAMiAUAcAkAGhDgAgA0IdAEAGhDoAgAwIdQAAGRDqAAAyINQBAGRAqAMAyIBQBwCQAaEOACADQh0AQAaEOgCADAh1AAAZEOoAADIg1AEAZECoAwDIgFAHAJABoQ4AIANCHQBABoQ6AIAMCHUAABkQ6gAAMiDUAQBkQKgDAMiAUAcAkAGhDgAgA0IdAEAGhDoAgAwIdQAAGRDqAAAykF2o++Mf/xjbbrttdO3aNfr06RP77bdfuYsEANDqOkVGbrjhhhg5cmSMHTs2dt555/jggw/i6aefLnexAABaXTahLgW4o446Ks4+++w47LDD6s5vuummZS0XAEBbyKb79fHHH4/JkydHhw4dYsstt4xBgwbFHnvsscyWunnz5sXs2bMbHAAAlSabUPfiiy8WX0877bQ4+eST49Zbby3G1A0dOjRmzpy5xOeNGzcuevfuXXcMGTKkDUsNAFAloe7EE0+MmpqapR4TJkyIBQsWFNefdNJJsf/++8dWW20Vl19+efH4ddddt8TXHzNmTMyaNavumDRpUht+dwAAVTKm7thjj41DDjlkqdesu+66MWXKlMXG0HXp0qV47JVXXlnic9M16QAAqGTtPtT179+/OJYltcylcPbss8/GDjvsUJx7//334+WXX4611lqrDUoKAFA+7T7UNVWvXr3iiCOOiFNPPbUYF5eCXJoJmwwfPrzcxQMAaFXZhLokhbhOnTrFV7/61XjnnXeKRYj//Oc/FxMmAAByVlMqlUrlLkR7kpY0SbNg06SJ1PoHAFAJuaPdz34FAGDZhDoAgAwIdQAAGRDqAAAyINQBAGRAqAMAyIBQBwCQAaEOACADQh0AQAaEOgCADAh1AAAZEOoAADIg1AEAZECoAwDIgFAHAJABoQ4AIANCHQBABoQ6AIAMCHUAABkQ6gAAMiDUAQBkQKgDAMiAUAcAkAGhDgAgA0IdAEAGhDoAgAwIdQAAGRDqAAAyINQBAGRAqAMAyIBQBwCQAaEOACADQh0AQAaEOgCADAh1AG1o7tyImpqFR7oN0FKEOgCADHQqdwEAqkFtq1z91rn6t7t3b/syAXkR6irc/PkRf/tbxJQpEYMGRey4Y0THjuUuFbCoHj0Wr5OBAz+8XSqpM2DFCHUV7MYbI446KuLVVz88N3hwxPnnRwwbVs6SAQBtzZi6Cg50BxzQMNAlkycvPJ8eB9qPOXMWHtOmfXgu3a49D7CihLoK7XJNLXSNddfUnhs9euF1QPuQxszVHks7B7C8hLoKlMbQLdpCt2iwmzRp4XUAQHUwpq4C3XJL065LkyeA9iW1ypkUAbQGLXUVJnWpXnVV065Ns2EBgOog1FWY1KU6ffqyr+vff+HyJgBAdRDqMu16HTHCenUAUE2Euky7Xvfdt7VLAwC0J0JdBdH1CgAsiVBXQZo6m1XXKwBUn6xC3XPPPRf77rtv9OvXL3r16hU77LBD3HvvvZGLiRObdp2uVwCoPlmFur322is++OCD+POf/xyPPfZYfPSjHy3OTZ06NXIYT3fZZcu+Lu39atYrAFSfbELd9OnTY+LEiXHiiSfGFltsERtssEH8+Mc/jrfffjuefvrpyGE8XdrXdVlGjjTrFQCqUTahrm/fvrHRRhvFb37zm5g7d27RYnfppZfGgAEDYquttlri8+bNmxezZ89ucFTyeLoNNmjtkgAA7VE224TV1NTE3XffHfvtt1/07NkzOnToUAS622+/Pfr06bPE540bNy5OP/30aO8GDGjZ6wCAvLT7lrrUnZoC29KOCRMmRKlUilGjRhVB7m9/+1s8/PDDRcDbe++9Y8pSmrnGjBkTs2bNqjsmTZrUpt8fAEBLqCmlNNSOvf766zFjxoylXrPuuusWQW633XaLN954o5j5WiuNrTvssMOKcNgUqfu1d+/eRcCr/zrldvTREeedt+zrxo+P+PKX26JEAMCKasnc0e67X/v3718cy5ImRCSp27W+dH/BggVRLTtJDBrU2qUBANqjdt/92lTbbbddMXbu4IMPjqeeeqpYs+64446Ll156Kfbcc8+oZHaSAACqJtSlBYfTpIg5c+bEzjvvHFtvvXXcf//9ccsttxTr1VUyO0kAABXf/docKcjdcccdkRs7SQAAVdNSlys7SQAATSHUtXN2kgAAmkKoa+duuaVp19lJAgCqm1DXjlnKBABoKqGuHbOUCQDQVEJdBl2vI0ZEdOzY2qUBANozoS6Drtd9923t0gAA7Z1Q107pegUAmkOoa6d0vQIAzSHUtUO6XgGA5hLq2iFdrwBAcwl17dCUKU27zqxXAKCWUNcOTZzYtOvMegUAagl17XA83WWXLfu6wYMjdtyxLUoEAFQCoa4djqebPHnZ140cacFhAOBDQl2FjqfbYIPWLgkAUEmEunZmwICWvQ4AqA5CHQBABoS6dubWW5t23WuvtXZJAIBKItRV6E4Sgwa1dmkAgEoi1LUjdpIAAJaXUNeO2EkCAFheQl07YicJAGB5CXXthJ0kAIAVIdS1E3aSAABWhFDXTtxyS9Ous5MEANAYoa4dsJQJALCihLp2wFImAMCKEuoqqOt1xIiIjh1buzQAQCUS6iqo63XffVu7NABApRLqykzXKwDQEoS6MtP1CgC0BKGujHS9AgAtRagrI12vAEBLEerKaMqUpl1n1isAsCxCXRkNGtS068x6BQCWRagro+23X/a6c+nxdB0AwNIIdWX0wAMLJ0ssTXo8XQcAsDRCXQWMqWvqdQBA9RLqKmBMXVOvAwCql1BXRjvuGDF4cERNTeOPp/NDhiy8DgBgaYS6MkqTIM4/f+HtRYNd7f3zzlv2ZAoAAKGuzIYNi7j++og11mh4PrXgpfPpcQCAZem0zCtodSm4pbXo0g4TaVJEGkOXuly10AEATSXUtRMpwA0dWu5SAACVSvcrAEAGhDoAgAwIdQAAGRDqAAAyUDGh7owzzojtt98+unXrFqusskqj17zyyiux5557FtcMGDAgjjvuuPjggw/avKwAAG2tYma/vvfeezF8+PDYbrvt4le/+tVij8+fP78IdKuttlo88MADMWXKlPja174WK620UowdO7YsZQYAaCs1pVKpFBXkiiuuiNGjR8ebb77Z4Pxtt90We+21V/z3v/+NgQMHFucuueSSOOGEE+L111+Pzp07N+n1Z8+eHb17945Zs2ZFr169WuV7AABo6dxRMS11y/Lggw/G5ptvXhfokt133z2+9a1vxTPPPBNbbrllo8+bN29ecdRKlVpbyQAArak2b7REG1s2oW7q1KkNAl1Sez89tiTjxo2L008/fbHzQ4YMaYVSAgAsbsaMGUWLXcWGuhNPPDHOPPPMpV7z73//OzbeeONWK8OYMWPimGOOqbufunXXWmutYtLFilZuNf2VkULwpEmTdFmrN++1dsjPqDrzXmu/Ug/hmmuuGauuuuoKv1ZZQ92xxx4bhxxyyFKvWXfddZv0WmmCxMMPP9zg3LRp0+oeW5IuXboUx6JSoDOmrnlSfamz5lNv6qyteK+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+44IKABqilS5eayRF66FZmmeVxJzQAAICQ43NLnU6I0F0bclv25GzLhxSmgQMHmvDm7UBgpaaKrFgh8t576bf6GAAABCjUde3aVcaMGeN12y1d5+2xxx7zuicswtv8+SL164t07CjSr1/6rT7WcgAA4D8+T5TYs2ePtG7dWkqVKmWWNWnSpIlpBfv5559l+vTpJtitX78+5Nd5Y6KE/2hw691bu789y12u9Nt580R69fLjFwQAIMQEZParu4v1vvvukyVLlmR0a+o6cddcc428/PLLZs/VUEeo8w/tYtUWuT17vD+vwU6HPupmJfmYpAwAgBWSi3qbsMx7wC5evFiOHDki27dvN2Ua5AI5lg7BaeXKnAOd0n8T6DrPel6HDkVZMwAA7JSnUOemCwxfeuml/q8NrJGQ4N/zAABAIe39CuSmZk3/ngcAAHJHqEOhaN8+fcyce1JEVlquc2r0PAAAUHCEOhQKnfwwdWr6/azBzv14yhQmSQAA4C+EOhQaXa5Ely2pXduzXFvwWM4EAIAgmCgB5CXY9eiRPstVJ0XoGDrtcmUZEwAA/ItQh0KnAY5lSwAAKFx0vwIAAFiAUAcAAGABQh0AAIAFCHUAAAAWINQBAABYgFAHAABgAUIdAACABQh1AAAAFiDUAQAAWIBQBwAAYAFCHQAAgAUIdQAAABYg1AEAAFiAUAcAAGABQh0AAIAFCHUAAAAWINQBAABYgFAHAABgAUIdAACABQh1AAAAFiDUAQAAWIBQBwAAYAFCHQAAgAUIdQAAABYg1AEAAFiAUAcAAGABQh0AAIAFCHUAAAAWINQBAABYgFAHAABgAUIdAACABQh1AAAAFiDUAQAAWIBQBwAAYAFCHQAAgAUIdQAAABYg1AEAAFiAUAcAAGABK0NdSkqKXHTRReJyuWTTpk2Brg4AAEChszLUPfLII1KrVq1AVwMAAKDIWBfqFi9eLEuWLJHnnnsu0FUBAAAoMsXFIomJiTJ48GBZsGCBlC1b1ueuWj3ckpOTC7GGAAAAhcOaljrHcWTgwIEyZMgQad26tc+vGz9+vERFRWUcMTExhVpPAACAsAx1o0aNMhMecju2bNkiL730khw7dkxGjx6dp/fX85OSkjKO+Pj4QvteAAAACovL0SauIHbgwAE5dOhQruc0bNhQ+vbtKx9//LEJeW6pqakSEREh/fv3l7feesunr6fdr9pipwEvMjKywPUHAAAoitwR9KHOV7t37/YYD/f7779L165dZd68edKmTRupU6eOT+9DqAMAAEXFn7nDmokSdevW9Xhcvnx5c9uoUSOfAx0AhIoTJ/T3XPr948dFypULdI0ABFrQj6kDAABAGLXUZVW/fn0zIxYAbGuhy3yb9T4tdkD4sjbUAYCN3F2umUVHn7nPv2WB8EX3KwAAgAVoqQOAEKKTItxdru4WusREul0BEOoAIKR4GzOnZYylA0D3KwAAgAXofgWAEKQtc0yKAJAZLXUAAAAWINQBAABYgO5XAEBQSU0VWblSJCFBpGZNkfbtRSIiAl0rIPgR6gAAQWP+fJFhw0T27DlTptt3T50q0qtXIGsGBD+6XwEAQRPoevf2DHRq7970cn0eQM4IdQCAoOhy1RY6bzN63WWxsennAfCOUAcACDgdQ5e1hS5rsIuPTz8PgHeEOgBAwOmkCH+eB4QjQh0AIOB0lqs/zwPCEaEOABBwumyJznJ1ubw/r+UxMennAfCOUAcACDhdh06XLVFZg5378ZQprFcH5IZQBwAICroO3bx5IrVre5ZrC56Ws04dkDsWHwYABA0Nbj16sKMEkB+EOgBA0HXFdugQ6FoAoYfuVwAAAAsQ6gAAACxAqAMAALAAoQ4AAMAChDoAAAALEOoAAAAsQKgDAACwAKEOAADAAoQ6AAAACxDqAAAALECoAwAAsAChDgAAwAKEOgAAAAsQ6gAAACxAqAMAALAAoQ4AAMAChDoAAAALEOoAAAAsQKgDAACwAKEOAADAAoQ6AAAACxDqAAAALECoAwAAsAChDgAAwAKEOgAAAAsQ6gAAACxAqAMAALAAoQ4AAMAChDoAAAALWBfqPvnkE2nTpo2UKVNGKlWqJD179gx0lQAAAApdcbHIhx9+KIMHD5a4uDjp1KmT/PXXX7J58+ZAVwsAAKDQWRPqNMANGzZMJk2aJIMGDcoob9asWUDrBQAAUBSs6X799ttvZe/evVKsWDFp2bKl1KxZU7p163bWlrqUlBRJTk72OAAAAEKNNaHu119/NbdPPPGEPProo7Jo0SIzpq5Dhw5y+PDhHF83fvx4iYqKyjhiYmKKsNYAAABhEupGjRolLpcr12PLli2SlpZmzh8zZozcfPPN0qpVK5k5c6Z5/oMPPsjx/UePHi1JSUkZR3x8fBF+dwAAAGEypm7EiBEycODAXM9p2LChJCQkZBtDV6pUKfPc7t27c3ytnqMHAABAKAv6UFetWjVznI22zGk427p1q7Rr186UnT59Wnbt2iX16tUrgpoCAAAETtCHOl9FRkbKkCFDZOzYsWZcnAY5nQmr+vTpE+jqAQDCVGqqyMqVItqhVLOmSPv2IhERga4VbGRNqFMa4ooXLy633XabnDx50ixC/Pnnn5sJEwAAFLX580WGDRPZs+dMWZ06IlOnivTqxf8P+JfLcRzHz+8Z0nRJE50Fq5MmtPUPAID8BrrevUWy/pV1udJv580j2EH8mjuCfvYrAACh2OWqLXTemk3cZbGx6ecB/kKoAwDAz3QMXeYuV2/BTlfQ0vMAfyHUAQDgZ/9bZctv5wG+INQBAOBnOsvVn+cBviDUAQDgZ7psic5ydU+KyErLdVdKPQ/wF0IdAAB+puvQ6bIlKmuwcz+eMoX16uBfhDoAAAqBrkOny5bUru1Zri14LGeCwmDV4sMAAARbsOvRgx0lUDQIdQAAFHJXbIcOXGIUPrpfAQAALECoAwAAsAChDgAAwAKEOgAAAAsQ6gAAACxAqAMAALAAoQ4AAMAChDoAAAALEOoAAAAsQKgDAACwAKEOAADAAoQ6AAAACxDqAAAALECoAwAAsAChDgAAwAKEOgAAAAsQ6gAAACxAqAMAALAAoQ4AAMAChDoAAAALEOoAAAAsQKgDAACwAKEOAADAAoQ6AAAACxDqAAAALECoA4AidOKEiMuVfuh9APAXQh0AAIAFige6AgAQDtytcplb5zLfL1eu6OsEwC6EOgAoAuXLZy+Ljj5z33H43wCgYOh+BQAAsAAtdQBQBI4fP9Pl6m6hS0yk2xWA/xDqAKAIeBszp2WMpQPgL3S/AgAAWICWOgAoQtoyx6QIAIWBljoAAAALEOoAAAAsQKgDAACwAKEOAADAAoQ6AAAACxDqAAAALGBVqNu2bZv06NFDqlatKpGRkdKuXTv54osvAl0tAACAQmdVqLvhhhvkr7/+ks8//1w2bNggF154oSnbt29foKsGAABQqKwJdQcPHpTt27fLqFGjpEWLFnLOOefIs88+K3/88Yds3rw50NUDAAAoVNaEuipVqsh5550nb7/9tpw4ccK02L366qtSvXp1adWqVY6vS0lJkeTkZI8DAAAg1FizTZjL5ZJly5ZJz549pUKFClKsWDET6D799FOpVKlSjq8bP368jBs3rkjrCgAAEHYtddqdqoEtt2PLli3iOI4MHTrUBLmVK1fK2rVrTcDr3r27JCQk5Pj+o0ePlqSkpIwjPj6+SL8/AAAAf3A5moaC2IEDB+TQoUO5ntOwYUMT5Lp06SJHjhwxM1/ddGzdoEGDTDj0hXa/RkVFmYCX+X0AAAD8zZ+5I+i7X6tVq2aOs9EJEUq7XTPTx2lpaYVWPwAAgGAQ9N2vvrr88svN2LkBAwbId999Z9ase/jhh2Xnzp1y/fXXB7p6AAAAhcqaUKcLDuukiOPHj0unTp2kdevW8vXXX8vChQvNenUAAAA2C/oxdUWNMXUAACAUc4c1LXUAAADhjFAHAABgAUIdAACABQh1AAAAFiDUAQAAWIBQBwAAYAFCHQAAgAUIdQAAABYg1AEAAFiAUAcAAGABQh0AAIAFCHUAAAAWINQBAABYgFAHAABgAUIdAACABQh1AAAAFiDUAQAAWIBQBwAAYAFCHQAAgAUIdQAAABYg1AEAAFiAUAcAAGABQh0AAIAFCHUAAAAWINQBAABYgFAHAABgAUIdAACABQh1AAAAFiDUAQAAWIBQBwAAYAFCHQAAgAUIdQAAABYg1AEAAFiAUAcAAGABQh0AAIAFCHUAAAAWINQBAABYgFAHAABgAUIdAACABQh1AAAAFiDUAQAAWIBQBwAAYAFCHQAAgAUIdQAAABYg1AEAAFiAUAcAAGABQh0AAIAFCHUAAAAWINQBAABYIGRC3TPPPCNt27aVsmXLSsWKFb2es3v3brn++uvNOdWrV5eHH35Y/vrrryKvKwAAQFErLiHi1KlT0qdPH7n88svljTfeyPZ8amqqCXQ1atSQVatWSUJCgtx+++1SokQJiYuLC0idAQAAiorLcRxHQsisWbMkNjZWjh496lG+ePFiueGGG+T333+X6OhoUzZjxgwZOXKkHDhwQEqWLOnT+ycnJ0tUVJQkJSVJZGRkoXwPAAAA/s4dIdNSdzarV6+W5s2bZwQ61bVrV7n33nvlxx9/lJYtW3p9XUpKijnc9KK6LzIAAEBhcucNf7SxWRPq9u3b5xHolPuxPpeT8ePHy7hx47KVx8TEFEItAQAAsjt06JBpsQvZUDdq1CiZMGFCruf8/PPP0qRJk0Krw+jRo+Whhx7KeKzduvXq1TOTLgp6ccPpXxkaguPj4+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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T54c8x0lAAAAElWVh181vPXu3Vs+/fRTs9fqbbfdJqtWrTI9dUuWLInOVQIAgGrZu1ekSRPv4z17RBo35kbaqso9dT169JC1a9fKaaedJv369TPDsf3795cVK1ZI586do3OVAAAAiHydOl16O3bs2Op8KgAAqKUeOv+PwY/psbNPlXvqunTpInfddZepTwcAAOKTDrnq4V97Xx/72mGfKoe6ESNGyJtvvimHH364HH/88TJ9+nSzcwMAAABip1rFhz/55BNZvXq1nHPOOfLoo49KRkaGnHXWWQGrYgEAQOzoogg9tmw50KaPfe2wT5W3CQtl+fLlct1118lXX30lJSUl4mZsEwYAsAmrXxMnd1RroYTPxx9/LDNnzpRZs2aZixo4cGCNLgYAAAC1NPyq5UzGjRsnhx12mJx66qnyzTffyP333y9btmyRV155pZqXAQAAokFXueqYnA656gIJjydwFSzsUeWeuq5du5oFErpg4m9/+5uk+i+rAQAAgDtC3Zo1a+TQQw+NztUAAICIol5d4qhyqCPQAQDgHqFq0vkPstV8uSRcFepatGhh5tK1atVKmjdvLh4dkC+H7gELAACAOAx1U6dOlaZNm5Y+rijUAQCA+OGrSafDsL4eOq1XxzZh9olInTqbUKcOAGAj6tXZnzuqXNIkKSlJtm7dWqZ9x44d5jUAAAC4YKFEeR17xcXFUq9evUhcEwAAiFK9Otgr7FD38MMPm486n+6f//ynNPFbTqNbg3344Yemhh0AAADiONTpAglfT90TTzwRMNSqPXQdO3Y07QAAAIjjULdhwwbzMSsrS+bMmWNKmwAAAMClc+oWLlwYnSsBAABA7a1+vfjii+X+++8v0z558mQZOHBg9a8EAAAAtRfqdEHEOeecU6b97LPPNq8BAADABaFuz549IUuXHHTQQaaAHgAAAFwQ6o488kiZNWtWmfZXXnlFunfvHqnrAgAAQDQXStxxxx3Sv39/+e677+TMM880be+99568/PLL8uqrr1b1ywEAACAWoe7888+XefPmycSJEyU3N1caNmwoRx11lLz77rtyxhlnROKaAAAAUEUep7x9vxJUJDfWBQAAqK3cUeU5dWr37t1mq7B//OMfsnPnTtP2+eefS35+fo0uBgAAALU0/PrVV19Jnz59TKrcuHGjXHXVVdKiRQuzy8QPP/wgL7zw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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": [ "#### 比較" ] }, { "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", "
アルゴリズム計算時間劣解領域体積
0NDS1.769309970.781427
1ParEGO1.763690975.909589
2HVPI3.961754932.139351
\n", "
" ], "text/plain": [ " アルゴリズム 計算時間 劣解領域体積\n", "0 NDS 1.769309 970.781427\n", "1 ParEGO 1.763690 975.909589\n", "2 HVPI 3.961754 932.139351" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.DataFrame({\n", " \"アルゴリズム\": [\"NDS\", \"ParEGO\", \"HVPI\"],\n", " \"計算時間\": [time_KYMN_NDS, time_KYMN_ParEGO, time_KYMN_HVPI],\n", " \"劣解領域体積\": [VID_KYMN_NDS, VID_KYMN_ParEGO, VID_KYMN_HVPI]\n", "})\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "この最適化問題では、 ParEGOがよい結果を出しています。" ] } ], "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 }