{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Multi-objective optimization\n", "\n", "When there are multiple objective functions ($p$) to be optimized, multi-objective optimization is used. \n", "Note that in this tutorial, \"solution\" means the pair of objective functions $y = (y_1(x), y_2(x), \\dots, y_p(x))$. \n", "Define the solution size relation $\\prec$ as follows. \n", "\n", "$y \\prec y^{'}\\Longleftrightarrow \\forall \\ i \\le p, y_i \\le y^{'}_i \\land \\exists \\ j \\le p, y_j < y^{'}_j$ \n", "\n", "A **Pareto solution** (in the maximization problem) is one in which no solution is larger than itself satisfying the above relations. \n", "In other words, if you try to improve the value of any objective function, one of the other objective functions will deteriorate. \n", "When there is a trade-off between objective functions, there are multiple Pareto solutions, and the numerical task is to find them efficiently.\n", "\n", "PHYSBO implements a Bayesian optimization method to find Pareto solutions efficiently. " ] }, { "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": [ { "name": "stdout", "output_type": "stream", "text": [ "Cythonized version of physbo is used\n" ] } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import physbo\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Test functions\n", "\n", "In this tutorial, we will use VLMOP2, which is a benchmark function for multi-objective optimization. \n", "The number of objective functions is two.\n", "\n", "$$\n", "\\begin{split}\n", " y_1(\\vec{x}) &= 1 - \\exp\\left[-\\sum_{i=1}^N\\left( x_i - 1/\\sqrt{N}\\right)^2\\right] \\\\\n", " y_2(\\vec{x}) &= 1 - \\exp\\left[-\\sum_{i=1}^N\\left( x_i + 1/\\sqrt{N}\\right)^2\\right],\n", "\\end{split}\n", "$$\n", "\n", "where $y_1$ and $y_2$ have minimums at $x_1 = x_2 = \\cdots x_N = 1/\\sqrt{N}$ and $x_1 = x_2 = \\cdots x_N = -1/\\sqrt{N}$, respectively, both of which are 0. Also, the upper bound is 1.\n", "\n", "Since PHYSBO solves a maximization problem, the objective function is again multiplied by -1.\n", "\n", "- Refernce\n", " - Van Veldhuizen, David A. Multiobjective evolutionary algorithms: classifications, analyses, and new innovations. No. AFIT/DS/ENG/99-01. AIR FORCE INST OF TECH WRIGHT-PATTERSONAFB OH SCHOOL OF ENGINEERING, 1999." ] }, { "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": [ "def vlmop2_minus(x):\n", " n = x.shape[1]\n", " y1 = 1 - np.exp(-1 * np.sum((x - 1/np.sqrt(n)) ** 2, axis = 1))\n", " y2 = 1 - np.exp(-1 * np.sum((x + 1/np.sqrt(n)) ** 2, axis = 1))\n", "\n", " return np.c_[-y1, -y2]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Preparation of search candidate data\n", "\n", "Let the input space $\\vec{x}$ be two-dimensional, and generate a grid of candidate points on [-2, 2] × [-2, 2]." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:06:13.676772Z", "start_time": "2021-01-05T06:06:13.664110Z" } }, "outputs": [], "source": [ "import itertools\n", "a = np.linspace(-2,2,101)\n", "test_X = np.array(list(itertools.product(a, a)))" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:06:13.683329Z", "start_time": "2021-01-05T06:06:13.678152Z" } }, "outputs": [ { "data": { "text/plain": [ "array([[-2. , -2. ],\n", " [-2. , -1.96],\n", " [-2. , -1.92],\n", " ...,\n", " [ 2. , 1.92],\n", " [ 2. , 1.96],\n", " [ 2. , 2. ]])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "test_X" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:06:13.688238Z", "start_time": "2021-01-05T06:06:13.684556Z" } }, "outputs": [ { "data": { "text/plain": [ "(10201, 2)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "test_X.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Definition of simulator" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:06:13.693027Z", "start_time": "2021-01-05T06:06:13.690029Z" } }, "outputs": [], "source": [ "class Simulator(object):\n", " def __init__(self, X):\n", " self.t = vlmop2_minus(X)\n", " \n", " def __call__( self, action):\n", " return self.t[action]" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:06:13.699166Z", "start_time": "2021-01-05T06:06:13.694489Z" } }, "outputs": [], "source": [ "simu = Simulator(test_X)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plotting the functions\n", "\n", "Let's plot each of the two objective functions. The first objective function has a peak in the upper right corner, and the second objective function has a trade-off with a peak in the lower left corner (The star is the position of the peak.).\n", "\n", "### First objective function" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:06:13.958020Z", "start_time": "2021-01-05T06:06:13.701129Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgcAAAGzCAYAAAC7ErTFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAABnt0lEQVR4nO2dC5wUxbX/z8zssoAIiPIQRRHxgm8QA4EYxUAE9RpfMaLcIF4DasREJRrwKorGy8V3JCboNYomGh83SowaDIpIVERBjY8If8UHiOIzgLz2MdP/TxXZ4dSp6erp6ZnZ2enf10/L1lR1d01P7/aZOuf8TsLzPI8AAAAAAP5FsvkHAAAAAAAFjAMAAAAAGMA4AAAAAIABjAMAAAAAGMA4AAAAAIABjAMAAAAAGMA4AAAAAIABjAMAAAAAGMA4AAAAAIABjAMA8mTOnDmUSCRo6dKlgWOHDx+ut3KzcOFCPUf1LwAAFAqMAwBaIb/+9a+1sVJJXHPNNfS9732Punfvrg2UK6+8sqWnBAAokJpCdwQA+PPXv/615MbBLrvsQuPHjzdeP/zww2nLli3Upk0bKjeXXXYZ9ejRgwYOHEhPPvlk2c8PACgeMA4AKAEt8XBWJJNJatu2bYuc+/3336fevXvTF198QV27dm2ROQAAigPcCgAQ0auvvkpHH300dezYkTp06EAjRoygF198MefYzZs309lnn00777yzHj9u3Dj65z//GRhzUF9fT1dccQX17duX6urqqFevXnTJJZfo1yW///3vafDgwdS+fXvaaaed9IpA82qEegC/9dZb9Oyzz+rle7U1n0vGHEyaNEm/HzVnyWmnnaa/6afT6exrf/nLX+jb3/427bDDDrTjjjvSscceq8+VD2peAIDqAMYBiD3q4aceiH//+9/1w/ryyy/X34LVA3fJkiXWePXAffvtt7VPXRkG9957L51wwgnkqn6eyWS0P/7666+n4447jmbNmqX3uemmm+jUU081xk6fPp1++MMfUm1tLV111VW6rQyJBQsW6P6bb76Zdt99d+rfvz/97ne/09t//dd/5TyvOvamTZvo8ccfN15XxsKf//xn+v73v0+pVEq/po6jjAFlTMycOVNfh3/84x902GGH0QcffFDQtQUAtFI8AGLOCSec4LVp08ZbuXJl9rWPP/7Y23HHHb3DDz88+9pdd92lnv7eoEGDvIaGhuzr1157rX79T3/6U/a1I444Qm/N/O53v/OSyaT3t7/9zTj37Nmz9b7PP/+8br/zzjt63Iknnuil02ljbCaTyf68//77G8dv5plnntHHU/8277Pbbrt5J598sjHuwQcf1OMWLVqk219//bXXuXNnb8KECca4tWvXep06dbJed/H555/rY19xxRV57wMAqCywcgBijVpSV8v16lt8nz59sq/vuuuudPrpp9Nzzz1HGzZsMPaZOHGi/lbfzLnnnks1NTX0xBNP+J7noYceon333Vd/21c++ebtO9/5ju5/5pln9L9z587VqwzTpk3T8QMc5S4Ii9rnlFNO0XPbuHFj9vUHHniAdtttN70qoJg/fz6tW7dOuxr4/NSqwpAhQ7LzAwDEAwQkgljz+eef6yX2fv36WX3qYa4e1KtXr6b9998/+/o+++xjjFPL8MqYcC29v/POO9oV4Reo99lnn+l/V65cqY2C/fbbj4qFci0oV8Sjjz6qDR5lJChjQcVNNBscan6KZmNFomIrAADxAcYBAGVAGRkHHngg3XjjjTn7VUxBqfjmN7+pgwUffPBBbRyoWAOV7shjHdT8muMOVJCiRK2MAADiA37jQaxR3+RVRsCKFSusvuXLl+tv8fLBrb5lH3nkkdm2+ib+ySef0DHHHON7nr333lsHPKosCJd7QI1TD2oVCDhgwADfcWFdDD/4wQ/ol7/8pXaRKJeCMhaU0cDPq+jWrRuNHDky1LEBANUHYg5ArFE+9aOOOor+9Kc/GW6BTz/9lO677z7tk5dL6rfffjs1NjZm27/5zW+oqalJp0K6Hs5r1qyh//3f/7X61Ld4lVGgULEPyiBRWQrN3+ab4dkQKtVQxQjki1olUCmTd999N82bN0/PhzNq1Cj9Pv/7v//beG/c/QIAiA9YOQCx5xe/+IUOyFOGwI9//GO9hH7bbbfph+m1115rjW9oaNArAOoBq1YclFqh2lelKvqhUhPVsv4555yjg/u+9a1v6WBItTqhXleKgoceeqjWQFBpiVdffbVOrzzppJO0JsLLL79MPXv2pBkzZujjDRo0SBslau5qH/WN3y9eQHHIIYdkj63el0yfVIaBOp6apxo7ZswYvaqyatUqnQap5vurX/3KeR2VS+LDDz/MaiosWrRIz6/5/e+5554BnwQAoGJo6XQJACqBV155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+6531VVX6XtEXXM1/z59+niHH354yeZ4//3360yOOXPm6AyLiRMn6mu3du1a3f/DH/7QmzJlSnb8888/79XU1HjXX3+9zrq54oordDbOG2+8UbI5FmPe6v558sknvZUrV3rLli3zxowZ47Vt29Z76623yjpvdd8238PqT+KNN96of1b3uULNWc29mffee89r3769d/HFF+vrfeutt3qpVMqbN29eRc/7pptu8ubOneu98847+t5QGTjJZFL/HSkn5557rs5SWbhwofH3evPmzdkxlXqPx4lWbxyodCj1i5Fra0b9UVdtlcrTjHoo/fjHP/Z22mkn/Yt+4oknGgZFOVBpibnmzeep2uo9KtQvz1FHHeV17dpV/2Lsueee3oQJE7J/fCt13s3pjJdffrnXvXt3/QBRxtyKFSu8cvPll19qY0AZNR07dvTOPPNMw6iR98qqVau0IdClSxc9b2WIqofC+vXrSzrPWbNmaeO1TZs2OkXwxRdfNFIr1WfAefDBB71/+7d/0+NVmt3jjz/utQRh5n3BBRdkx6r74phjjvFeeeWVss+5OcVPbs1zVf+quct9BgwYoOeujEV+r1fqvGfOnOntvffe2gBT9/Pw4cP1l6Ny4/f3ml/DSr7H40JC/a+lVy8AAAAAUDlUbLYCAAAAAFoGGAcAAAAAMIBxAAAAAAADGAcAAAAAMIBxAAAAAAADGAcAAAAAMIBxAAAAAAADGAcAAAAAMIBxAAAAAAADGAcAAAAAMIBxAAAAAADi/H8R4ZJMSqKL+AAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure()\n", "plt.imshow(simu.t[:,0].reshape((101,101)), vmin=-1.0, vmax=0.0, origin=\"lower\", extent=[-2.0, 2.0, -2.0, 2.0])\n", "plt.title(\"objective 1\")\n", "plt.colorbar()\n", "plt.plot([1.0/np.sqrt(2.0)], [1.0/np.sqrt(2.0)], '*')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Second objective function" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:06:14.158089Z", "start_time": "2021-01-05T06:06:13.960026Z" }, "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgcAAAGzCAYAAAC7ErTFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAABoR0lEQVR4nO2dCbwUxbX/z8zcDURAlFVRQHyAK4iBwDOKgQhqjFuMKC+KMaBGTBSiAaMoGh8PN4zEBH0uaKJxeVFcg0ERiYoIqHEJ8FfUgCiuAWS7y0z/P6dwhupT09XT0zNz507/vn5abk1Vd9f09L19ps7vnBNzHMchAAAAAIBviKd/AAAAAABgYBwAAAAAwAWMAwAAAAC4gHEAAAAAABcwDgAAAADgAsYBAAAAAFzAOAAAAACACxgHAAAAAHAB4wAAAAAALmAcAJAjc+bMoVgsRsuWLfMdO2zYMLWVmoULF6o58r8AAJAvMA4AaIH8/ve/V8ZKubBy5Uq69NJLqX///rTrrrtS165d6bjjjsvJkAIAlB9VzT0BACqRv/3tb0U3DvbYYw8aO3as6/UjjjiCtm3bRjU1NVRK7rjjDrrzzjvplFNOoZ/97Ge0ceNGuu222+jb3/42zZs3j0aMGFHS+QAAwgHjAIAiUOqHc5p4PE51dXUlP+/pp59OV111FbVp0ybz2k9+8hPq16+feh3GAQAtC7gVACCi119/nY455hhq27atesANHz6cXnnllaxjt27dSueeey7tvvvuavyZZ55J//73v301B/X19XTllVdS7969qba2lrp3766W4vl1yZ/+9CcaNGgQtW7dmnbbbTe1IpBejejRowe988479MILLyh9AW/pc0nNwYQJE9T74Tlne6B36dKFkslk5rW//vWv9J3vfId22WUX5R5g1wCfy4+BAwe6DAOGrw8fa8WKFb77AwDKCxgHIPLww48fYv/4xz/Uw/qKK66gDz74QD1wlyxZYoznBy4/8PgbMRsG9913H5144olkq36eSqXoBz/4Ad1www10/PHH06xZs9Q+M2fOpNNOO801dtq0afTjH/+Yqqur6eqrr1ZtNiQWLFig+m+++Wbaa6+9qG/fvvTHP/5Rbb/+9a+znpePvWXLFnrqqadcr7Ox8MQTT9APf/hDSiQS6jU+DhsD/JCfMWOGug7//Oc/6fDDD6cPP/wwr2u7fv165f4AALQwHAAizoknnujU1NQ4q1evzrz28ccfO7vuuqtzxBFHZF67++67+envDBw40GloaMi8ft1116nXH3vsscxrRx55pNrS/PGPf3Ti8bjz97//3XXu2bNnq31feukl1X733XfVuJNOOslJJpOusalUKvPzAQcc4Dp+mueff14dj/9N77Pnnns6p5xyimvcQw89pMYtWrRItb/++munffv2zrhx41zj1q9f77Rr1854PRf42LFYzLniiisC7wsAaF6wcgAiDS+p83I9f4vv1atX5nVW259xxhn04osv0qZNm1z7jB8/Xn2rT3P++edTVVUVPf30057nefjhh5X/nb/tf/HFF5ntu9/9rup//vnn1b9z585VqwxTp05V+gEddhcEhfc59dRT1dw2b96cef3BBx+kPffcU60KMPPnz6cNGzYoV4M+P15VGDx4cGZ+ufLZZ5+p69ezZ0+1GgMAaFlAkAgizeeff66W2Pv06WP08cOcH9Rr166lAw44IPP6fvvt5xrHy/BsTNiW3t99913liujYsaPnw5RZvXq1Mgr2339/KhTsWmBXxOOPP64e2GwksLHAuom0wcHzY9LGioS1FbnCbozvf//79PXXXyvjSmoRAADlD4wDAEoAGxkHHXQQ3XTTTVn7WVNQLDickEWMDz30kDIOWGvA4Y661oHnl9YdsEhRwisjudDQ0EAnn3wyvfnmm/TMM8/QgQceWMB3AgAoFTAOQKThb/IcEbBq1aqsiX34W7x8cPO37KOOOirT5m/in3zyCR177LGe59l3332V4JGjIGzuAR7HD2oWAnJCIS+Cuhh+9KMf0W9/+1vlImGXAhsLbDTo52U6deqUd9ghz5sFms8995wyRI488si8jgMAaH6gOQCRhn3qRx99ND322GMut8Cnn35K999/v/LJyyX122+/nRobGzPtP/zhD9TU1KRCIW0P53Xr1tH//u//Gn38LZ6X4hnWPrBBwlEK6W/zafRoCA41ZI1ArvAqAYdM3nPPPSopEc9HZ+TIkep9/vd//7frvenuFz8uvPBCZXhwgiZePQAAtFywcgAiz29+8xslyGNDgLP78RI6Z/fjh+l1112XdemcVwD4AcsrDvww5H05VNELDk3kb9PnnXeeEvf953/+pxJD8uoEv85L8IcddpjKgcBhiddcc40Kr+SHLOdEWLp0KXXr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lizJvHbeeec5e++9t7NgwQJn2bJlzpAhQ9RWSv71r385r7/+ujNt2jSnTZs26mfevv7668wYnvcjjzyifubXf/nLX6qIig8++MB59tlnnUMPPdTZb7/9nO3bt5ftvJn/+Z//cdq3b+889thjzptvvqkiLjiiZNu2bU4pGTVqlDNgwAB1L7z44ovq2p1++ume98p7773nXH311eoe4WvO8+/Vq5dzxBFHFG2ODzzwgIrkmDNnjoqwGD9+vLp269evV/0//vGPncmTJ2fGv/TSS05VVZVzww03qKibK6+8UkXjvPXWW0WbYyHmzffPM88846xevdpZvny5M3r0aKeurs555513Sjpvvm/T9zD/SbzpppvUz3yfMzxnnnua999/32ndurVzySWXqOt96623OolEwpk3b15Zz3vmzJnO3LlznXfffVfdGxyBE4/H1d+RUnL++eerKJWFCxe6/l5v3bo1M6Zc7/Eo0eKNAw6H4l+MbFsa/qPObQ7lScMPpZ/97GfObrvtpn7RTzrpJJdBUQo4LDHbvPV5cpvfI8O/PEcffbTTsWNH9Yuxzz77OOPGjcv88S3XeafDGa+44gqnc+fO6gHCxtyqVaucUvPll18qY4CNmrZt2zpnn322y6iR98qaNWuUIdChQwc1bzZE+aGwcePGos5z1qxZynitqalRIYKvvPKKK7SSPwOdhx56yPmP//gPNZ7D7J566imnOQgy74suuigzlu+LY4891nnttddKPud0iJ/c0nPlf3nucp/+/furubOxqN/r5TrvGTNmOPvuu68ywPh+HjZsmPpyVGq8/l7r17Cc7/GoEOP/NffqBQAAAADKh7KNVgAAAABA8wDjAAAAAAAuYBwAAAAAwAWMAwAAAAC4gHEAAAAAABcwDgAAAADgAsYBAAAAAFzAOAAAAACACxgHAAAAAHAB4wAAAAAALmAcAAAAAIB0/j/frHLEI5zSfAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# plot objective 2\n", "plt.figure()\n", "plt.imshow(simu.t[:,1].reshape((101,101)), vmin=-1.0, vmax=0.0, origin=\"lower\", extent=[-2.0, 2.0, -2.0, 2.0])\n", "plt.title(\"objective 2\")\n", "plt.colorbar()\n", "plt.plot([-1.0/np.sqrt(2.0)], [-1.0/np.sqrt(2.0)], '*')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Performing optimizations.\n", "\n", "## Setting policy\n", "\n", "Use `physbo.search.discrete_multi.Policy` for multi-objective optimization. \n", "Specify the number of objective functions in `num_objectives`." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:06:14.163097Z", "start_time": "2021-01-05T06:06:14.159742Z" } }, "outputs": [], "source": [ "policy = physbo.search.discrete_multi.Policy(test_X=test_X, num_objectives=2)\n", "policy.set_seed(0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As with the usual usage of `physbo.search.discrete.Policy` (with one objective function), optimization is done by calling the `random_search` or `bayes_search` methods. The basic API and usage are roughly the same as `discrete.policy`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Random search" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:06:14.316770Z", "start_time": "2021-01-05T06:06:14.164245Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0001-th step: f(x) = [-0.99973003 -0.62334035] (action = 836)\n", " Pareto set updated.\n", " the number of Pareto frontiers = 1 \n", "\n", "0002-th step: f(x) = [-0.99789981 -0.99866427] (action = 9404)\n", " Pareto set updated.\n", " the number of Pareto frontiers = 2 \n", "\n", "0003-th step: f(x) = [-0.99090897 -0.46609239] (action = 4664)\n", " Pareto set updated.\n", " the number of Pareto frontiers = 1 \n", "\n", "0004-th step: f(x) = [-0.92633083 -0.29208351] (action = 4780)\n", " Pareto set updated.\n", " the number of Pareto frontiers = 1 \n", "\n", "0005-th step: f(x) = [-0.67969326 -0.99981691] (action = 9566)\n", " Pareto set updated.\n", " the number of Pareto frontiers = 2 \n", "\n", "0006-th step: f(x) = [-0.45601619 -0.99848443] (action = 8852)\n", " Pareto set updated.\n", " the number of Pareto frontiers = 2 \n", "\n", "0007-th step: f(x) = [-0.92670204 -0.71508873] (action = 6088)\n", "0008-th step: f(x) = [-0.58233995 -0.99952931] (action = 7060)\n", "0009-th step: f(x) = [-0.99848229 -0.96780195] (action = 473)\n", "0010-th step: f(x) = [-0.80479332 -0.99994946] (action = 7573)\n", "0011-th step: f(x) = [-0.99700074 -0.99847873] (action = 1406)\n", "0012-th step: f(x) = [-0.9992592 -0.93891121] (action = 6061)\n", "0013-th step: f(x) = [-0.19963873 -0.93357674] (action = 5722)\n", " Pareto set updated.\n", " the number of Pareto frontiers = 2 \n", "\n", "0014-th step: f(x) = [-0.98046765 -0.99294428] (action = 2309)\n", "0015-th step: f(x) = [-0.99602549 -0.98620358] (action = 7989)\n", "0016-th step: f(x) = [-0.99957128 -0.9973798 ] (action = 8484)\n", "0017-th step: f(x) = [-0.52191048 -0.72845916] (action = 5405)\n", " Pareto set updated.\n", " the number of Pareto frontiers = 3 \n", "\n", "0018-th step: f(x) = [-0.99916441 -0.40869572] (action = 2742)\n", "0019-th step: f(x) = [-0.99480122 -0.7565076 ] (action = 1266)\n", "0020-th step: f(x) = [-0.63329589 -0.63329589] (action = 5200)\n", " Pareto set updated.\n", " the number of Pareto frontiers = 4 \n", "\n", "0021-th step: f(x) = [-0.95437918 -0.80142908] (action = 2487)\n", "0022-th step: f(x) = [-0.99899466 -0.96646532] (action = 269)\n", "0023-th step: f(x) = [-0.19473522 -0.99445365] (action = 8044)\n", " Pareto set updated.\n", " the number of Pareto frontiers = 5 \n", "\n", "0024-th step: f(x) = [-0.99969529 -0.52395588] (action = 2135)\n", "0025-th step: f(x) = [-0.59106078 -0.79258035] (action = 6206)\n", "0026-th step: f(x) = [-0.78231041 -0.99997141] (action = 9079)\n", "0027-th step: f(x) = [-0.99955573 -0.99930147] (action = 396)\n", "0028-th step: f(x) = [-0.99825097 -0.99875436] (action = 9403)\n", "0029-th step: f(x) = [-0.65387719 -0.99938669] (action = 9456)\n", "0030-th step: f(x) = [-0.26132949 -0.87913689] (action = 5816)\n", " Pareto set updated.\n", " the number of Pareto frontiers = 6 \n", "\n", "0031-th step: f(x) = [-0.74523952 -0.7724917 ] (action = 6301)\n", "0032-th step: f(x) = [-0.33644513 -0.97772424] (action = 5530)\n", "0033-th step: f(x) = [-0.99777557 -0.93373833] (action = 6470)\n", "0034-th step: f(x) = [-0.9725524 -0.6296562] (action = 2277)\n", "0035-th step: f(x) = [-0.99924826 -0.84674905] (action = 353)\n", "0036-th step: f(x) = [-0.99743705 -0.17848438] (action = 2549)\n", " Pareto set updated.\n", " the number of Pareto frontiers = 7 \n", "\n", "0037-th step: f(x) = [-0.99994916 -0.78013199] (action = 326)\n", "0038-th step: f(x) = [-0.99887174 -0.86936149] (action = 5458)\n", "0039-th step: f(x) = [-0.99362699 -0.99769786] (action = 9309)\n", "0040-th step: f(x) = [-0.84889217 -0.99973225] (action = 10156)\n", "0041-th step: f(x) = [-0.95713719 -0.09067194] (action = 4073)\n", " Pareto set updated.\n", " the number of Pareto frontiers = 7 \n", "\n", "0042-th step: f(x) = [-0.17190645 -0.91382463] (action = 6120)\n", " Pareto set updated.\n", " the number of Pareto frontiers = 6 \n", "\n", "0043-th step: f(x) = [-0.98406208 -0.94467587] (action = 7289)\n", "0044-th step: f(x) = [-0.93974303 -0.92444262] (action = 2698)\n", "0045-th step: f(x) = [-0.98414342 -0.84762781] (action = 1780)\n", "0046-th step: f(x) = [-0.99699986 -0.98166426] (action = 7684)\n", "0047-th step: f(x) = [-0.3868143 -0.99930896] (action = 8060)\n", "0048-th step: f(x) = [-0.97964062 -0.65554315] (action = 2075)\n", "0049-th step: f(x) = [-0.99907307 -0.73466786] (action = 4450)\n", "0050-th step: f(x) = [-0.99720717 -0.85352507] (action = 865)\n" ] } ], "source": [ "policy = physbo.search.discrete_multi.Policy(test_X=test_X, num_objectives=2)\n", "policy.set_seed(0)\n", "\n", "res_random = policy.random_search(max_num_probes=50, simulator=simu)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The evaluation value of the objective function (the array) and the action ID at that time are displayed. \n", "It also displays a message when the Pareto set is updated.\n", "\n", "If you want to display the contents of the Pareto set when it is updated, specify `disp_pareto_set=True`. \n", "Pareto set is sorted in ascending order of the first objective function value. " ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:06:14.493398Z", "start_time": "2021-01-05T06:06:14.318132Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0001-th step: f(x) = [-0.99973003 -0.62334035] (action = 836)\n", " Pareto set updated.\n", " current Pareto set = [[-0.99973003 -0.62334035]] (steps = [1]) \n", "\n", "0002-th step: f(x) = [-0.99789981 -0.99866427] (action = 9404)\n", " Pareto set updated.\n", " current Pareto set = [[-0.99973003 -0.62334035]\n", " [-0.99789981 -0.99866427]] (steps = [1 2]) \n", "\n", "0003-th step: f(x) = [-0.99090897 -0.46609239] (action = 4664)\n", " Pareto set updated.\n", " current Pareto set = [[-0.99090897 -0.46609239]] (steps = [3]) \n", "\n", "0004-th step: f(x) = [-0.92633083 -0.29208351] (action = 4780)\n", " Pareto set updated.\n", " current Pareto set = [[-0.92633083 -0.29208351]] (steps = [4]) \n", "\n", "0005-th step: f(x) = [-0.67969326 -0.99981691] (action = 9566)\n", " Pareto set updated.\n", " current Pareto set = [[-0.92633083 -0.29208351]\n", " [-0.67969326 -0.99981691]] (steps = [4 5]) \n", "\n", "0006-th step: f(x) = [-0.45601619 -0.99848443] (action = 8852)\n", " Pareto set updated.\n", " current Pareto set = [[-0.92633083 -0.29208351]\n", " [-0.45601619 -0.99848443]] (steps = [4 6]) \n", "\n", "0007-th step: f(x) = [-0.92670204 -0.71508873] (action = 6088)\n", "0008-th step: f(x) = [-0.58233995 -0.99952931] (action = 7060)\n", "0009-th step: f(x) = [-0.99848229 -0.96780195] (action = 473)\n", "0010-th step: f(x) = [-0.80479332 -0.99994946] (action = 7573)\n", "0011-th step: f(x) = [-0.99700074 -0.99847873] (action = 1406)\n", "0012-th step: f(x) = [-0.9992592 -0.93891121] (action = 6061)\n", "0013-th step: f(x) = [-0.19963873 -0.93357674] (action = 5722)\n", " Pareto set updated.\n", " current Pareto set = [[-0.92633083 -0.29208351]\n", " [-0.19963873 -0.93357674]] (steps = [ 4 13]) \n", "\n", "0014-th step: f(x) = [-0.98046765 -0.99294428] (action = 2309)\n", "0015-th step: f(x) = [-0.99602549 -0.98620358] (action = 7989)\n", "0016-th step: f(x) = [-0.99957128 -0.9973798 ] (action = 8484)\n", "0017-th step: f(x) = [-0.52191048 -0.72845916] (action = 5405)\n", " Pareto set updated.\n", " current Pareto set = [[-0.92633083 -0.29208351]\n", " [-0.52191048 -0.72845916]\n", " [-0.19963873 -0.93357674]] (steps = [ 4 17 13]) \n", "\n", "0018-th step: f(x) = [-0.99916441 -0.40869572] (action = 2742)\n", "0019-th step: f(x) = [-0.99480122 -0.7565076 ] (action = 1266)\n", "0020-th step: f(x) = [-0.63329589 -0.63329589] (action = 5200)\n", " Pareto set updated.\n", " current Pareto set = [[-0.92633083 -0.29208351]\n", " [-0.63329589 -0.63329589]\n", " [-0.52191048 -0.72845916]\n", " [-0.19963873 -0.93357674]] (steps = [ 4 20 17 13]) \n", "\n", "0021-th step: f(x) = [-0.95437918 -0.80142908] (action = 2487)\n", "0022-th step: f(x) = [-0.99899466 -0.96646532] (action = 269)\n", "0023-th step: f(x) = [-0.19473522 -0.99445365] (action = 8044)\n", " Pareto set updated.\n", " current Pareto set = [[-0.92633083 -0.29208351]\n", " [-0.63329589 -0.63329589]\n", " [-0.52191048 -0.72845916]\n", " [-0.19963873 -0.93357674]\n", " [-0.19473522 -0.99445365]] (steps = [ 4 20 17 13 23]) \n", "\n", "0024-th step: f(x) = [-0.99969529 -0.52395588] (action = 2135)\n", "0025-th step: f(x) = [-0.59106078 -0.79258035] (action = 6206)\n", "0026-th step: f(x) = [-0.78231041 -0.99997141] (action = 9079)\n", "0027-th step: f(x) = [-0.99955573 -0.99930147] (action = 396)\n", "0028-th step: f(x) = [-0.99825097 -0.99875436] (action = 9403)\n", "0029-th step: f(x) = [-0.65387719 -0.99938669] (action = 9456)\n", "0030-th step: f(x) = [-0.26132949 -0.87913689] (action = 5816)\n", " Pareto set updated.\n", " current Pareto set = [[-0.92633083 -0.29208351]\n", " [-0.63329589 -0.63329589]\n", " [-0.52191048 -0.72845916]\n", " [-0.26132949 -0.87913689]\n", " [-0.19963873 -0.93357674]\n", " [-0.19473522 -0.99445365]] (steps = [ 4 20 17 30 13 23]) \n", "\n", "0031-th step: f(x) = [-0.74523952 -0.7724917 ] (action = 6301)\n", "0032-th step: f(x) = [-0.33644513 -0.97772424] (action = 5530)\n", "0033-th step: f(x) = [-0.99777557 -0.93373833] (action = 6470)\n", "0034-th step: f(x) = [-0.9725524 -0.6296562] (action = 2277)\n", "0035-th step: f(x) = [-0.99924826 -0.84674905] (action = 353)\n", "0036-th step: f(x) = [-0.99743705 -0.17848438] (action = 2549)\n", " Pareto set updated.\n", " current Pareto set = [[-0.99743705 -0.17848438]\n", " [-0.92633083 -0.29208351]\n", " [-0.63329589 -0.63329589]\n", " [-0.52191048 -0.72845916]\n", " [-0.26132949 -0.87913689]\n", " [-0.19963873 -0.93357674]\n", " [-0.19473522 -0.99445365]] (steps = [36 4 20 17 30 13 23]) \n", "\n", "0037-th step: f(x) = [-0.99994916 -0.78013199] (action = 326)\n", "0038-th step: f(x) = [-0.99887174 -0.86936149] (action = 5458)\n", "0039-th step: f(x) = [-0.99362699 -0.99769786] (action = 9309)\n", "0040-th step: f(x) = [-0.84889217 -0.99973225] (action = 10156)\n", "0041-th step: f(x) = [-0.95713719 -0.09067194] (action = 4073)\n", " Pareto set updated.\n", " current Pareto set = [[-0.95713719 -0.09067194]\n", " [-0.92633083 -0.29208351]\n", " [-0.63329589 -0.63329589]\n", " [-0.52191048 -0.72845916]\n", " [-0.26132949 -0.87913689]\n", " [-0.19963873 -0.93357674]\n", " [-0.19473522 -0.99445365]] (steps = [41 4 20 17 30 13 23]) \n", "\n", "0042-th step: f(x) = [-0.17190645 -0.91382463] (action = 6120)\n", " Pareto set updated.\n", " current Pareto set = [[-0.95713719 -0.09067194]\n", " [-0.92633083 -0.29208351]\n", " [-0.63329589 -0.63329589]\n", " [-0.52191048 -0.72845916]\n", " [-0.26132949 -0.87913689]\n", " [-0.17190645 -0.91382463]] (steps = [41 4 20 17 30 42]) \n", "\n", "0043-th step: f(x) = [-0.98406208 -0.94467587] (action = 7289)\n", "0044-th step: f(x) = [-0.93974303 -0.92444262] (action = 2698)\n", "0045-th step: f(x) = [-0.98414342 -0.84762781] (action = 1780)\n", "0046-th step: f(x) = [-0.99699986 -0.98166426] (action = 7684)\n", "0047-th step: f(x) = [-0.3868143 -0.99930896] (action = 8060)\n", "0048-th step: f(x) = [-0.97964062 -0.65554315] (action = 2075)\n", "0049-th step: f(x) = [-0.99907307 -0.73466786] (action = 4450)\n", "0050-th step: f(x) = [-0.99720717 -0.85352507] (action = 865)\n" ] } ], "source": [ "policy = physbo.search.discrete_multi.Policy(test_X=test_X, num_objectives=2)\n", "policy.set_seed(0)\n", "res_random = policy.random_search(max_num_probes=50, simulator=simu, disp_pareto_set=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Checking results\n", "\n", " #### History of evaluation values" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:06:14.498984Z", "start_time": "2021-01-05T06:06:14.494679Z" } }, "outputs": [], "source": [ "res_random.fx[0:res_random.num_runs]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Obtaining the Pareto solution" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:06:14.504080Z", "start_time": "2021-01-05T06:06:14.500385Z" } }, "outputs": [ { "data": { "text/plain": [ "(array([[-0.95713719, -0.09067194],\n", " [-0.92633083, -0.29208351],\n", " [-0.63329589, -0.63329589],\n", " [-0.52191048, -0.72845916],\n", " [-0.26132949, -0.87913689],\n", " [-0.17190645, -0.91382463]]),\n", " array([40, 3, 19, 16, 29, 41]))" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "front, front_num = res_random.export_pareto_front()\n", "front, front_num" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Plotting the solution (evaluated value)\n", "\n", "Note again that the space to be plotted is $y = (y_1, y_2)$ and not $x = (x_1, x_2)$.\n", "\n", "The red plot is the Pareto solution." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:06:14.511086Z", "start_time": "2021-01-05T06:06:14.505221Z" } }, "outputs": [], "source": [ "def plot_pareto_front(res):\n", " front, front_num = res.export_pareto_front()\n", " dominated = [i for i in range(res.num_runs) if i not in front_num]\n", " points = res.fx[dominated, :]\n", "\n", " plt.figure(figsize=(7, 7))\n", " plt.scatter(res.fx[dominated,0], res.fx[dominated,1], c = \"blue\")\n", " plt.scatter(front[:, 0], front[:, 1], c = \"red\")\n", " plt.title('Pareto front')\n", " plt.xlabel('Objective 1')\n", " plt.ylabel('Objective 2')\n", " plt.xlim([-1.0,0.0])\n", " plt.ylim([-1.0,0.0])" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:06:14.661288Z", "start_time": "2021-01-05T06:06:14.512392Z" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_pareto_front(res_random)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Calculate the volume of the dominated region\n", "\n", "A solution that is not a Pareto solution, i.e., a solution $y$ for which there exists a solution $y'$ that is better than itself, is called a inferior solution ($\\exists y' y\\prec y'$). The volume of the inferior solution region, which is the space occupied by inferior solutions in the solution space (a subspace of the solution space), is one of the indicators of the results of multi-objective optimization. The larger this value is, the more good Pareto solutions are obtained.`res_random.pareto.volume_in_dominance(ref_min, ref_max)` calculates the volume of the inferior solution region in the hyper-rectangle specified by `ref_min` and `ref_max`." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:06:14.666649Z", "start_time": "2021-01-05T06:06:14.662809Z" } }, "outputs": [ { "data": { "text/plain": [ "0.2376881844865093" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res_random.pareto.volume_in_dominance([-1,-1],[0,0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Bayesian optimization\n", "\n", "For `bayes_search` in the multi-objective case, `score` can be selected from the following method\n", "\n", "- HVPI (HyperVolume-based Probability of Improvement)\n", "- EHVI (Expected Hyper-Volume Improvement)\n", "- TS (Thompson Sampling)\n", "\n", "The following 50 evaluations (10 random searches + 40 Bayesian optimizations) will be performed with different scores." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### HVPI (HyperVolume-based Probability of Improvement)\n", "\n", "The improvement probability of a non-dominated region in a multi-dimensional objective function space is obtained as a score. \n", "\n", "- Reference\n", " - Couckuyt, Ivo, Dirk Deschrijver, and Tom Dhaene. \"Fast calculation of multiobjective probability of improvement and expected improvement criteria for Pareto optimization.\" Journal of Global Optimization 60.3 (2014): 575-594." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:06:29.019463Z", "start_time": "2021-01-05T06:06:14.668034Z" } }, "outputs": [], "source": [ "policy = physbo.search.discrete_multi.Policy(test_X=test_X, num_objectives=2)\n", "policy.set_seed(0)\n", "\n", "policy.random_search(max_num_probes=10, simulator=simu)\n", "res_HVPI = policy.bayes_search(max_num_probes=40, simulator=simu, score='HVPI', interval=10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Plotting the Pareto solution\n", "\n", "We can see that more Pareto solutions are obtained compared to random sampling." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:06:29.190434Z", "start_time": "2021-01-05T06:06:29.020967Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnwAAAJwCAYAAAATL7wtAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAABHp0lEQVR4nO3dCXxU5bnH8ScssmmC7BCCbCqLOyhCRcJSRRSjEZClWiyL14oSpAvWBdQqRbEEqpZr69qyKBGXotKCQEFENvGqyCYGCRFERBIRZAnnfp53nDEzmYQsMznb7/v5TCfznjOTM5nG/HmX502wLMsSAAAAeFYVuy8AAAAA8UXgAwAA8DgCHwAAgMcR+AAAADyOwAcAAOBxBD4AAACPI/ABAAB4HIEPAADA4wh8AAAAHkfgAwAH2LZtm1xxxRWSlJQkCQkJ8tprr9l9SQA8hMAHwLGef/55E36Ct5o1a8pZZ50lY8aMka+++qrSr+fLL7+USZMmyYcffhjz1/7lL38pH3/8sTz88MPyj3/8Qzp37iyV6dNPPzXvbceOHZX6fQFUjmqV9H0AoNwefPBBadWqlfzwww/y7rvvyl//+ld566235JNPPpHatWtXauB74IEHpGXLlnLBBRfE7HUPHz4sq1atknvuuceEWTto4NP3lpqaat4fAG8h8AFwvKuuuirU4zVy5EipX7++/PnPf5bXX39dhgwZUu7XPXHihBw9etT0HNrp66+/Nvd169Y96bnff/+91KlTpxKuCoCXMKQLwHV69epl7rOzs8391KlTpVu3biYI1qpVSzp16iRZWVlFnqfDwtqDNmvWLOnYsaPUqFFDFi5caI7l5ubKr371K2ncuLFp1+PPPvts6LnLli2Tiy++2Hx9yy23hIaZddg5aN68eeZ76zU0aNBAfvGLX5jXLYkOo55xxhnm69/+9rfmNYM9bHpMH2vv29ChQ+X000+Xyy67zBw7fvy4PPTQQ9KmTRtzvfqcP/zhD3LkyJGw19f2a665xvSMXnLJJSbctm7dWl588cXQOfoeBg4caL7u2bNn6L3pewbgDfTwAXCd7du3m3sNeGr69Oly7bXXyrBhw0yP3dy5c02AWbBggVx99dVhz12yZIm8/PLLJvhpKNNApPMBL7300lAgbNiwobz99tsyYsQIyc/Pl4yMDGnfvr0ZWr7//vtl9OjR0r17d/N6GjSDoUmDoIbCyZMnm9fU61q5cqVs2LCh2N679PR0c2zcuHGmt7Jfv35y6qmnhp2j7+XMM8+URx55RCzLCvV0vvDCCzJgwAAZP368rF692nzfTZs2yauvvhr2/M8++8ycp+9H5wpqkB0+fLgJpxpsL7/8crnzzjtlxowZJjTqe1XBewAeYAGAQz333HOabqzFixdbX3/9tZWTk2PNnTvXql+/vlWrVi1r165d5rxDhw6FPe/o0aPWOeecY/Xq1SusXV+rSpUq1saNG8PaR4wYYTVt2tTat29fWPvgwYOtpKSk0OuvXbvWvIZeV+T3a9Sokfmehw8fDrUvWLDAnH///feX+D6zs7PNeY899lhY+8SJE037kCFDwto//PBD0z5y5Miw9t/85jemfcmSJaG2M844w7QtX7481LZ3716rRo0a1vjx40Nt8+bNM+ctXbq0xGsF4E4M6QJwvD59+phet5SUFBk8eLDpAdNerOTkZHNch1CDvv32W8nLyzM9cB988EGR1+rRo4d06NAh9Fhz4CuvvCL9+/c3X+/bty90u/LKK81rRXudwtatWyd79+6VX//612HzAbV3sV27dvLmm29W6P3/z//8T9hjXbCi7rrrrrB27elTkd9P32+wR1Lpz/Lss8+Wzz//vELXBcA9GNIF4HhPPvmkKcdSrVo1M8dOw0qVKj/9e1WHbv/4xz+acimF57DpEG0kXe0buWDiwIED8vTTT5tbNBrmSvLFF1+Ye72uSBr4dP5cRURes34/ff9t27YNa2/SpIkZHg5eT1CLFi2KvKbOB9RwDMAfCHwAHE8XGxRXl27FihVm/p7OQ3vqqaekadOmUr16dXnuuedk9uzZRc4v3BsYXKmrdIGFzm+L5rzzzhM7RV5zSYE2mqpVq0ZtD84HBOB9BD4ArqbDsTqM+u9//9usVg3SwFcaOrx52mmnSUFBgRk6LklxASu4ynbLli2hFcRB2hY8Hiv6ehpUdXeOwgsrdKGI9laW5/uVNjwCcCfm8AFwNe290rCigS1Id4so7dZk+vwbbrjBBEct5FxcjTwVrH+noaow7X1s1KiRzJw5M2xIWVf66qrZyJXCFaUreVVmZmZYu9YmVOX5fsW9NwDeQA8fAFfTcKNBp2/fvqZWnc630zl/Or/to48+KtVr/OlPf5KlS5dKly5dZNSoUWaRw/79+81ijcWLF5uvlda80zlyGuy0V1BDkj5H59hNmTLFlGXRRSFaXiVYlkXLvmjJlVg6//zzzfCzzjnUgKbfc82aNaZMy3XXXWdq6ZWV7hyi4Vffhy5U0d5S7a3UIAvA/ejhA+BqGkqeeeYZ2bNnj6mXN2fOHBNarr/++lK/hi4E0cCkgW3+/PmmFp+GNQ16+lpBOjdQQ5UGI105q8Huv//9rzmmde1eeuklUwfw97//vfzv//6vuQZdsFGaHTTK6u9//7vZCm3t2rXmfWt9wbvvvtvUICwPXfChQVYDs9br0/emBZ8BeEOC1max+yIAAAAQP/TwAQAAeByBDwAAwOMIfAAAAB7nusCnq+901ZvW3dLVcTrRuiTz5s0zle71/HPPPTe0JREAAIBfuCrw6Qo43Tty4sSJplyClibQvS6L2/bovffeMyvNdMXZhg0bTLkCvUWrtQUAAOBVrlqlqz16F198sTzxxBPmsVaa183U77jjDpkwYUKR82+88Ub5/vvvzT6bQZdeeqmpN6XlBwAAAPzANYWXtbbV+vXrTZ2pIN08XLdCWrVqVdTnaLv2CBamPYIlVeDXKvmFK+VrqNRaXPXr12frIQAAEFfaD/fdd99Js2bNTM7xXeDbt2+f2TpJC6QWpo83b94c9TlaiDXa+dpenMmTJ5tipgAAAHbJycmR5s2b+y/wVRbtQSzcK6hbDLVo0cL84BMTEwONK1aIXHPNyV9Mh5K7d4/j1QIAAC/Jz88309V0+8ZYck3ga9CggdnOSPenLEwf65ZA0Wh7Wc5Xun+k3iJp2AsFvr59RTR15+Zq32vRF9GhXz2u51WtWsp3CAAAEBDraWSuWaV7yimnSKdOneSdd94Jm1+nj7t27Rr1Odpe+Hy1aNGiYs8vNQ1x06cHvo78QIKPMzMJewAAwBFcE/iUDrX+7W9/M5uXb9q0SW677TazClc3PFc333xz2KKOsWPHysKFC+Xxxx838/wmTZok69atMxujV1h6ukhWlkhycni79uxpux4HAABwANcM6QbLrHz99ddy//33m4UXWl5FA11wYcbOnTvDVrR069ZNZs+eLffee6/84Q9/kDPPPNOs0D3nnHNic0Ea6tLSAnP6du8Wado0MGePnj0AAOAgrqrDZ9fkyaSkJLN4IzSHDwAAwEW5w1VDugAAACg7Ah8AAIDHEfgAAAA8jsAHAADgcQQ+AAAAjyPwAQAAeJyr6vC5TkEBNfoAAIDtCHzxMn++bvUhsmtX+C4cuiUbu3AAAIBKxJBuvMLegAHhYU/l5gba9TgAAEAlIfDFYxhXe/aibWASbMvICJwHAABQCQh8saZz9iJ79iJDX05O4DwAAIBKQOCLNV2gEcvzAAAAKojAF2u6GjeW5wEAAFQQgS/WtPSKrsZNSIh+XNtTUgLnAQAAVAICX6xpnT0tvaIiQ1/wcWYm9fgAAEClIfDFg9bZy8oSSU4Ob9eeP22nDh8AAKhEFF6OFw11aWnstAEAAGxH4IsnDXepqXZfBQAA8DmGdAEAADyOwAcAAOBxBD4AAACPI/ABAAB4HIEPAADA4wh8AAAAHkdZFqcoKKBmHwAAiAsCnxPMny8ydqzIrl3hu3LoFm3sygEAACqIIV0nhL0BA8LDnsrNDbTrcQAAgAog8Nk9jKs9e5ZV9FiwLSMjcB4AAEA5EfjspHP2Inv2IkNfTk7gPAAAgHIi8NlJF2jE8jwAAIAoCHx20tW4sTwPAAAgCgKfnbT0iq7GTUiIflzbU1IC5wEAAJQTgc9OWmdPS6+oyNAXfJyZST0+AABQIQQ+u2mdvawskeTk8Hbt+dN26vABAIAKovCyE2ioS0tjpw0AABAXBD6n0HCXmmr3VQAAAA9iSBcAAMDjCHwAAAAeR+ADAADwOAIfAACAxxH4AAAAPI7ABwAA4HEEPgAAAI8j8AEAAHgcgQ8AAMDjCHwAAAAeR+ADAADwOAIfAACAxxH4AAAAPI7ABwAA4HHV7L4AlFJBgciKFSK7d4s0bSrSvbtI1ap2XxUAAHABAp8bzJ8vMnasyK5dP7U1by4yfbpIerqdVwYAAFyAIV03hL0BA8LDnsrNDbTrcQAAgBIQ+Jw+jKs9e5ZV9FiwLSMjcB4AAEAxCHxOpnP2Inv2IkNfTk7gPAAAgGIQ+JxMF2jE8jwAAOBLBD4n09W4sTwPAAD4EoHPybT0iq7GTUiIflzbU1IC5wEAABSDwOdkWmdPS6+oyNAXfJyZST0+AABQIgKf02mdvawskeTk8Hbt+dN26vABAICToPCyG2ioS0tjpw0AAFAuBD630HCXmmr3VQAAABdiSBcAAMDj6OGzmW6SwUgtAACIJwKfjXQbXN05rfBmGroWQxfmshYDAADECkO6Noa9AQOK7pyWmxto1+MAAACxQOCzaRhXe/Z0K9xIwbaMjMB5AAAAFUXgs4HO2Yvs2YsMfTk5gfMAAAAqisBnA12gEcvzAAAASkLgs4Guxo3leQAAACUh8NlAS6/oatzI7XGDtD0lJXAeAABARRH4bKB19rT0iooMfcHHmZnU4wMAALFB4LOJ1tnLyhJJTg5v154/bacOHwAAiBUKL9tIQ11aGjttAACA+CLw2UzDXWqq3VcBAAC8jCFdAAAAjyPwAQAAeByBDwAAwOMIfAAAAB5H4AMAAPA4Vul6VUEB9V4AAIBB4POi+fNFxo4V2bUrvKKzbu9BRWcAAHyHIV0vhr0BA8LDnsrNDbTrcQAA4CsEPq8N42rPnmUVPRZsy8gInAcAAHyDwOclOmcvsmcvMvTl5ATOAwAAvkHg8xJdoBHL8wAAgCcQ+LxEV+PG8jwAAOAJBD4v0dIruho3ISH6cW1PSQmcBwAAfIPA5yVaZ09Lr6jI0Bd8nJlJPT4AAHyGwOc1WmcvK0skOTm8XXv+tJ06fAAA+A6Fl71IQ11aGjttAAAAg8DnVRruUlPtvgoAAOAADOkCAAB4HIEPAADA4wh8AAAAHkfgAwAA8DgCHwAAgMe5JvDt379fhg0bJomJiVK3bl0ZMWKEHDx4sMTz77jjDjn77LOlVq1a0qJFC7nzzjslLy+vUq8bAADAbq4JfBr2Nm7cKIsWLZIFCxbI8uXLZfTo0cWe/+WXX5rb1KlT5ZNPPpHnn39eFi5caIIiAACAnyRYlmWJw23atEk6dOgga9eulc6dO5s2DW/9+vWTXbt2SbNmzUr1OvPmzZNf/OIX8v3330u1aqUrQZifny9JSUmmZ1B7FwEAAOIlXrnDFT18q1atMsO4wbCn+vTpI1WqVJHVq1eX+nWCP7ySwt6RI0fMD7vwDQAAwM1cEfj27NkjjRo1CmvT0FavXj1zrDT27dsnDz30UInDwGry5MkmWQdvKSkpFbp2AAAAXwe+CRMmSEJCQom3zZs3V/j7aC/d1VdfbYaFJ02aVOK5d999t+kJDN5ycnIq/P0BAAB8u5fu+PHjZfjw4SWe07p1a2nSpIns3bs3rP348eNmJa4eK8l3330nffv2ldNOO01effVVqV69eonn16hRw9wAAAC8wtbA17BhQ3M7ma5du8qBAwdk/fr10qlTJ9O2ZMkSOXHihHTp0qXEnr0rr7zSBLg33nhDatasGdPrBwAAcANXzOFr37696aUbNWqUrFmzRlauXCljxoyRwYMHh1bo5ubmSrt27czxYNi74oorzIrcZ555xjzW+X56KygosPkdAQAA+KSHryxmzZplQl7v3r3N6twbbrhBZsyYETp+7Ngx2bJlixw6dMg8/uCDD0IreNu2bRv2WtnZ2dKyZctKfgcAAAD2cEUdPjtRhw8AAFQWX9fhAwAAQPkR+AAAADyOwAcAAOBxBD4AAACPI/ABAAB4HIEPAADA4wh8AAAAHueawsuoBLoDyYoVIrt3izRtKtK9u0jVqnZfFQAAqCACHwLmzxcZO1Zk166f2po3F5k+XSQ93c4rAwAAFcSQLgJhb8CA8LCncnMD7XocAAC4FoHP73QYV3v2ou2wF2zLyAicBwAAXInA53c6Zy+yZy8y9OXkBM4DAACuRODzO12gEcvzAACA4xD4/E5X48byPAAA4DgEPr/T0iu6GjchIfpxbU9JCZwHAABcicDnd1pnT0uvqMjQF3ycmUk9PgAAXIzAh0CdvawskeTk8Hbt+dN26vABAOBqFF5GgIa6tDR22gAAwIMIfPiJhrvUVLuvAgAAxBhDugAAAB5H4AMAAPA4Ah8AAIDHEfgAAAA8jsAHAADgcQQ+AAAAjyPwAQAAeByBDwAAwOMIfAAAAB5H4AMAAPA4Ah8AAIDHEfgAAAA8jsAHAADgcdXsvgC4VEGByIoVIrt3izRtKtK9u0jVqnZfFQAAiILAh7KbP19k7FiRXbt+amveXGT6dJH0dDuvDAAARMGQLsoe9gYMCA97Kjc30K7HAQCAoxD4ULZhXO3Zs6yix4JtGRmB8wAAgGMQ+FB6OmcvsmcvMvTl5ATOAwAAjsEcPher9HUT+o1ieR4AAKgUBD6XsmXdhKbKWJ4HAAAqBUO6LmTbugntQtRUmZAQ/bi2p6QEzgMAAI5B4HMZW9dN6HixdiGqyNAXfJyZST0+AAAchsDnMravm9Dx4qwskeTk8Hbt+dN26vABAOA4zOFzGUesm9BQl5bGThsAALgEgc9lHLNuQsNdamqcvwkAAIgFAp/LBNdN6AKNaPP4dCqdHrdt3QR77AIA4DjM4XMZR6+b0OXBLVuK9OwpMnRo4F4fs90aAAC2IvC5kCPXTbDHLgAAjpVgWdEGBhGUn58vSUlJkpeXJ4mJieIkjhk91QvRnrzilg8Hx5mzsxneBQDAhtzBHD4Xc8y6ibLUinHEBQMA4C8M6cIjtWIAAEBxCHzwUK0YAAAQDYEPFcceuwAAOBqBDx6vFQMAAAh88HCtGAAAoFili9hhj10AAByJwAeP1ooBAABBDOkCAAB4HIEPAADA4wh8AAAAHkfgAwAA8DgCHwAAgMcR+AAAADyOwAcAAOBxBD4AAACPI/ABAAB4HIEPAADA4wh8AAAAHkfgAwAA8DgCHwAAgMcR+AAAADyumt0XAEhBgciKFSK7d4s0bSrSvbtI1ap2XxUAAJ5B4IO95s8XGTtWZNeun9qaNxeZPl0kPd3OKwMAwDMY0oW9YW/AgPCwp3JzA+16HAAAVBiBD/YN42rPnmUVPRZsy8gInAcAACqEwAd76Jy9yJ69yNCXkxM4DwAAVAiBD/bQBRqxPA8AABSLwAd76GrcWJ4HAACKReCDPbT0iq7GTUiIflzbU1IC5wEAgAoh8MEeWmdPS6+oyNAXfJyZST0+AABigMAH+2idvawskeTk8Hbt+dN26vABABATFF6GvTTUpaWx0wYAAHFE4IP9NNylptp9FQAAeBZDugAAAB5H4AMAAPA4hnThbLq1GvP7AACoEAIfnGv+/MB+u4W3YNMVvFrOhRW8AACUGkO6cG7YGzCg6H67ubmBdj0OAABKhcAHZw7jas+eZRU9FmzLyAicBwAATorAB+fROXuRPXuRoS8nJ3AeAAA4KQIfnEcXaMTyPAAAfI7AB+fR1bixPA8AAJ8j8MF5tPSKrsZNSIh+XNtTUgLnAQCAkyLwwXm0zp6WXlGRoS/4ODOTenwAAJQSgQ/OpHX2srJEkpPD27XnT9upwwcAQKlReBnOpaEuLY2dNgAAqCACH5xNw11qqt1XAQCAq7lmSHf//v0ybNgwSUxMlLp168qIESPk4MGDpXquZVly1VVXSUJCgrz22mtxv1YAAAAncU3g07C3ceNGWbRokSxYsECWL18uo0ePLtVzMzMzTdgDAADwI1cM6W7atEkWLlwoa9eulc6dO5u2v/zlL9KvXz+ZOnWqNGvWrNjnfvjhh/L444/LunXrpCl12wAAgA+5oodv1apVZhg3GPZUnz59pEqVKrJ69epin3fo0CEZOnSoPPnkk9KkSZNSfa8jR45Ifn5+2A0AAMDNXBH49uzZI40aNQprq1atmtSrV88cK864ceOkW7dukqYrPUtp8uTJkpSUFLqlaIFfAAAAF7M18E2YMMHMrSvptnnz5nK99htvvCFLliwx8/fK4u6775a8vLzQLScnp1zfHwAAwClsncM3fvx4GT58eInntG7d2gzH7t27N6z9+PHjZuVucUO1Gva2b99uhoILu+GGG6R79+6ybNmyqM+rUaOGuQEAAHiFrYGvYcOG5nYyXbt2lQMHDsj69eulU6dOoUB34sQJ6dKlS7G9hyNHjgxrO/fcc2XatGnSv3//GL0DAAAA53PFKt327dtL3759ZdSoUTJz5kw5duyYjBkzRgYPHhxaoZubmyu9e/eWF198US655BLT8xet969FixbSqlUrG94FAACAPVyxaEPNmjVL2rVrZ0KdlmO57LLL5Omnnw4d1xC4ZcsWszIXAAAAP0mwdBsKFEvLsuhqXV3Aobt8AAAAuC13uKaHDwAAAOVD4AMAAPA4Ah8AAIDHuWKVLlAuBQUiK1aI7N4tovsod+8uUrWq3VcFAEClI/DBm+bPFxk7VmTXrp/amjcXmT5dJD3dzisDAKDSMaQLb4a9AQPCw57KzQ2063EAAHyEwAfvDeNqz160akPBtoyMwHkAAPgEgQ/eonP2Inv2IkNfTk7gPAAAfILAB2/RBRqxPA8AAA8g8MFbdDVuLM8DAMBvge+tt96SkSNHyu9+9zvZvHlz2LFvv/1WevXqFevrA8pGS6/oatyEhOjHtT0lJXAeAAA+UerAN3v2bLn22mtlz549smrVKrnwwgtl1qxZoeNHjx6V//73v/G6TqB0tM6ell5RkaEv+Dgzk3p8AABfKXXge+yxx+TPf/6zLFiwQFasWCEvvPCC3HrrrfLMM8/E9wqBstI6e1lZIsnJ4e3a86ft1OEDAPhMqQsvb9u2Tfr37x96PGjQIGnYsKHp9Tt27Jhcf/318bpGoOw01KWlsdMGAABlCXyJiYny1VdfSatWrUJtPXv2ND1+11xzjewqqRQGYAcNd6mpdl8FAADuGdK95JJL5O233y7S3qNHD/nXv/4lmTovCgAAAO4NfOPGjZOaNWtGPZaammpC38033xzLawPiS3fbWLZMZM6cwD27bwAAPCrBsqLtQYWg/Px8SUpKkry8PDOsDY/Q/XR1C7bCUxF0UYeu8GVRBwDAY7mDwsvwZ9gbMKDoFmy5uYF2PQ4AgIcQ+OAvOmyrPXvROraDbRkZDO8CADyFwAd/0TItJa0o19CXkxM4DwAAjyDwwV+0Jl8szwMAwMuB77PPPpN///vfcvjwYfOYtR9wBS3AHMvzAADwYuD75ptvpE+fPnLWWWdJv379ZPePPSEjRoyQ8ePHx+MagdjR3TZ0NW7kPrtB2p6SEjgPAAC/Bj6tx1etWjXZuXOn1K5dO9R+4403ysKFC8XrKN3mgd03tPSKigx9wcdaRJwt2AAAfg58//nPf2TKlCnSXHtJCjnzzDPliy++EC/Tah0tW+qWciJDhwbu9TFVPFxG6+xlZYkkJ4e36/+ntZ06fAAAv+6lG/T999+H9ewF7d+/X2rUqCFe9cYbIrqRSORUxWDpNnKCy+iHlZYWWI2r0xJ0zp4O49KzBwDwoDL38HXv3l1efPHF0OOEhAQ5ceKEPProo9JTu7w86ve/p3Sb52i4S00VGTIkcE/YAwB4VJl7+DTY9e7dW9atWydHjx6V3/3ud7Jx40bTw7dy5Urxqi+/LF3pNs0NAAAAru7hO+ecc2Tr1q1y2WWXSVpamhniTU9Plw0bNkibNm3Ezyjd5kGs0gEA+LGHT+mmvvfcc0/sr8blKN3mMboaR7dhK7wzhy7s0FW+TNgEAHi5h69t27YyadIk2bZtm/hJs2aUbvNd2NPVOJHbsAVX6bA0GwDg5cB3++23y5tvvilnn322XHzxxTJ9+nTZs2ePeN2UKYF7Srf5gA7bas8eq3QAAH4uvLx27VrZvHmz2WnjySeflJSUFLniiivCVu96zbXXUrrNN3T1TWTPXnGrdAAAcIEEKwab4L7//vty2223yUcffSQFHuv1yM/PN3MW8/LyJDEx0XTqULrN43SBhlbWPpnZswMlXQAAiFPusHXRRtCaNWtk9uzZ8tJLL5kLHDhwoPildBs8rLSrb1ilAwDw6pCulmSZOHGinHXWWfKzn/1MNm3aZLZa++qrr2Tu3LnxuUqgMmm3rY7Vs0oHAOARZe7ha9eunVmsoYs3Bg8eLI0bN47PlQF2duNq6RVdjavhrvCsB1bpAAD8EPi2bNkiZ555ZnyuBnAKXYWjq3Gi1eHTsMcqHQCA3xZteFm8Jk/CJVilAwDwy6KNevXqmbl7DRo0kNNPP10SipvbJGL21AU8g1U6AAAPKFXgmzZtmpx22mmhr0sKfIDv0AsIAHA4hnRPgiFdlIj9dgEALsgdZS7LUrVqVdm7d2+R9m+++cYcA3yD/XYBAC5R5sBXXIfgkSNH5JRTTonFNQHOx367AAAvlmWZMWOGudf5e3//+9/l1FNPDR3T7dSWL19uavQBvlCW/XZZ9AEAcEvg08UawR6+mTNnhg3fas9ey5YtTTvgC7pAI5bnAQDghMCXnZ1t7nv27Cnz58835VkA32K/XQCAl+fwLV26lLAHsN8uAMDLge+GG26QKVOmFGl/9NFHZeDAgbG6LsAd++2qyNDHfrsAALcHPl2c0a9fvyLtV111lTkG+G6/3eTk8Hbt+dN26vABANw2hy/o4MGDUcuvVK9e3RQLBHxFQ11aGjttAAC81cN37rnnyksvvVSkfe7cudKhQ4dYXRfgvv12hwwJ3BP2AABu7+G77777JD09XbZv3y69evUybe+8847MmTNH5s2bF49rBAAAQGUGvv79+8trr70mjzzyiGRlZUmtWrXkvPPOk8WLF0uPHj0qci2Ad+mOGwz7AgBskmAVt1ca4rqJMXxE99TVbdgK78yhCzt0lS8LOwAAlZA7yjyHTx04cMBsr/aHP/xB9u/fb9o++OADydVN4wGEh70BA4puw6a/K9quxwEAcFoP30cffSR9+vQx6XPHjh2yZcsWad26tdx7772yc+dOefHFF8VL6OFDhYZxW7Ysfs9drdenPX26iw3DuwAAcVAP31133SXDhw+Xbdu2Sc2aNUPtWpuPOnxAITpnr7iwp/TfWjk5gfMAAIijMge+tWvXyq233lqkPTk5Wfbs2ROr6wLcTxdoxPI8AAAqK/DVqFEjaoHlrVu3SsOGDct7HYD36GrcWJ4HAEBlBb5rr71WHnzwQTl27Jh5nJCQYObu/f73vzf77AL4kZZe0Tl6kXvtBml7SkrgPAAAnBT4Hn/8cbO9WqNGjeTw4cOm9l7btm3ltNNOk4cffjg+Vwm4kS7E0NIrKjL0BR9nZrJgAwDg3Dp87777rlmxq+HvoosuMit3vYhVuohLHT7t2dOwRx0+AEAl5A4KL58EgQ8xwU4bAAAbc0eptlabMWOGjB492pRh0a9Lcuqpp0rHjh2lS5cusbpGwP003KWm2n0VAACfKlUPX6tWrWTdunVSv35983VJjhw5Inv37pVx48bJY489Jm5HDx8AAKgsrhrSXbRokQwdOlS+/vprcTsCHwAA8N1OG6Vx2WWXma3WAAAAYL9yBb533nlHrrnmGmnTpo256deLFy8OHa9Vq5aM1VWJAEq/qGPZMpE5cwL3+hgAALsC31NPPSV9+/Y1dfc01OlNuxx1L90nn3wyVtcF+KtsS8uWIj17igwdGrjXx9oOAIAdc/iaN28uEyZMkDFjxoS1a9h75JFHJDc3V7yEOXyIKw11AwaIRP4aBgszZ2VRqw8AfCTfKXP4Dhw4YHr4Il1xxRXm4gCUkg7b6tSHaP/mCrZlZDC8CwCwZy/dV199tUj766+/bubyASglLcRcePeNaKEvJydwHgAAlVF4OahDhw5mz9xly5ZJ165dTdv7778vK1eulPHjx1fkWgB/0V03YnkeAAAVLbxcGgkJCfL555+LlzCHD3Gjq3F1gcbJLF3KLh0A4BP5dm6tlp2dHbNvCOBHup9u8+YiutAp2r+7dOGGHtfzAACwo/Dyvn37zA1ABfbXnT49fFVuUPBxZmbgPAAAKivw6Qrd22+/XRo0aCCNGzc2N/1aS7ToMQBlpCVXtPRKcnJ4u/bsUZIFAFDZdfj2799vFmlonb1hw4ZJ+/btTfunn34qs2fPlpSUFHnvvffk9NNPFy9hDh8qhZZe0dW4ukCjadPAMG5JPXtlPR8A4OvcUerAl5GRYbZU0y3UtGevsD179pg6fL1795Zp06aJlxD44MhizVq/r3BJF+0R1OFhegQBwNXy7S68/Nprr8nUqVOLhD3VpEkTefTRR6PW5wMQh505Iuv36cIPbWc7NgBARQLf7t27pWPHjsUeP+ecc0xPH4A4YWcOAEC8A58uztixY0eJpVvq1atX3usAcDLszAEAiHfgu/LKK+Wee+6Ro0ePFjl25MgRue+++6LusQsgRtiZAwAQz8LL6sEHH5TOnTvLmWeeaUqztGvXTnS9x6ZNm+Spp54yoe8f//hHea8DwMnoatxYngcA8I1Sr9INDtv++te/lv/85z8m7JkXSEiQn//85/LEE09I27ZtxWtYpQvH0Ll5LVuefGcO3RmHEi0A4Er5dm6tVnhP3bffflu+/fZb2bZtm2nTkMfcPaASd+bQ1bga7gqHPnbmAADEems1La58ySWXmBthD6hE7MwBAIh3Dx8AB9BQl5bGThsAgFIj8AFupOEuNbV057INGwD4HoEP8DK2YQMAlHcOHwAXYBs2AMCPCHyAF7ENGwCgEAIf4EVswwYAKITAB3gR27ABAAoh8AFexDZsAAA3Br79+/fLsGHDzDYjdevWlREjRsjBgwdP+rxVq1ZJr169pE6dOua5l19+uRw+fLhSrhmwjZZe0dW4wR04Iml7SkrgPACA57km8GnY27hxoyxatEgWLFggy5cvl9GjR5807PXt21euuOIKWbNmjaxdu1bGjBkjVaq45m0DFduGTUWGPrZhAwDfSbCsaMv4nGXTpk3SoUMHE9g6d+5s2hYuXCj9+vWTXbt2SbNmzaI+79JLL5Wf//zn8tBDDzluE2PAtjp82rOnYY86fADgOPHKHa7o6tKeOh3GDYY91adPH9NTt3r16qjP2bt3rznWqFEj6datmzRu3Fh69Ogh7777bonf68iRI+aHXfgGuJaGuh07RJYuFZk9O3CfnU3YAwCfcUXg27NnjwluhVWrVk3q1atnjkXz+eefm/tJkybJqFGjTI/gRRddJL1795Zt27YV+70mT55sknXwlqK9IYAXtmEbMiRwzzAuAPiOrYFvwoQJkpCQUOJt8+bN5XrtEydOmPtbb71VbrnlFrnwwgtl2rRpcvbZZ8uzzz5b7PPuvvtu040avOVorTLAD7QI87JlInPmBO4pygwAnmHrXrrjx4+X4cOHl3hO69atpUmTJmaItrDjx4+blbt6LJqmP5ab0Ll/hbVv31527txZ7PerUaOGuQG+wp67AOBptga+hg0bmtvJdO3aVQ4cOCDr16+XTp06mbYlS5aYXrwuXbpEfU7Lli3NYo4tW7aEtW/dulWuuuqqGL0DwEN77kau3wruuZuVRegDAJdzxRw+7ZXT8io6F0/Lq6xcudKUVxk8eHBohW5ubq60a9fOHFc6HPzb3/5WZsyYIVlZWfLZZ5/JfffdZ4aItYYfAPbcBQC/sLWHryxmzZplQp4uutDVuTfccIMJc0HHjh0zvXmHDh0KtWVkZMgPP/wg48aNM8O/559/vqnj16ZNG5veBeDiPXd1wQcAwJVcUYfPTtThg6fpAo2hQ09+npZ00VW+AIC48nUdPgBxwp67AOALBL5S0hEtpjHBc9hzFwB8gcBXStdcoyt/AwsaAc9gz10A8AUCXxkEq1QQ+uApWnJFS68kJ4e3a88fJVkAwBNYtFHKyZMieSKSaDo99O+gbkdKpwc8Recs6NyF3bsDc/Z0GJf/kwOAJxZtuKYsi1NQpQKe33O3NAiHAOAqBL5y0r9zgC+xDRsAuA5z+MqJKhXw9TZskcWameAKAI5G4CsjqlTAt9iGDQBci8BXBlSpgK+VZRs2AICjEPjKgCoV8LXSTlxlgisAOA6LNkppwQKRvn3p2YOPsQ0bALgWPXylRNUJ+B7bsAGAaxH4AJQO27ABgGsR+ACUHtuwAYArMYcPQNloqEtLY6cNAHARAh+A+G7DBgCwHYEPQPyx9y4A2IrAByC+2HsXAGzHog0A8cPeuwDgCAQ+APHB3rsA4BgEPgDxwd67AOAYBD4A8cHeuwDgGAQ+APHB3rsA4BgEPgDxwd67AOAYBD4A8cHeuwDgGAQ+APHD3rsA4AgUXgbgvL132ZkDAGKKwAfAWXvvsjMHAMQcQ7oAnIOdOQAgLgh8AJyBnTkAIG4IfACcgZ05ACBuCHwAnIGdOQAgbgh8AJyBnTkAIG4IfACcgZ05ACBuCHwAnIGdOQAgbgh8AJyDnTkAIC4ovAzA/TtzAABKROAD4O6dOQAAJ0XgA+Be7LkLAKVC4APgTuy5CwClxqINAO7DnrsAUCYEPgDuwp67AFBmBD4A7sKeuwBQZgQ+AO7CnrsAUGYEPgDuwp67AFBmBD4A7sKeuwBQZgQ+AO7CnrsAUGYEPgD+23NXV/AuWyYyZ07gnhW9ADyOwssA/LXnLgWbAfhQgmVFK2aFoPz8fElKSpK8vDxJTEwUJ2FXKaCcBZsj/7MXHAouTe8gALgwdzCk6+K/Wy1bivTsKTJ0aOBeH7PBAFAMCjYD8DECnwuxqxRQDhRsBuBjBD6XoZMCKCcKNgPwMQKfy9BJAZQTBZsB+BiBz2XopADKiYLNAHyMwOcydFIA5UTBZgA+RuBzGTopABsKNlOoGYDLUXjZpZ0UuhpXw13hxRt0UgBxKNhMoWYAHkDhZZcWXo72N0h79jTs8TcIiBEKNQPwSO4g8Lk08Cl22gDi/Aum1cyLWxavoU97+rKz+cUD4PjcwZCui+nfmNRUu68C8Kiy1EDiFxGAw7FoAwCioQYSAA8h8AFANNRAAuAhBD4AiIYaSAA8hMAHANFQqBmAhxD4ACDWhZoBwGFYpQsAsSzUHETdJAAOQuADgFjXQGJ3DgAOw5AuAMRjd47IGn65uYF2PQ4AlYzABwCxosO42rMXbQOjYFtGRuA8AKhEBD4AsGN3DgCoRAQ+AIgVducA4FAEPgCIFXbnAOBQBD4AiBV25wDgUAQ+AIgVducA4FAEPgBwyu4cunp32TKROXMC96zmBRAjFF4GACfszkGxZgBxlGBZ0QpGISg/P1+SkpIkLy9PEhMT7b4cAF4u1hz5n+PgMDD79gK+kR+n3MGQLgDYiWLNACoBgQ8A7ESxZgCVgMAHAHaiWDOASkDgAwA7UawZQCUg8AGAnSjWDKASEPgAwE4UawZQCQh8AODmYs0AUAoUXgYAtxZrBoBSIvABgFNouEtNtfsqAHgQQ7oAAAAeR+ADAADwOAIfAACAxxH4AAAAPI5FGwDgNwUFrAYGfIbABwB+Mn++yNixIrt2hdf70+LP1PsDPIshXQDwU9gbMCA87Knc3EC7HgfgSQQ+APDLMK727FlW0WPBtoyMwHkAPIfABwB+oHP2Inv2IkNfTk7gPACe45rAt3//fhk2bJgkJiZK3bp1ZcSIEXLw4MESn7Nnzx656aabpEmTJlKnTh256KKL5JVXXqm0awYAx9AFGrE8D4CruCbwadjbuHGjLFq0SBYsWCDLly+X0aNHl/icm2++WbZs2SJvvPGGfPzxx5Keni6DBg2SDRs2VNp1A4Aj6GrcWJ4HwFUSLCvahA5n2bRpk3To0EHWrl0rnTt3Nm0LFy6Ufv36ya5du6RZs2ZRn3fqqafKX//6V9PLF1S/fn2ZMmWKjBw5slTfOz8/X5KSkiQvL8/0LgKAK+ncvJYtAws0ov1nPyEhsFo3O5sSLYCN4pU7XNHDt2rVKjOMGwx7qk+fPlKlShVZvXp1sc/r1q2bvPTSS2Y4+MSJEzJ37lz54YcfJLWEzcmPHDliftiFbwDgehritPRKMNwVFnycmVl82NPAuGyZyJw5gXsWdwCu4orAp3PxGjVqFNZWrVo1qVevnjlWnJdfflmOHTtmevVq1Kght956q7z66qvStm3bYp8zefJkk6yDt5SUlJi+FwCwjdbZy8oSSU4Ob9eePW0vrg6flmvR3sGePUWGDg3c62PKuACuYWvgmzBhgiQkJJR427x5c7lf/7777pMDBw7I4sWLZd26dXLXXXeZOXw6n684d999t+lGDd5ydNUaAHiFhrodO0SWLhWZPTtwr8O4JYU9avcBrmfrHL6vv/5avvnmmxLPad26tfzzn/+U8ePHy7fffhtqP378uNSsWVPmzZsn119/fZHnbd++3fTkffLJJ9KxY8ewoWBtnzlzZqmukTl8AMTv8/6KK+fCvD8g5uKVO2zdWq1hw4bmdjJdu3Y1PXXr16+XTp06mbYlS5aYeXldunSJ+pxDhw6Ze53nV1jVqlXN8wAAMazdV8LcaAD2c8Ucvvbt20vfvn1l1KhRsmbNGlm5cqWMGTNGBg8eHFqhm5ubK+3atTPHlX6tPXk6b0/btMfv8ccfN2VdrrvuOpvfEQC4ALX7AM9wReBTs2bNMiGud+/ephzLZZddJk8//XTouC7O0Jp7wZ696tWry1tvvWV6EPv37y/nnXeevPjii/LCCy+Y5wMAToLafYBnuKIOn52YwwfAt6jdB1Q6X9fhAwC4sHYfAMcg8AEAKla7j6LMgOPZukoXAOACGurS0gKrcXWBhs7Z69490LOndfjGjg1fzathUHsGi6vtB6DSMYfvJJjDBwBSclHmyD8jweHeknbvABAVc/gAAM6hw7basxetzyDYlpHB8C7gEAQ+AEB8izIDsB1z+AAAzirKrL2C0eYLAig3Ah8AwDlFmVkEAsQFQ7oAgLLTXjcNYpH1+YK0PSUlcF5ZF4FEDhVr4Wdt1+MAyoXABwCwvygzi0CAuCLwAQDiV5S5tFgEAsQVc/gAAPEpyuyURSAACHwAgArScJea6sxFIAAMhnQBAN5cBAIghMAHAPDeIhAAYQh8AADvLQIBEIY5fAAA7y0CARCGwAcA8N4iEABhGNIFAADwOHr4AAD+pLt2MHQMnyDwAQD8R/fl1a3cCu/uoYtDdKUwi0PgQQzpAgD8F/YGDCi6lVtubqBdjwMeQ+ADAPhrGFd79nRv3kjBtoyMwHmAhxD4AAD+oXP2Inv2IkNfTk7gPMBDCHwAAP/QBRqxPA9wCQIfAMA/dDVuLM8DXILABwDwDy29oqtxI/frDdL2lJTAeYCHEPgAAP6hdfa09IqKDH3Bx5mZ1OOD5xD4AAD+onX2srJEkpPD27XnT9upwwcPovAyAMB/NNSlpbHTBnyDwAcA8CcNd6mp8f0ebN8GhyDwAQAQD2zfBgdhDh8AALHG9m1wGAIfAACxxPZtcCACHwAAscT2bXAgAh8AALHE9m1wIAIfAACxxPZtcCACHwAAscT2bXAgAh8AALHE9m1wIAIfAACxxvZtcBgKLwMAEA9s3wYHIfABAODG7dvYtg1lQOADAMBt2LYNZcQcPgAA3IRt21AOBD4AANyCbdtQTgQ+AADcgm3bUE4EPgAA3IJt21BOBD4AANyCbdtQTgQ+AADcgm3bUE4EPgAA3KIyt23ThR/LlonMmRO4ZyGIqxH4AABwk8rYtk1Lu7RsKdKzp8jQoYF7fUzJF9dKsKxoa7sRlJ+fL0lJSZKXlyeJiYl2Xw4AAPHdaSNY5y8yHgR7ENkL2JW5g8B3EgQ+AICvQqT25BVX+kVDn/YkZmezjZvLcgdDugAAIIA6f55F4AMAAAHU+fMsAh8AAAigzp9nEfgAAEAAdf48i8AHAAAqv84fKhWBDwAAVG6dP1S6apX/LQEAgKNpqEtLi0+dP9iCwAcAAIrScJea6q2i0j5G4AMAAM6hO32MHRteD1CHk3VuIcPJ5cYcPgAA4AzBbd0iiz/n5gba2cu33Ah8AADAfjqMqz170XZ8DbZlZATOQ5kR+AAAgP3Y1i2uCHwAAMB+bOsWVwQ+AABgP7Z1iysCHwAAsB/busUVgQ8AANiPbd3iisAHAAD8ua1bQYHIsmUic+YE7j28ApjCywAAwH/bus33V4HnBMuKVvAGQfn5+ZKUlCR5eXmSmJho9+UAAIBYFXi2rOhDx/HoTbQ5dzCkCwAA/KPAnwWeCXwAAMA/VvizwDOBDwAA+MdufxZ4JvABAAD/aOrPAs8EPgAA4B/d/VngmcAHAAD8o6o/CzwT+Epp3jzP12QEAMAf0mNY4NklxZupw1fKejgieSKS6OWajAAA+EtBQcUKPMeheHO86vAR+MoY+BxQkxEAAHi0eHM+gc8ZgS/4WWqAz8723BA/AAAoTc9gy5bF1/OrQFBgpw0H8WhNRgAA4NHizQS+CvBYTUYAAODR4s0EvgrwWE1GAABgZ/Hm4CKSOCDwlYNHazICAAC7ijfrIhCdF3jNNRIPBL4y8nBNRgAAYEfx5uCK35LmBVYQga+MylOTEQAAeEx6jIo36zCu1vKLc9EUyrKUcnn03/+eJ23aJJa5JiMAAPCwggoWb9bdOXr2DD3MFxFTDC7GZVmqxeyVPG7gQJEY/twBAIAXVK0qkppa/udX0kpehnQBAAA8XvKDwAcAAODUFb8xQuADAABw4orfGCLwAQAAOHHFbwwR+AAAAJwQ+nbsEFmwIC4vzyrdUpo3T6RNm7KvtgZgb8UDL+JnAnhU1apx28aLwFdKI0cG7nVepQ61U3jZOfjj592fhxaf13qkhYvP+/13kJ8JAE8P6T788MPSrVs3qV27ttStW7dUz9Ga0vfff780bdpUatWqJX369JFt27ZV6DpycwO7n+h/dGG/4NaDWrNy6NDAvT726+fjpZ9HcTsN+fl3kJ8JAM8HvqNHj8rAgQPltttuK/VzHn30UZkxY4bMnDlTVq9eLXXq1JErr7xSfvjhh3JfR3BfkoyMQE8K7MMfP+/+PEraacivv4P8TAD4amu1559/XjIyMuTAgQMlnqdvq1mzZjJ+/Hj5zW9+Y9p0m5LGjRub1xg8eHCZtlYTyROR8K02li6tWHFtlJ/+UdOeq+L2mdaV7TrMlZ3t3uFMP/88InYaKpaffgf5mQD+kP9j7mBrtVLKzs6WPXv2mGHcIP0BdunSRVatWlVs4Dty5Ii5BekP/Kfd7cJt3y5y0UVxuHiclM5RKy7cKP1nTE6OyMKFcZv/6ihe+3no71Zpz/PL7yA/E8A/gU/FvD/OcpnnnnvOSkpKOul5K1eu1J+U9eWXX4a1Dxw40Bo0aFCxz5s4caJ5Hjdu3Lhx48aNm9h02759uxVLtvbwTZgwQaZMmVLiOZs2bZJ27dpV2jXdfffdctddd4Ue69DxGWecITt37vxxaBdO/5dRSkqK5OTkxLQrHPHDZ+YufF7uw2fmLjqy2KJFC6lXr15MX9fWwKfz64YPH17iOa1bty7Xazdp0sTcf/XVV2aVbpA+vuCCC4p9Xo0aNcwtkoY9flHcQz8rPi934TNzFz4v9+Ezc5cqVap4J/A1bNjQ3OKhVatWJvS98847oYCn/8rR1bplWekLAADgdq4py6JDqh9++KG5LygoMF/r7eDBg6FzdOj31VdfNV8nJCSY1bx//OMf5Y033pCPP/5Ybr75ZrNy97rrrrPxnQAAAFQu16zS1QLKL7zwQujxhRdeaO6XLl0qqT/WINiyZUuhVbUiv/vd7+T777+X0aNHm7l4l112mSxcuFBq1qxZ6u+rw7sTJ06MOswL5+Hzch8+M3fh83IfPjN3idfn5bo6fAAAAPDokC4AAADKh8AHAADgcQQ+AAAAjyPwAQAAeByBL4qHH35YunXrJrVr15a6deuW6jm69kVXEmuR51q1apk9fLdt2xb3a4XI/v37ZdiwYaagqH5eI0aMCCvXE43us3zTTTeZWo116tSRiy66SF555ZVKu2a/K89npnQf7F69epnPTJ97+eWXy+HDhyvlmv2svJ9X8L+NV111lSmV9dprr8X9WlG+z0zPv+OOO+Tss882f8N0p4c777wzrPIFYufJJ5+Uli1bmqohXbp0kTVr1pR4/rx580zpOT3/3HPPlbfeeqvM35PAF8XRo0dl4MCBZSrQ/Oijj8qMGTNk5syZpriz/kG68sor5YcffojrtULMf9Q2btwoixYtkgULFsjy5ctNKZ6SaE1GLeMTrNGYnp4ugwYNkg0bNlTadftZeT4zDXt9+/aVK664wvzHce3atTJmzJiYV6NHbD6voMzMTBP24OzP7MsvvzS3qVOnyieffCLPP/+8KWOmQRGx9dJLL5ktXLX0ygcffCDnn3++yQt79+6Nev57770nQ4YMMZ+F/o3SWsJ608+pTGK6M6/HPPfcc1ZSUtJJzztx4oTVpEkT67HHHgu1HThwwKpRo4Y1Z86cOF+lv3366admk+m1a9eG2t5++20rISHBys3NLfZ5derUsV588cWwtnr16ll/+9vf4nq9KP9n1qVLF+vee++tpKtERT8vtWHDBis5OdnavXu3eY1XX321Eq4YFfnMCnv55ZetU045xTp27FicrtSfLrnkEuv2228PPS4oKLCaNWtmTZ48Oer5gwYNsq6++uoi/z289dZby/R9+adxDGRnZ5shQh3GLbz3rnbTaq8E4kd/vjpc0blz51Cbfg7a66M9rcXRIXv9V5YOY5w4cULmzp1remODRbzhrM9M/+Wrxxo1amQ+u8aNG0uPHj3k3XffrcQr96fy/o4dOnRIhg4daoaugnubw9mfWSQdztUh4WrVXLNHgytGENevXx+WF/Rz0cfF5QVtL3y+0h7BsuYLAl8MaNhT+keoMH0cPIb40J+vhoDC9D9O9erVK/Fn//LLL8uxY8ekfv36ppr5rbfearbla9u2bSVctb+V5zP7/PPPzf2kSZNk1KhRZqhJ51327t2bubIO/R0bN26cCedpaWmVcJWIxWdW2L59++Shhx4q9dA9pNQ/V90etix5QdtjkS98E/gmTJhg5pGUdNu8ebPdl4lK+rzuu+8+s93e4sWLZd26dWY+hc7h0/l8cN5npr2wSoP5LbfcYrZWnDZtmplg/uyzz8b4nfhDPD8vnRu7ZMkSM38P7vs7lp+fL1dffbV06NDB/CML3uCbftrx48fL8OHDSzyndevW5Xrt4HDFV199ZVbpBunjCy64oFyv6Xel/bz0Zx850fX48eNmqLa4YaTt27fLE088YSa8duzY0bTppNkVK1aY4SddeANnfWbB3yv9A1RY+/btZefOnRW+dj+K5+elYU9/zyKrHNxwww3SvXt3WbZsWQzegf/E8zML+u6778ziqNNOO82MelSvXj0m146ABg0aSNWqVU0+KEwfF/fZaHtZzhe/B76GDRuaWzy0atXK/ODfeeedUMDTfyHpXImyrPRF2T+vrl27mp46nRPRqVOn0B8b7RHSOZTFzS1Skas79Zcw2JMEZ31mWr6gWbNmZmV1YVu3bjUlP+Csz0t7okaOHBnWpqUktFe2f//+MXoH/hPPzyz4d0vnhuk0F+2l1RIgiK1TTjnFfCaaF3SlrdLPRR9r1YHiPk89npGREWrT1dfaXiblXGTiaV988YVZXfbAAw9Yp556qvlab999913onLPPPtuaP39+6PGf/vQnq27dutbrr79uffTRR1ZaWprVqlUr6/Dhwza9C//o27evdeGFF1qrV6+23n33XevMM8+0hgwZEjq+a9cu83npcXX06FGrbdu2Vvfu3U3bZ599Zk2dOtWsYHvzzTdtfCf+UdbPTE2bNs1KTEy05s2bZ23bts2s2K1Zs6b5/OC8zysSq3Sd/Znl5eWZlZ/nnnuu+Z3SldXB2/Hjx218J94zd+5cU8Xj+eefNyuqR48ebfLDnj17zPGbbrrJmjBhQuj8lStXWtWqVTN/pzZt2mRNnDjRql69uvXxxx+X6fsS+KL45S9/af7jFHlbunRp6Bx9rGVbCpdmue+++6zGjRubD7J3797Wli1bbHoH/vLNN9+Y/5BpONdAcMstt4SF8+zs7CKf39atW6309HSrUaNGVu3ata3zzjuvSJkWOOszU1q2oHnz5uYz69q1q7VixQobrt5/yvt5FUbgc/ZnpvfR/u7pTc9FbP3lL3+xWrRoYcreaJmW999/P3SsR48eJodElsg566yzzPkdO3YsV+dEgv5PxTooAQAA4GS+WaULAADgVwQ+AAAAjyPwAQAAeByBDwAAwOMIfAAAAB5H4AMAAPA4Ah8AAIDHEfgAAAA8jsAHwFd0X97MzMwKn1NRzz//vNStWzeu3wMAggh8ADwhJydHfvWrX0mzZs3MBuVnnHGGjB07Vr755psyv9batWtl9OjRMbu2aAHyxhtvlK1bt0o8/fDDDzJ8+HA599xzpVq1aqHN2gH4D4EPgOt9/vnn0rlzZ9m2bZvMmTNHPvvsM5k5c6a888470rVrV9m/f3+ZXq9hw4ZSu3ZtiadatWpJo0aN4vo9CgoKzPe58847pU+fPnH9XgCcjcAHwPVuv/1206v3n//8R3r06CEtWrSQq666ShYvXiy5ublyzz33hJ3/3XffyZAhQ6ROnTqSnJwsTz75ZIk9cgcOHJCRI0eaIJiYmCi9evWS//u//wt7zr/+9S+5+OKLpWbNmtKgQQO5/vrrTXtqaqp88cUXMm7cOElISDC3yCFd7enT9s2bN4e95rRp06RNmzahx5988ol5X6eeeqo0btxYbrrpJtm3b1+xPxd9f3/9619l1KhR0qRJk3L8ZAF4BYEPgKtp792///1v+fWvf216swrTkDNs2DB56aWXxLKsUPtjjz0m559/vmzYsEEmTJhghn4XLVpU7PcYOHCg7N27V95++21Zv369XHTRRdK7d+9Qz+Gbb75pAl6/fv3Ma2rP4iWXXGKOzZ8/X5o3by4PPvig7N6929winXXWWaaHctasWWHt+njo0KGh0KlB88ILL5R169bJwoUL5auvvpJBgwZV8CcIwA+q2X0BAFAROoyrYa59+/ZRj2v7t99+K19//XVoCPVnP/uZCXrBsLVy5UrTm/bzn/+8yPPfffddWbNmjQl8NWrUMG1Tp06V1157TbKyssxcv4cfflgGDx4sDzzwQOh5GihVvXr1pGrVqnLaaaeV2MumwfSJJ56Qhx56KNTrp+Hyn//8p3msxzTsPfLII6HnPPvss5KSkmLO1fcBAMWhhw+AJxTuwTsZndcX+XjTpk1Rz9Wh24MHD0r9+vXNUGrwlp2dLdu3bzfnfPjhh6bHryI0MO7YsUPef//9UO+e9iS2a9cudB1Lly4Nu4bgseB1AEBx6OED4Gpt27Y18980sAXnzRWm7aeffrqZf1ceGvaaNm0qy5YtK3IsOAcvcii5PLT3T4dsZ8+eLZdeeqm5v+2228Kuo3///jJlypQiz9XrA4CS0MMHwNW0502HYp966ik5fPhw2LE9e/aYnjItgRJcLKGCvWiFHxc3JKy9bPo6WtZEw2Xhmy7OUOedd56Zt1ccXVCiK2ZPJjjfcNWqVWblsfb6Fb6OjRs3mgUlkdehizMAoCQEPgCup/Pbjhw5IldeeaUsX77c1OTTRQ0aBHUVrs6xK0zn7D366KNm7puu0J03b55ZuBGNljPRIV+tYaergHXY9b333jMrf3XxhJo4caIpB6P32qP48ccfh/XEaUjT69IVwyWtqk1PTzcriLVnr2fPnqamYOGVyLpIRFcXa51AHcbVxSq33HJLiWHy008/NUPO+ty8vDzztd4A+IwFAB6wY8cO65e//KXVuHFjq3r16lZKSop1xx13WPv27Qs774wzzrAeeOABa+DAgVbt2rWtJk2aWNOnTy9yzrRp00KP8/PzzWs1a9Ys9NrDhg2zdu7cGTrnlVdesS644ALrlFNOsRo0aGClp6eHjq1atco677zzrBo1auhEQ9P23HPPWUlJSUXex6BBg8w5zz77bJFjW7duta6//nqrbt26Vq1atax27dpZGRkZ1okTJ4r9ueh70deLvAHwlwT9H7tDJwA4ic6J09WyWnsPALyARRsA8KNDhw6Z4V6tb9exY0e7LwcAYoY5fADwo6efftoslMjIyChSugUA3IwhXQAAAI+jhw8AAMDjCHwAAAAeR+ADAADwOAIfAACAxxH4AAAAPI7ABwAA4HEEPgAAAI8j8AEAAIi3/T/b2PYsyteZogAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_pareto_front(res_HVPI)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Volume of dominated region" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:06:29.196389Z", "start_time": "2021-01-05T06:06:29.191710Z" } }, "outputs": [ { "data": { "text/plain": [ "0.32877907991633726" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res_HVPI.pareto.volume_in_dominance([-1,-1],[0,0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### EHVI (Expected Hyper-Volume Improvement)\n", "\n", "The expected improvement of the non-dominated region in the multi-dimensional objective function space is obtained as score. \n", "\n", "- Reference\n", " - Couckuyt, Ivo, Dirk Deschrijver, and Tom Dhaene. \"Fast calculation of multiobjective probability of improvement and expected improvement criteria for Pareto optimization.\" Journal of Global Optimization 60.3 (2014): 575-594." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:08:41.237335Z", "start_time": "2021-01-05T06:06:29.201353Z" } }, "outputs": [], "source": [ "policy = physbo.search.discrete_multi.Policy(test_X=test_X, num_objectives=2)\n", "policy.set_seed(0)\n", "\n", "policy.random_search(max_num_probes=10, simulator=simu)\n", "res_EHVI = policy.bayes_search(max_num_probes=40, simulator=simu, score='EHVI', interval=10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Plotting the Pareto solution" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:08:41.386473Z", "start_time": "2021-01-05T06:08:41.239067Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnwAAAJwCAYAAAATL7wtAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAABGTElEQVR4nO3dCXiU1dn/8XsIEBYlyB6SICAqizsoQk0JSxVRjIaACFWxLP5VNEFaC7WIS5WiWBIr1tdapb5FQGJQi4oFgRIRWRRfFdlElCRsIkJEkCXM/7rPODEzWUjCbM+Z7+e6psmc55mZZzKN/HKW+7jcbrdbAAAAYK1a4b4AAAAABBeBDwAAwHIEPgAAAMsR+AAAACxH4AMAALAcgQ8AAMByBD4AAADLEfgAAAAsR+ADAACwHIEPACLAli1b5Morr5S4uDhxuVzy2muvhfuSAFiEwAcgYs2cOdOEH++tXr16cs4558jYsWNl9+7dIb+eHTt2yIMPPigff/xxwJ/71ltvlU8//VQeffRR+d///V/p1q2bhNLnn39u3ttXX30V0tcFEBq1Q/Q6AFBjDz/8sLRr105+/PFHee+99+Rvf/ubvPXWW/LZZ59JgwYNQhr4HnroIWnbtq1cdNFFAXvew4cPy8qVK+X+++83YTYcNPDpe0tJSTHvD4BdCHwAIt7VV19d0uM1atQoadq0qfzlL3+R119/XW666aYaP++JEyfk6NGjpucwnL755hvztXHjxic994cffpCGDRuG4KoA2IQhXQCO06dPH/N127Zt5uu0adOkZ8+eJgjWr19funbtKjk5OWUep8PC2oM2a9Ys6dKli8TGxsrChQvNscLCQvnNb34jLVu2NO16/IUXXih57LJly+TSSy813992220lw8w67Ow1b94889p6Dc2aNZNf//rX5nkro8OoZ555pvn+d7/7nXlObw+bHtP72vs2bNgwOeOMM+SKK64wx44fPy6PPPKInHXWWeZ69TF/+MMf5MiRIz7Pr+3XXnut6Rm97LLLTLht3769vPTSSyXn6HsYPHiw+b53794l703fMwA70MMHwHG2bt1qvmrAU9nZ2XLdddfJ8OHDTY/dnDlzTIBZsGCBXHPNNT6PXbJkibzyyism+Gko00Ck8wEvv/zykkDYvHlzefvtt2XkyJFSVFQkmZmZ0qlTJzO0/MADD8iYMWMkOTnZPJ8GTW9o0iCooXDKlCnmOfW6VqxYIevWrauw9y4tLc0cGzdunOmtHDBggJx22mk+5+h7Ofvss+Wxxx4Tt9td0tP5z3/+U9LT02X8+PGyatUq87obNmyQ+fPn+zz+iy++MOfp+9G5ghpkR4wYYcKpBttf/vKXcs8998hTTz1lQqO+V+X9CsACbgCIUC+++KKmG/fixYvd33zzjTs/P989Z84cd9OmTd3169d3FxQUmPMOHTrk87ijR4+6zzvvPHefPn182vW5atWq5V6/fr1P+8iRI93x8fHuvXv3+rQPHTrUHRcXV/L8a9asMc+h1+X/ei1atDCvefjw4ZL2BQsWmPMfeOCBSt/ntm3bzHlPPPGET/vkyZNN+0033eTT/vHHH5v2UaNG+bT/9re/Ne1LliwpaTvzzDNN2/Lly0va9uzZ446NjXWPHz++pG3evHnmvKVLl1Z6rQCciSFdABGvX79+ptctKSlJhg4danrAtBcrISHBHNchVK/vvvtODhw4YHrgPvroozLP1atXL+ncuXPJfc2Br776qgwcONB8v3fv3pLbVVddZZ6rvOcpbe3atbJnzx658847feYDau9ix44d5c033zyl9////t//87mvC1bUvffe69OuPX3K//X0/Xp7JJX+LM8991z58ssvT+m6ADgHQ7oAIt6MGTNMOZbatWubOXYaVmrV+vnvVR26/dOf/mTKpZSew6ZDtP50ta//gon9+/fLc889Z27l0TBXma+//tp81evyp4FP58+dCv9r1tfT99+hQwef9latWpnhYe/1eLVp06bMc+p8QA3HAKIDgQ9AxNPFBhXVpcvLyzPz93Qe2jPPPCPx8fFSp04defHFF+Xll18uc37p3kDvSl2lCyx0flt5LrjgAgkn/2uuLNCWJyYmptx273xAAPYj8AFwNB2O1WHUd955x6xW9dLAVxU6vHn66adLcXGxGTquTEUBy7vKdtOmTSUriL20zXs8UPT5NKjq7hylF1boQhHtrazJ61U1PAJwJubwAXA07b3SsKKBzUt3i6jq1mT6+EGDBpngqIWcK6qRp7z17zRUlaa9jy1atJBnn33WZ0hZV/rqqln/lcKnSlfyqqysLJ92rU2oavJ6Fb03AHaghw+Ao2m40aDTv39/U6tO59vpnD+d3/bJJ59U6Tn+/Oc/y9KlS6V79+4yevRos8hh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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_pareto_front(res_EHVI)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Volume of dominated region" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:08:41.402348Z", "start_time": "2021-01-05T06:08:41.394521Z" } }, "outputs": [ { "data": { "text/plain": [ "0.3200467412741881" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res_EHVI.pareto.volume_in_dominance([-1,-1],[0,0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### TS (Thompson Sampling)\n", "\n", "In Thompson Sampling for the single objective case, at each candidate (test_X), sampling is performed from the posterior distribution of the objective function, and the candidate with the largest value is recommended as the next search point. In the multi-objective case, one candidate is randomly selected as the next search point from among the candidates with the maximum value based on the Pareto rule for the sampled values, i.e., the Pareto-optimal candidates.\n", "\n", "- Reference\n", " - Yahyaa, Saba Q., and Bernard Manderick. \"Thompson sampling for multi-objective multi-armed bandits problem.\" Proc. Eur. Symp. Artif. Neural Netw., Comput. Intell. Mach. Learn.. 2015." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:09:52.534284Z", "start_time": "2021-01-05T06:08:41.405209Z" } }, "outputs": [], "source": [ "policy = physbo.search.discrete_multi.Policy(test_X=test_X, num_objectives=2)\n", "policy.set_seed(0)\n", "\n", "policy.random_search(max_num_probes=10, simulator=simu)\n", "res_TS = policy.bayes_search(max_num_probes=40, simulator=simu, score='TS', interval=10, num_rand_basis=5000)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Plotting the Pareto solution" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:09:52.716955Z", "start_time": "2021-01-05T06:09:52.535519Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnwAAAJwCAYAAAATL7wtAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAABB4UlEQVR4nO3dB3xUVd7/8V8gEGqCoZcgTWmCBQThD1JFQBENggirohQfFQVk1wUVsSOCElhRHh9XkeehSdVFxaUuRaSJqyJNRIFIREQSKdJy/6/fiTObhCRMkmn3zOf9el2GOffOzJncJPPNuadEOY7jCAAAAKxVJNQVAAAAQGAR+AAAACxH4AMAALAcgQ8AAMByBD4AAADLEfgAAAAsR+ADAACwHIEPAADAcgQ+AAAAyxH4ACAM7NmzR7p06SJxcXESFRUlixcvDnWVAFiEwAcgbE2fPt2EH89WokQJufzyy2Xo0KHy008/Bb0+P/74ozz99NPyxRdf+P2577nnHvnqq6/khRdekP/93/+V5s2bSzB988035r19//33QX1dAMERHaTXAYACe/bZZ6V27dry+++/y7p16+SNN96Qjz76SL7++mspVapUUAPfM888I7Vq1ZKrrrrKb8976tQp2bBhgzzxxBMmzIaCBj59b+3btzfvD4BdCHwAwl63bt28LV6DBg2S8uXLy6uvvirvv/++3HnnnQV+3vT0dDlz5oxpOQyln3/+2dyWK1fuoseeOHFCSpcuHYRaAbAJl3QBuE7Hjh3N7b59+8ztxIkTpXXr1iYIlixZUpo1aybz58+/4HF6WVhb0GbOnCmNGzeWmJgYWbp0qdmXnJws9913n1SuXNmU6/63337b+9jVq1fLtddea/5/7733ei8z62Vnj3nz5pnX1jpUqFBB/vSnP5nnzYteRr300kvN///yl7+Y5/S0sOk+va+tb/369ZNLLrlE2rRpY/adO3dOnnvuOalbt66prz7m8ccfl9OnT2d5fi2/+eabTctoixYtTLitU6eOzJgxw3uMvofevXub/3fo0MH73vQ9A7ADLXwAXGfv3r3mVgOemjx5stxyyy3Sv39/02I3Z84cE2CWLFkiN910U5bHrly5Ut577z0T/DSUaSDS/oDXXXedNxBWrFhRPv74Yxk4cKCkpaXJ8OHDpWHDhubS8lNPPSVDhgyRtm3bmufToOkJTRoENRSOGzfOPKfWa/369bJt27ZcW+8SExPNvhEjRpjWyu7du0uZMmWyHKPv5bLLLpMXX3xRHMfxtnS+++67cvvtt8vIkSNl48aN5nV37NghixYtyvL4b7/91hyn70f7CmqQHTBggAmnGmyvv/56eeSRR2TKlCkmNOp7VZ5bABZwACBMvfPOO5punOXLlzs///yzc+DAAWfOnDlO+fLlnZIlSzoHDx40x508eTLL486cOeNcccUVTseOHbOU63MVKVLE2b59e5bygQMHOlWrVnWOHDmSpbxv375OXFyc9/k3b95snkPrlf31KlWqZF7z1KlT3vIlS5aY45966qk83+e+ffvMcRMmTMhSPnbsWFN+5513Zin/4osvTPmgQYOylP/5z3825StXrvSWXXrppaZszZo13rLDhw87MTExzsiRI71l8+bNM8etWrUqz7oCcCcu6QIIe507dzatbgkJCdK3b1/TAqatWNWrVzf79RKqx6+//iqpqammBe7zzz+/4LnatWsnjRo18t7XHLhgwQLp0aOH+f+RI0e824033mieK6fnyWzLli1y+PBhefDBB7P0B9TWxQYNGsiHH35YqPf/X//1X1nu64AV9eijj2Yp15Y+lf319P16WiSVfi3r168v3333XaHqBcA9uKQLIOxNnTrVTMcSHR1t+thpWClS5D9/r+ql2+eff95Ml5K5D5teos1OR/tmHzBx7NgxefPNN82WEw1zefnhhx/MrdYrOw182n+uMLLXWV9P33+9evWylFepUsVcHvbUx6NmzZoXPKf2B9RwDCAyEPgAhD0dbJDbvHRr1641/fe0H9rrr78uVatWlWLFisk777wjs2bNuuD4zK2BnpG6SgdYaP+2nDRt2lRCKXud8wq0OSlatGiO5Z7+gADsR+AD4Gp6OVYvo37yySdmtKqHBj5f6OXNsmXLyvnz582l47zkFrA8o2x37drlHUHsoWWe/f6iz6dBVVfnyDywQgeKaGtlQV7P1/AIwJ3owwfA1bT1SsOKBjYPXS3C16XJ9PG9evUywVEncs5tjjzlmf9OQ1Vm2vpYqVIlmTZtWpZLyjrSV0fNZh8pXFg6klclJSVlKde5CVVBXi+39wbADrTwAXA1DTcadLp27WrmqtP+dtrnT/u3ffnllz49x0svvSSrVq2Sli1byuDBg80gh6NHj5rBGsuXLzf/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x8dL0aJFpWzZsnm2smkwfe211+S5557ztvppuPy///s/c1/3adh78cUXvY95++23JSEhwRyr7wMAckMLHwArZG7Buxjt15f9/o4dO3I8Vi/dHj9+XMqXL28upXq2ffv2yd69e80xX3zxhWnxKwwNjN9//7189tln3tY9bUls0KCBtx6rVq3KUgfPPk89ACA3tPABcLV69eqZ/m8a2Dz95jLT8ksuucT0vysIDXtVq1aV1atXX7DP0wcv+6XkgtDWP71kO2vWLLnuuuvM7QMPPJClHj169JDx48df8FitHwDkhRY+AK6mLW96Kfb111+XU6dOZdmXkpJiWsp0ChTPYAnlaUXLfD+3S8LayqbPo9OaaLjMvOngDNW0aVPTby83OqBER8xejKe/4YYNG8zIY231y1yP7du3mwEl2euhgzMAIC8EPgCup/3bTp8+LTfeeKOsWbPGzMmngxo0COooXO1jl5n22Xv55ZdN3zcdoTtv3jwzcCMnOp2JXvLVOex0FLBedv3000/NyF8dPKHGjh1rpoPRW21R/Oqrr7K0xGlI03rpiOG8RtUmJiaaEcTastehQwczp2Dmkcg6SERHF+s8gXoZVwer3HvvvXmGyW+++cZcctbHpqammv/rBiDCOABgge+//9655557nMqVKzvFihVzEhISnIcfftg5cuRIluMuvfRS55lnnnF69+7tlCpVyqlSpYozefLkC46ZNGmS935aWpp5rmrVqnmfu3///s7+/fu9xyxYsMC56qqrnOLFizsVKlRwEhMTvfs2bNjgNG3a1ImJidGOhqbsnXfeceLi4i54H3369DHHvP322xfs2717t3Pbbbc55cqVc0qWLOk0aNDAGT58uJOenp7r10Xfiz5f9g1AZInSf0IdOgEgnGifOB0tq3PvAYANGLQBAH84efKkudyr89s1btw41NUBAL+hDx8A/OHNN980AyWGDx9+wdQtAOBmXNIFAACwHC18AAAAliPwAQAAWI7ABwAAYDkCHwAAgOUIfAAAAJYj8AEAAFiOwAcAAGA5Ah8AAIDY7f8DgtLGBlKeUpsAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_pareto_front(res_TS)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Volume of dominated region" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:09:52.722260Z", "start_time": "2021-01-05T06:09:52.718300Z" }, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "0.23103794208330097" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res_TS.pareto.volume_in_dominance([-1,-1],[0,0])" ] }, { "cell_type": "markdown", "metadata": { "code_folding": [] }, "source": [ "### Appendix: Full search\n", "\n", "In `random_search`, you can easily do a full search by passing the number of all data (`N = test_X.shape[0]`) to `max_num_probes`. \n", "Since it takes time to evaluate all data, reduce the number of data in advance." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:09:53.049904Z", "start_time": "2021-01-05T06:09:52.723545Z" } }, "outputs": [], "source": [ "test_X_sparse = np.array(list(itertools.product(np.linspace(-2, 2, 21), repeat=2)))\n", "simu_sparse = Simulator(test_X_sparse)\n", "\n", "policy = physbo.search.discrete_multi.Policy(test_X=test_X_sparse, num_objectives=2)\n", "policy.set_seed(0)\n", "\n", "N = test_X_sparse.shape[0]\n", "res_all = policy.random_search(max_num_probes=N, simulator=simu_sparse)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Plotting the Pareto solution" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:09:53.212669Z", "start_time": "2021-01-05T06:09:53.051682Z" } }, "outputs": [ { "data": { "image/png": "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Nm7cKJUrVy7ernPz+XkevmQGdjBvHwAA8GTgW7lypdx5552ltmtT7o4dO+wql+dpTZ/27UMW08Q/aZLI0KHBa84AAAAOSbhJt1KlSlEnWN6wYYPUrl3brnL5gg7kQJbSyRq1mleTf8iIEXTwBAB4o4bvmmuukT/84Q9y+PBhczsnJ8f03fvd735n1tnFcTpqF1ka9rQjZ3jYU8zcDQBwSMKjdHXUyA033CCrVq2SH374QRo0aGCactu1aydvvvmmVKtWTbJplG4sOlp33z6maMk62myra/CVDHvh+OUAALh9lK4WYv78+fL222+bEbu6tu4FF1xgRu76WblyIseOxZ6OpSRtueP7PAtpx814YS+8g2deXqZKBQDIcgkHvpD27dubS7b45huRv/89coLle+8t3U2LefiynNWOm3TwBAC4LfA9/vjjMmjQIDMNi/4/nhNPPFHOPPNMadu2rfiJ1taVrJDRUMdKG0iq4yYdPAEAbuvD17RpU9Nn75RTTjH/j+fgwYOyc+dOyc/Pl/GhGYg9LF1t6fAp+vABALzah2/z5s1R/x+L9vHr27evLwIfkBANcdqmH+93nw6eAACv9OGLR/v23asd3IBsFOrASQdPAIBXp2VRb731lhQUFMjatWvN7VatWkleXp4vR+rSpIuUmnfp4AkAcEHuSDjwTZs2Te655x4zF5/OvafeffddmT17tgmBd911l/gJgQ8AAGRd4GvUqJGMHj1ahgwZErF96tSp8sc//lG2bdsmfnzjx44tlGHDcqmgAQAAngt8CS+ttmfPHunWrVup7ZdffrkpnF+NGSNSpQqrYgEAgCxZS/eVV14ptf21116THj16iJ/pShsshQoAAHw78XJI69at5dFHH5XFixdH9OFbtmyZDB8+XLLBhAnBCZdp3gUAAL6aeNnSk+XkyOeffy5+bEsX0ebq423pOrPGyJGOFg0AAPhMkVsmXkbQa68R+AAAgM8nXt61a5e5rlWrlp3lQZKY8g0AANgyaENH6Oo8exry6tatay76f52iRe/LJj17imvoIBJdvjU/X2TKlOC13s704BINnZMmiQwdGrzW2wAAwHmW5+HbvXu3GaSh8+z169fPrK6hPv30U5kxY4Y0btxY3nnnHTn55JPF7334cnJEDhxwRw2ahrp4y7Zqs3MmVvLScrCSGAAAHp94WZdO0yXVFixY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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_pareto_front(res_all)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Volume of dominated region" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "ExecuteTime": { "end_time": "2021-01-05T06:09:53.218237Z", "start_time": "2021-01-05T06:09:53.214184Z" } }, "outputs": [ { "data": { "text/plain": [ "0.30051687493437484" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res_all.pareto.volume_in_dominance([-1,-1],[0,0])" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.19" } }, "nbformat": 4, "nbformat_minor": 4 }