{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "\n", "import estimagic as em" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Numerical optimization\n", "\n", "Using simple examples, this tutorial shows how to do an optimization with estimagic. More details on the topics covered here can be found in the [how to guides](../how_to_guides/index.md)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Basic usage of `minimize`" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "def sphere(params):\n", " return params @ params" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0., -0., -0., -0., -0.])" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res = em.minimize(\n", " criterion=sphere,\n", " params=np.arange(5),\n", " algorithm=\"scipy_lbfgsb\",\n", ")\n", "\n", "res.params.round(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## `params` do not have to be vectors\n", "\n", "In estimagic, params can by arbitrary [pytrees](https://jax.readthedocs.io/en/latest/pytrees.html). Examples are (nested) dictionaries of numbers, arrays and pandas objects. " ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "def dict_sphere(params):\n", " return params[\"a\"] ** 2 + params[\"b\"] ** 2 + (params[\"c\"] ** 2).sum()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'a': -6.821706323446569e-25,\n", " 'b': 2.220446049250313e-16,\n", " 'c': 0 8.881784e-16\n", " 1 8.881784e-16\n", " 2 1.776357e-15\n", " dtype: float64}" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res = em.minimize(\n", " criterion=dict_sphere,\n", " params={\"a\": 0, \"b\": 1, \"c\": pd.Series([2, 3, 4])},\n", " algorithm=\"scipy_powell\",\n", ")\n", "\n", "res.params" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The result contains all you need to know" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Minimize with 5 free parameters terminated successfully after 805 criterion evaluations and 507 iterations.\n", "\n", "The value of criterion improved from 30.0 to 1.6760003634613059e-16.\n", "\n", "The scipy_neldermead algorithm reported: Optimization terminated successfully.\n", "\n", "Independent of the convergence criteria used by scipy_neldermead, the strength of convergence can be assessed by the following criteria:\n", "\n", " one_step five_steps \n", "relative_criterion_change 1.968e-15*** 2.746e-15***\n", "relative_params_change 9.834e-08* 1.525e-07* \n", "absolute_criterion_change 1.968e-16*** 2.746e-16***\n", "absolute_params_change 9.834e-09** 1.525e-08* \n", "\n", "(***: change <= 1e-10, **: change <= 1e-8, *: change <= 1e-5. Change refers to a change between accepted steps. The first column only considers the last step. The second column considers the last five steps.)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res = em.minimize(\n", " criterion=dict_sphere,\n", " params={\"a\": 0, \"b\": 1, \"c\": pd.Series([2, 3, 4])},\n", " algorithm=\"scipy_neldermead\",\n", ")\n", "res" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## You can visualize the convergence" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAArwAAAH0CAYAAADfWf7fAAAgAElEQVR4Xu3dCXhVxfnH8VdBEIJlCSUIkc1KMEhkaYGgoCVoC4jUKiCIiFaqoLYuWESFWrD8XUAoRZBWWUSkINjiArQSWhYJxhJZKiUJhAoBSiAoS2SL8n/e0XN7s957M7knd/me5/FRkzPnzPnMEH6ZO2fmgvPnz58XDgQQQAABBBBAAAEEIlTgAgJvhLYsj4UAAggggAACCCBgBAi8dAQEEEAAAQQQQACBiBYg8EZ08/JwCCCAAAIIIIAAAgRe+gACCCCAAAIIIIBARAsQeCO6eXk4BBBAAAEEEEAAAQIvfQABBBBAAAEEEEAgogUIvBHdvDwcAggggAACCCCAAIGXPoAAAggggAACCCAQ0QIE3ohuXh4OAQQQQAABBBBAgMBLH0AAAQQQQAABBBCIaAECb0Q3Lw+HAAIIIIAAAgggQOClDyCAAAIIIIAAAghEtACBN6Kbl4dDAAEEEEAAAQQQIPDSBxBAAAEEEEAAAQQiWoDAG9HNy8MhgAACCCCAAAIIEHjpAwgggAACCCCAAAIRLUDgjejm5eEQQAABBBBAAAEECLz0AQQQQAABBBBAAIGIFiDwRnTz8nAIIIAAAggggAACBF76AAIIIIAAAggggEBECxB4I7p5eTgEEEAAAQQQQAABAi99AAEEEEAAAQQQQCCiBQi8Ed28PBwCCCCAAAIIIIAAgZc+gAACCCCAAAIIIBDRAgTeiG5eHg4BBBBAAAEEEECAwEsfQAABBBBAAAEEEIhoAQJvRDcvD4cAAggggAACCCBA4KUPIIAAAggggAACCES0AIE3opuXh0MAAQQQQAABBBAg8NIHEEAAAQQQQAABBCJagMAb0c3LwyGAAAIIIIAAAggQeOkDCCCAAAIIIIAAAhEtQOCN6Obl4RBAAAEEEEAAAQQIvPQBBBBAAAEEEEAAgYgWIPBGdPPycAgggAACCCCAAAIEXvoAAggggAACCCCAQEQLEHgjunl5OAQQQAABBBBAAAECL30AAQQQQAABBBBAIKIFCLwR3bw8HAIIIIAAAggggACBlz6AAAIIIIAAAgggENECBN6Ibl4eDgEEEEAAAQQQQIDASx9AAAEEEEAAAQQQiGgBAm9ENy8PhwACCCCAAAIIIEDgpQ8ggAACCCCAAAIIRLQAgTeim5eHQwABBBBAAAEEECDw0gcQQAABBBBAAAEEIlqAwBvRzcvDIYAAAggggAACCBB46QMIIIAAAggggAACES1A4I3o5uXhEEAAAQQQQAABBAi89AEEEEAAAQQQQACBiBYg8EZ08/JwCCCAAAIIIIAAAgRe+gACCCCAAAIIIIBARAsQeCO6eXk4BBBAAAEEEEAAAQIvfQABBBBAAAEEEEAgogUIvBHdvDwcAggggAACCCCAAIGXPoAAAggggAACCCAQ0QIE3ohuXh4OAQQQQAABBBBAgMBLH0AAAQQQQAABBBCIaAECb0Q3Lw+HAAIIIIAAAgggQOClDyCAAAIIIIAAAghEtACBN6Kbl4dDAAEEEEAAAQQQIPDSBxBAAAEEEEAAAQQiWoDAG9HNy8MhgAACCCCAAAIIEHjpAwgggAACCCCAAAIRLUDgjejm5eEQQAABBBBAAAEECLz0AQQQQAABBBBAAIGIFiDwRnTz8nAIIIAAAggggAACBF76AAIIIIAAAggggEBECxB4I7p5eTgEEEAAAQQQQAABAi99AAEEEEAAAQQQQCCiBQi8Ed28PBwCCCCAAAIIIIAAgZc+gAACCCCAAAIIIBDRAgTeiG5eHg4BBBBAAAEEEECAwEsfQAABBBBAAAEEEIhoAQJvRDcvD4cAAggggAACCCBA4KUPIIAAAggggAACCES0AIE3opuXh0MAAQQQQAABBBAg8NIHEEAAAQQQQAABBCJagMAb0c3LwyGAAAIIIIAAAggQeOkDCCCAAAIIIIAAAhEtQOCN6Obl4RBAAAEEEEAAAQQIvPQBBBBAAAEEEEAAgYgWIPBGdPPycAgggAACCCCAAAIEXvoAAggggAACCCCAQEQLEHgjunl5OAQQQAABBBBAAAECL30AAQQQQAABBBBAIKIFCLwR3bw8HAIIIIAAAggggACBlz6AAAIIIIAAAgggENECBN6Ibl4eDgEEEEAAAQQQQIDASx9AAAEEEEAAAQQQiGgBAm9ENy8PhwACCCCAAAIIIEDgpQ8ggAACCCCAAAIIRLQAgTeim5eHQwABBBBAAAEEECDw0gcQQAABBBBAAAEEIlqAwBvRzcvDIYAAAggggAACCBB46QMIIIAAAggggAACES1A4I3o5uXhEEAAAQQQQAABBAi89AEEEEAAAQQQQACBiBYg8EZ08/JwCCCAAAIIIIAAAgReiz5wxRVXSHZ2tsUVKIoAAggggAACCCAQbAECr4UwgdcCj6IIIIAAAggggIBLAgReC2gCrwUeRRFAAAEEEEAAAZcECLwW0AReCzyKIoAAAggggAACLgkQeC2gCbwWeBRFAAEEEEAAAQRcEiDwWkATeC3wKIoAAggggAACCLgkQOC1gCbwWuBRFAEEEEAAAQQQcEmAwGsBTeC1wKMoAggggAACCCDgkgCB1wKawGuBR1EEEEAAAQQQQMAlAQKvBTSB1wKPoggggAACCCCAgEsCBF4LaAKvBR5FEUAAAQQQQAABlwQIvBbQBF4LPIoigAACCCCAAAIuCRB4LaAJvBZ4FEUAAQQQQAABBFwSIPBaQBN4LfAoigACCCCAAAIIuCRA4LWAJvBa4FEUAQQQQAABBBBwSYDAawHtT+DNOpYnsRfHSGzNGIs7URQBBBBAAAEEEECgogIE3orKiYivwJt/pkCeTF9u7jC7+xCLO1EUAQQQQAABBBBAoKICBN6KyvkReFP375QlORnmDk937C2XxdS3uBtFEUAAAQQQQAABBCoiQOCtiNq3ZXyN8M7csU625ueasx9NSpGEunEWd6MoAggggAACCCCAQEUECLwVUfMz8N63/k3P1Qm8FtAURQABBBBAAAEELAQIvBZ45Y3wZh47JC9tS/Vc/a7WXaVbXCuLu1EUAQQQQAABBBBAoCICBN6KqPkxwrt492ZZcyDTc/WbmrWTfs3bWdyNoggggAACCCCAAAIVESDwVkTNj8CrqzPoKg1X1G0k2cfyhMBrAU1RBBBAAAEEEEDAQoDAa4FX1pQGZzpDg5oxZhrDe3u3E3gtnCmKAAIIIIAAAgjYCBB4LfTKCrzzstIk7dAe6dkkQdo3jDdzeXWkd3RSL4u7URQBBBBAAAEEEECgIgIE3oqofVumtMD7ZeFZs9nEqa/OyaTO/eXI6ZMEXgtjiiKAAAIIIIAAArYCURV4t23bJs8884zk5ORI48aN5Ve/+pX07NnTGK5du1YmTJgghw8flg4dOsiUKVOkYcOG5fqWFng3HsqR+VmbPCO6zvQGRnhtuyrlEUAAAQQQCL5ARfJA8GvFHWwFoibwnj9/Xnr06CGjR4+Wm2++WdasWSOPPPKIfPzxx3LmzBkTfKdNmyZdunSRyZMny8GDB2X69OkBBV7v0V1nGTL92iNpS6VWtYtkWrcBtu1FeQQQQAABBBAIksDx48crlAeCVB0uW4kCURN4T58+LStXrpRbbrnFw3fVVVeZr23fvl2WLl0qc+bMMd87ceKEJCcnS0ZGhtSoUaNM7uIjvM5SZMVHc50NKGZ3H1KJTcelEEAAAQQQQKAyBVasWFGhPFCZdeBawRGImsDrzXf27FnToRcuXCjvvPOOzJ49W44cOSLjx4/3nKaBd9GiRdKiRQufgVdHcXXN3Xc/227O1bm7sTVjPOUIvMHpvFwVAQQQQCD8BXQlo6o4dLnQ4sfMmTMrlAeqov7cMzCBqAu8qampMnLkSImLi5OXX35ZkpKSzHzdwsJCGTNmjEfv+uuvF+34iYmJ5mszZswoIfu73/1Oes75TZGvD2zVUVKatinytbHpy+XomYISQTiwpuJsBBBAAAEEIk/AGRRy+8lK+9TVnzzgdj25X+UIRF3gVTYNtx999JE89thjsmzZMjPKe+DAAZk4caJHtVOnTuZ7zgjvX/7ylxLijz/+uCfw6jSGuxOSi4zsOgUmb1ttNp94NClFEurGVU7LcRUEEEAAAQQiQCCURnhnzZrlMw9EAHlUPkLUBN78/HzZsGGD9O/f39PQQ4cOldtvv12qV68uCxYsMFMc9MjLy5OUlBTZvHlzQHN4y+pBBN6o/LPFQyOAAAIIhJnAqlWrKpQHwuwxo7K6URN4jx07ZlZp0JUXrrvuOtm5c6cMHjxYFi9eLE2aNDEBVz/K6Ny5s0yaNElOnjxpVmso7yhr44niZZzAOzKxh7SPjY/KjsZDI4AAAgggEOoC+nd/RfJAqD8X9ROJmsCrja1r67344ouyf/9+qV+/vpnLO2DAN0uFpaWlybhx48zoroZePU/PqYzAqy+zsb0wf9wQQAABBBAIfYGK5IHQfypqGFWBt7Kb298RXgJvZctzPQQQQAABBBBAwH8BAq//ViXOJPBa4FEUAQQQQAABBBBwSYDAawHtb+Ddkp8rs3ask6tj42VUYg+LO1IUAQQQQAABBBBAIFABAm+gYl7n+xt4M48dkpe2pUrxHdgsbk1RBBBAAAEEEEAAAT8FCLx+QpV2GoHXAo+iCCCAAAIIIICASwIEXgtofwOvbj38SNpSqVXtIpnW7ZtVITgQQAABBBBAAAEE3BEg8Fo4+xt49RYPb3xLTn11TqYm3ya1q9ewuCtFEUAAAQQQQAABBAIRIPAGolXs3EACL7utWUBTFAEEEEAAAQQQsBAg8FrgBRJ4F+/eLGsOZMrAVh0lpWkbi7tSFAEEEEAAAQQQQCAQAQJvIFoWI7yp+3fKkpwM6dkkQQZd3snirhRFAAEEEEAAAQQQCESAwBuIlkXg9V6a7LKY+ma0t31svIxkXV6LFqAoAggggAACCCDgW4DA69uozDMCmdLgvVKDXlBfYNPj0aQUSagbZ1ELiiKAAAIIIIAAAgiUJ0DgtegfgQRevY2zUoP3LWNrxsjTHXuzcoNFO1AUAQQQQAABBBAg8AapDwQaeJ2VGrQ6+vLaxkM5klvwhdzVuqt0i2sVpFpyWQQQQAABBBBAILoFGOG1aP9AA6+zUoPeclLn/pL5xSGZn7VJdJRX/58DAQQQQAABBBBAoPIFCLwWpoEGXmelhviYejKuYx9z57Hpy+XomQLm8lq0A0URQAABBBBAAIHyBAi8Fv0j0MDr3EpfYHN2W3v3s+3y3t7tkhzXUoa3TraoDUURQAABBBBAAAEEShMg8Fr0i4oGXu9b5p8pkCfTl5svze4+xKI2FEUAAQQQQAABBBAg8FZyH6iMwKtVmpixwry8xhJlldxAXA4BBBBAAAEEEBARRngtukFlBd55WWmSdmgPqzVYtAVFEUAAAQQQQACBsgQIvBZ9o7ICrzOP96Zm7aRf83YWNaIoAggggAACCCCAQHEBAq9Fn6iswOu97fDopF4WNaIoAggggAACCCCAAIG3EvtAZQVe58W1WtUukmndBlRiDbkUAggggAACCCCAACO8Fn2gsgKvVuG+9W+amkxNvo1thi3ahKIIIIAAAggggAAjvJXYByoz8DrbDrNSQyU2EJdCAAEEEEAAAQRYpcGuD1Rm4HVWahjYqqOkNG1jVzFKI4AAAggggAACCHgEmNJg0RkqM/A6KzX0bJIggy7vZFEriiKAAAIIIIAAAgh4CxB4LfpDZQZeZ6WG+Jj6MqptD4mtGWNRM4oigAACCCCAAAIIOAIEXou+UJmB13uLYa0SUxssGoaiCCCAAAIIIICAlwCB16I7VGbg1WroKG/q/kzZmp8rV9RtJKzJa9E4FEUAAQQQQAABBL4VIPBadIXKDrxalX0Fn8uzGStFpzaM69jbonYURQABBBBAAAEEEFABAq9FPwhG4NXqOGvyzu4+xKJ2FEUAAQQQQAABBBAg8Fr2gWAHXjahsGwgiiOAAAIIIIAAAozw2vWBYAVeNqGwaxdKI4AAAggggAAC3gJMabDoD8EOvCMTe0j72HiLGlIUAQQQQAABBBBAgMBr0QeCFXidTShuatZO+jVvZ1FDiiKAAAIIIIAAAggQeC36AIHXAo+iCCCAAAIIIICASwJRFXh37dol48aNk507d0rDhg3liSeekJSUFDl79qy0bdtWatSo4WHXr0+fPr3cZghW4HV2XWMtXpf+FHAbBBBAAAEEEIhogagKvH369JGBAwfKsGHDZMOGDfLQQw/Jpk2b5OTJk9K3b19JT08PqLEJvAFxcTICCCCAAAIIIFAlAlETeAsLC2XZsmVy6623SvXq1Q12hw4dZPny5aLfGzFihKSmpgbUCMEKvFoJ1uINqCk4GQEEEEAAAQQQKFMgagJvcYGtW7fKgw8+KGvXrpVt27bJqFGjpFWrVpKVlSUJCQkyYcIEadmypadYQUFBCcT27dtLdnZ2ULoXgTcorFwUAQQQQAABBKJQICoD7759++See+6RZ555Rq655hrRub1z586VO++804TeGTNmmNHe999/39MlfvKTn5ToHp9++mnQAi9r8Ubhn0YeGQEEEEAAAQSCIhB1gVdfWHvggQfkqaeekp49e5aKqlMckpKSZM2aNdK4ceMy4YM5pYHAG5T+zkURQAABBBBAIAoFoirw7t27V+6++2554YUXpFOnTp7mzsvLk2PHjokGWD101QYNvBs3bpQGDRpUSeBdvHuzrDmQKT2bJMigy/9X1yjsozwyAggggAACCCBgJRBVgXfo0KEyePBgsyKD96ErNowdO1YWLVokl156qZnSsH79elm6dGm5uMEc4d2SnyuzdqyTWtUukkmd+0vt6v9bMs2qxSmMAAIIIIAAAghEmUDUBF6dt6tTGLzX2tW2njp1qtx4443y6quvyvz58+XUqVNmdFdfWouPL39b32AGXq2bM61BtxfWbYY5EEAAAQQQQAABBAIXiJrAGziN7xLBDrz5Zwpk4uYVcuqrc/J0x95yWUx935XiDAQQQAABBBBAAIEiAgReiw4R7MDrPcqrI7w60suBAAIIIIAAAgggEJgAgTcwryJnuxF43/1su7y3d7vc1Kyd9GvezqK2FEUAAQQQQAABBKJTgMBr0e4EXgs8iiKAAAIIIIAAAi4JEHgtoN0IvKn7d8qSnAyWJ7NoJ4oigAACCCCAQHQLEHgt2t+NwJt57JC8tC1VrqjbSEYn9bKoLUURQAABBBBAAIHoFCDwWrQ7gdcCj6IIIIAAAggggIBLAgReC2g3Au++gs/l2YyVEh9TX8Z17G1RW4oigAACCCCAAALRKUDgtWh3NwKvVu++9W+aWs7uPsSithRFAAEEEEAAAQSiU4DAa9Hubgde3WJ4XmaaqfFjzOe1aDmKIoAAAggggEA0CRB4LVrbrcD78Ma3zG5rd7XuKvOzNjHaa9FmFEUAAQQQQACB6BMg8Fq0uVuBd/K21ZJ9LE+ujo2Xrfm5psaPJqVIQt04i9pTFAEEEEAAAQQQiA4BAq9FO7sdeHVpMg2+euhob7e4Vha1pygCCCCAAAIIIBAdAgRei3Z2K/DOy0qTtEN7itSUrYYtGo6iCCCAAAIIIBBVAgRei+Z2K/C++9l2eW/v9iI11ekNoxJ7WNSeoggggAACCCCAQHQIEHgt2rkqAy/r8lo0HEURQAABBBBAIKoECLwWze1W4N14KMezOkODmjFy9EyBqTXr8lo0HkURQAABBBBAIGoECLwWTe1W4M08dkhe2pZqaqovruWfLjChV9flja0ZY/EEFEUAAQQQQAABBCJfgMBr0cZVEXh7NkkQ3W5YV2tgaTKLxqMoAggggAACCESNAIHXoqndCrxfFp6VR9KWmpoObNVRjpwukDUHMoWVGiwaj6IIIIAAAgggEDUCBF6LpnYr8GoV71v/pqmpjupmfZFnVm3Q0d5Bl3eyeAKKIoAAAggggAACkS9A4LVoYzcDr+62psfdCcly5PRJM6dX5/OOTupl8QQURQABBBBAAAEEIl+AwGvRxm4GXu9qOi+xEXgtGo+iCCCAAAIIIBA1AgRei6auqsCrVXamOLA0mUUDUhQBBBBAAAEEokKAwGvRzAReCzyKIoAAAggggAACLgkQeC2gqzLwjk1fzlq8Fm1HUQQQQAABBBCIHgECr0VbV2Xg1ZfYWIvXovEoigACCCCAAAJRI0DgtWhqAq8FHkURQAABBBBAAAGXBAi8FtBVGXjf/Wy7WYuXzScsGpCiCCCAAAIIIBAVAgRei2Ym8FrgURQBBBBAAAEEEHBJgMBrAV2VgXfjoRyZn7VJkuNayvDWyRZPQVEEEEAAAQQQQCCyBQi8Fu1blYGXzScsGo6iCCCAAAIIIBBVAgRei+Ym8FrgURQBBBBAAAEEEHBJgMBrAV2VgVerzW5rFo1HUQQQQAABBBCIGgHXAm9hYaFs3rxZcnNz5dZbbzXAJ0+elDp16oQtNoE3bJuOiiOAAAIIIIBAFAm4EnhzcnJkxIgRcvjwYTl16pRkZ2eb4Nu/f3957bXXpH379mFJXtWBl93WwrLbUGkEEEAAAQQQcFnAlcA7fPhwufrqq+UXv/iFtGnTxgRePV5//XV57733ZMmSJa489q5du2TcuHGyc+dOadiwoTzxxBOSkpJi7r127VqZMGGCCeUdOnSQKVOmmHPKO6o68LLbmivdhpsggAACCCCAQJgLuBJ4O3XqJBs3bpSaNWuKd0g8d+6c6Pe2bdvmCmOfPn1k4MCBMmzYMNmwYYM89NBDsmnTJtF69OzZU6ZNmyZdunSRyZMny8GDB2X69OlhEXhHJvaQ9rHxrhhyEwQQQAABBBBAINwEXAm83//+92XFihXSqFGjIoF39+7dMnjwYElPTw+6m84hXrZsmZk/XL16dXM/Hcldvny5/Otf/5KlS5fKnDlzzNdPnDghycnJkpGRITVq1CizblU9wstua0HvNtwAAQQQQAABBCJAwJXAq9MI9uzZY6Y03HHHHSZkZmZmyssvvyzXXnutPPPMM65Tbt26VR588EEzleGVV16RI0eOyPjx4z310MC7aNEiadGiBYHX9dbhhggggAACCCCAQOUJuBJ4T58+baYLaID88ssvTe1jYmJkyJAh8stf/tJMdXDz2Ldvn9xzzz0maF9zzTVmvq6OAI8ZM8ZTjeuvv15mzpwpiYmJ5muzZs0qUcWXXnrJMx/Zzfo792KEtyrUuScCCCCAAAIIhJuAK4HXQTl//rx5KezCCy/0+UJYsCD1hbUHHnhAnnrqKTNv1wmzBw4ckIkTJ3puq3OLdQqEM8L79ttvl6iSBmTnBbxg1be867LbWlWoc08EEEAAAQQQCDcBVwLvBx98UKaLjqz27t3bFbe9e/fK3XffLS+88IJ5Wc45Vq1aJQsWLJCFCxeaL+Xl5ZnVG3Td4FCew0vgdaXbcBMEEEAAAQQQCHMBVwLvD37wgyJMX3/9tRw/flwuvvhiadq0qWjgdOMYOnSoeUmub9++RW6nG2BowNWpDZ07d5ZJkyaZTTF0tYbyjqp+aY3A60av4R4IIIAAAgggEO4CrgTe0pAKCgrMS2stW7aUAQMGBN1R5+3qFIbiI7ZTp06VG2+8UdLS0swavTq6q6H3xRdflPr164d04M0/UyBPpi+X2JoxMqlz/6AbcgMEEEAAAQQQQCAcBaos8DpYOtr6/vvvh6NdkSXWquoB7lv/prn17O5DqqoK3BcBBBBAAAEEEAhpgSoNvLpiQ69evcymFOF4VPWUBjUj8IZjz6HOCCCAAAIIIOCmgCuB97HHHivxTLq7me6wduWVV5a65JebCBW9F4G3onKUQwABBBBAAAEE3BNwJfDq3Njih76wpvN3f/KTn0jt2rXde+JKvFMoBN6JGSskt+ALeTQpRRLqxlXi03EpBBBAAAEEEEAgMgRcCbyRQVXyKUIh8E7etlqyj+UReCO1k/FcCCCAAAIIIGAtELTAq9v2+nvMmDHD31ND6jwCb0g1B5VBAAEEEEAAAQRKFQha4H322Wf9Jn/66af9PjeUTgyFwDtzxzrZmp8rIxN7SPvY+FDioS4IIIAAAggggEBICAQt8Pr7dHPmzJF77rnH39ND6rxQCLzvfrZd3tu7XW5q1k76NW8XUj5UBgEEEEAAAQQQCAUB1wLv1q1b5dNPP5UzZ854nls3eXjzzTdFvxeOR6QF3n0Fn8upwnMSH1NPalevEY5NQp0RQAABBBBAAIESAq4E3rlz58oLL7xgVmX4z3/+YzZs0H/HxcXJiBEjXNlpLRhtH2mB13kBjtHiYPQWrokAAggggAACVSXgSuDt0aOHTJ482WzZe91118natWvl5MmTMnr0aBk8eLD5WjgeoRB4t+Tnyqwd6+Tq2Hg5VXjWMA68vJNcFlP+tsileRN4w7EXUmcEEEAAAQQQ8CXgSuBt27atfPLJJ1KjRg3R8Ltu3TpTr6NHj8qQIUNk1apVvuoZkt8PhcCbeeyQvLQtVRrUjJGjZwqM012tu0q3uFYBmxF4AyajAAIIIIAAAgiEgYArgffGG2+UMWPGSEpKitx0003y/PPPi4bgEydOyLXXXsscXouO4gRe70tUdEoCgdeiISiKAAIIIIAAAiEr4Erg/ctf/iKPP/64fPjhh7Js2TLRlRmSk5MlMzNTmjRpIjrHNxyPUBrh9fa7om4jGZ3UK2BSAm/AZBRAAAEEEEAAgTAQcCXwqsOePXukWbNmcuGFF8rSpUslIyNDLr30Uhk2bJjUq1cvDKhKVjEUAq/W6r71bxapXK1qF8m0bgMCNnUCb3JcSxneOjng8hRAAAEEEEAAAQRCUcCVwKsvrOlUhjZt2oSiQYXrFIqBV8Puqa/OyaTO/SW2ZkxAz+YE54qOEAd0M05GAAEEEEAAAQRcEnAl8A4cONC8tHb55Zeb4Kv/tGjRwqVHDN5tQjHwasR6780AACAASURBVFjNPpZXoZ3XCLzB6ytcGQEEEEAAAQSqTsCVwKuPp5tMfPDBB/LXv/5V0tPTzWivBt++ffuaqQ3heIRK4B2bvtys0KBhN6FuXIV3XiPwhmMvpM4IIIAAAggg4EvAtcDrXZEvvvhC/vGPf8hbb71lwm92draveobk90Ml8HrPvW0fe5lZl7ci0xIIvCHZzagUAggggAACCFgKuB54//Wvf5mR3tTUVLPbmi5L9sorr1g+RtUUD7XAO7BVR2nf8DJ5Mn25mb+r83gDOZzAGx9TX8Z17B1IUc5FAAEEEEAAAQRCVsCVwLtx40YTclevXm02m9CQ26dPH7Mub506dUIWx1fFQiXw5p8pkCOnT5rd1WpXryEPb3zLvLg2Nfk28//+Ht6rPczuPsTfYpyHAAIIIIAAAgiEtIArgTcxMVGuueYaE3JvuOGGsA653q0ZKoG3eA9zpjg8mpRi5vT6c3xZeFYeSVvqOZXA648a5yCAAAIIIIBAOAi4Enh1R7VLLrkkHDwCqmOoBt7FuzfLmgOZEsiOa8V3bCPwBtQVOBkBBBBAAAEEQljAlcAbws9vVbVQDbwbD+XI/KxNcnVsvIxK7OHXMxJ4/WLiJAQQQAABBBAIQwECr0WjhWrg3VfwuTybsTKgF9cIvBYdgaIIIIAAAgggENICBF6L5gnVwKuP5LyA5u+La8UD79Mde5uX4DgQQAABBBBAAIFwFyDwWrRgKAfeQF9cKx54A3nhzYKQoggggAACCCCAQNAFXAm8mZmZMnXqVNmzZ4+cPn26xEOtXbs26A8ajBuEcuB1XlzTtXlTmrbx+fgEXp9EnIAAAggggAACYSrgSuC9+eabpUWLFtK9e3epUaPkurD9+we2QUKoWIdy4E3dv1OW5GRIclxLGd462SeZc75zIiO8Psk4AQEEEEAAAQTCRMCVwNujRw9Zt25dmJD4X81QDrzOiK2/Wwy/+9l2eW/vds/DE3j97weciQACCCCAAAKhLeBK4L3ttttk3rx5EbPhhNOkoRx4dfc13WK4VrWLZFq3AT57YfHAOzKxh7SPjRe9TtqhHGlQM0a6xbXyeR1OQAABBBBAAAEEQk3AlcCrWwq/+eabMnDgQGnSpIlccMEFRRzatWsXai5+1SeUA68+gLNSgz+bSBQPvM6mFc5IcXxMfRnXsbdfLpyEAAIIIIAAAgiEkoArgVeDYXlHdnZ2KJn4XZdQD7xj05fL0TMFMqlzf7Mmb3lHWYF3S36uzNrxzXQUf4Kz33iciAACCCCAAAIIuCTgSuD98ssvpVq1amU+Us2aNV163Mq9TagH3kCWJisr8Hp/ncBbuf2HqyGAAAIIIICAOwKuBF59FF2OLC0tTXJzc82TNW/eXLp27Vrqqg3uPLr9XUI98M7csU625ueKMx+3vCd2ljHTOb+nvjonzpQGAq99P+EKCCCAAAIIIFC1Aq4E3l27dsnQoUPl+PHjEhsba574yJEj0qhRI1m4cKHEx8dXrUIF7x7qgdcJq054Le8xndFgXdUh+1heqYHXn6kRFaSkGAIIIIAAAgggEDQBVwLvnXfeKYmJifKLX/xCYmK+mUt64sQJmTx5shw8eFD+8Ic/BO0Bg3nhcAm8PZskyKDLO5VL4QRePXfNgUxxljObl5UmaYf2mLIsVRbM3sS1EUAAAQQQQCBYAq4E3o4dO8qGDRukdu3aRZ7j5MmT8sMf/lA+/vjjYD1fieu+8847Mm7cOHnuueekd+9vVh04e/astG3btsj0ipSUFJk+fXq59Qr1wBvIWrxO4NXRYF2P1wm8ztcJvK51UW6EAAIIIIAAApUs4Erg1R3WFi9ebJYk8z50dPemm26SzZs3V/JjlX65OXPmSHp6uhw+fFjuvfdeT+DV/+/bt6/5XiAHgTcQLc5FAAEEEEAAAQSqRsCVwPub3/xGPvnkExk1apS0atVKzp8/Lzk5OTJz5kwzsjpp0iRXnn7Hjh1y5ZVXyl133SWDBw/2BF6ty4gRIyQ1NTWgeoR64NWH8XctXn9GeP2ZCxwQICcjgAACCCCAAAIuCLgSeE+dOiXPP/+8LF26VM6cOWMeq1atWjJo0CB59NFHzX+7eQwbNqxI4N2yZYsnjGdlZUlCQoJMmDBBWrZs6amWrjJR/NANM0J9DWHbwPvwxrfMqg16EHjd7KXcCwEEEEAAAQQqS8CVwOtUVkd2dfqAHt/97ndL7LhWWQ/l6zrFA6+uIjF37lzRl+t0BHrGjBlmtPf999/3XKpfv34lLrtz586QD7wTM1ZIbsEXPl84c4Lt0x17y7MZK81GFboqgxOYCby+ehXfRwABBBBAAIFQFQha4NWRUl1uTF9U0/8u72jdurWrPsUDb/GbFxYWSlJSkqxZs0YaN25cZt3CYUqDv5tPeI8El/bfiuDPag+uNiQ3QwABBBBAAAEE/BAIWuDVMPjGG29Ily5dJNS2Fi4eePPy8uTYsWOeeuqqDRp4N27cKA0aNAjrwOtsKDGwVUdJadqmzGcpLeROTb5NHklb6injrNzgR7/iFAQQQAABBBBAIGQEghZ4dZMJHd2tXr262XCivOM73/mOqyDFA68umTZ27FhZtGiRXHrppWZKw/r1682c4/KOcBjhdTaf0CkKdyV0lYS6caU+UmmBV9fdfWnb/17kI/C62k25GQIIIIAAAghUkkDQAq9TP50ekJycLCtWrDDzdqvy6N+/v+h83XPnzkm1atXkwgsvNJtf6Hq8r776qsyfP1/0BTsd3dWX1nztABcOgXdfwecy89N1cvRMgaEva/MIAm9V9kzujQACCCCAAALBFAh64NXKjxw5Urp162ZeCoukIxwCr+M9c8c62ZqfW+ZKC+UF3gY1Y0xgrlXtIpnWbUAkNSHPggACCCCAAAJRIOBK4NXpAuvWrTM7mTVr1qzIjmZq/Mc//jEsqcMp8Kbu3ylLcjJKffHsy8KzZq6uE2idF92S41qabYWdf2sjze4+JCzbikojgAACCCCAQPQKuBJ4dWMJnct7wQUXlCr9+OOPh2ULhFPgLW+b4eLfcwKvztnNPpZnRoV1u2ECb1h2UyqNAAIIIIBA1Au4EngjVTmcAm/+mQJ5Mn25WV9X19qdtWOdaZbHknpJ8cDrrOzgtBuBN1J7MM+FAAIIIIBAdAi4Eni//vprefvtt+XPf/6z5Obmytq1a0V3LpszZ478/Oc/N6O/4XiEU+BVX2eervfqC/rfeuhqDM4qDFvycz2BWL+ngVdDsY72lvXSWzi2H3VGAAEEEEAAgegQcCXwzp49WxYuXCh33HGHWRVBt+M9cuSI3H333dK9e3f51a9+FZba4RZ4nV3Xro6NNy+wOWG2db1GRQKvMxrsNMrIxB6yev9OAm9Y9lIqjQACCCCAAAKuBN6UlBTR0Pu9733PbO6ggVePvXv3yu233242eAjHI9wCrzM3V19OO/XVOUOuo7r9mrcrEnj1685Ww/rfOqqr6/kywhuOvZQ6I4AAAggggIArgbdt27aydetWM3XBOyTqtIZOnTrJp59+GpYtEW6B19mEoji2M8XBe2MJJxw7gTd1f6YZFb6rdVfpFtcqLNuLSiOAAAIIIIBAdAq4Enhvvvlmuf/++6VPnz6ewHv+/Hl55ZVXZNWqVbJ8+fKw1A+3wOssTabYOsobe3GM5BZ8Ic4Uh55NEmTQ5Z1MW3iHY33JbcuRXLNSg87n1RFhDgQQQAABBBBAIFwEXAm8H374oTzwwANy1VVXyUcffSQ6xSErK0vy8/PNVIeuXbuGi1eReoZb4HVWY9CH0NHcy2Lqy5oDmZ5n8g6z3i+u6dq7TgAm8IZlV6XSCCCAAAIIRLWAK4FXhfUlNV2l4bPPPjNb+jZv3lxuueUWadCgQdg2QLgFXu+X0TS4Xlanvmc1Bh3xHZ6QLO1j4017eJ/rHXi9R4HDtuGoOAIIIIAAAghElYArgfdPf/qTeTmt+HHy5ElZtGiRjBgxIizRwy3wKrKzNJmuvNC6biOzNm9K0zaS0jRBalevUWY7lLdxRVg2HpVGAAEEEEAAgagRCGrgPXv2rJw7d06Sk5MlLS2tBOru3btl6NChsm3btrAED8fAq/N4vyw8J90atzKbUOi2wuUFXadhnBFfZ/vhsGwwKo0AAggggAACUSkQ1MCra+8+++yzUlhYWCbutddeK3Pnzg1L/HAMvDbQzlJlkzr3N2GZAwEEEEAAAQQQCAeBoAZeBTh16pT84Ac/kCVLlpTwqFWrlpnLq3N6w/GItsDrLFWm0yGcub7h2G7UGQEEEEAAAQSiSyDogVc5dWpDjRplzw8NV/JoC7ys1BCuPZV6I4AAAgggEN0CQQu8Oqqr6+zqxhL63+UdH3/8cVi2QrQFXmepMl23d1RiD9Nm+wo+l1OF58wLcBwIIIAAAggggEAoCgQt8H7wwQcm7OqyY/rf5R033HBDKNr4rFO0BV4Nt89mrDTzd3Uerx7Oqg/M6/XZXTgBAQQQQAABBKpIIGiB13kefWFtwYIFMnDgQImJiawXnaIt8HoH3KnJt5nR3Ze2pZqmZsvhKvoTzG0RQAABBBBAwKdA0AOv1qBz586yePFiadmypc8KhdMJ0Rh4nRfXHk1KMVMZZu1YZ5qMDSnCqedSVwQQQAABBKJLwJXAqzusvfvuu9KvXz9p1qxZiRfY2rVrF5bq0Rh4F+/ebLYj1p3a9Hhv73bz7/iY+jKuY++wbEcqjQACCCCAAAKRLeBK4NVgWN6RnZ0dlsrRGHg3HsqR+VmbJDnum9H6tEN7PG2nWxBzIIAAAggggAACoSbgSuDVLYSrV68uF1xwQanPX7NmzVBz8as+0Rh4nS2GdUS3VvWLJPtYnsdKpzkk1I3zy46TEEAAAQQQQAABtwRcC7x16tQp8kz//e9/pXHjxm49Z1DuE42BVyGdlRl0m+FTX50TXaZsa36umebQr3l4Tk8JSgfhoggggAACCCAQEgJBDbxfffWVjBkzRnSEV9fkdY5z586Jbinct29fGT9+fEhAVKQS0Rp4J2askNyCLzxkukKDTnPQtXgfS+plvq4jwQ0vrsMWxBXpWJRBAAEEEEAAgUoVCGrg/eMf/yh/+MMfRP/dvn37IhXfsWOHDBs2zATiAQMGVOpDuXWxaA2887LSPHN342Pqyai218mT6csNe3JcK8k/fVKyjuWxVJlbHZH7IIAAAggggEC5AkENvH369JGhQ4fKkCGlv8z0xhtvyLJly0RXcQjHI1oDb+r+nbIkJ8M02RV1G8nopF7ivMzm3Y5McQjHXk2dEUAAAQQQiDyBoAbeq666SpYuXSpt2rQpVe7f//63DBo0SLZt2xaWstEaeJ0X17TRvEOtbkQxZetqia9T37zMpis5DG+dHJZtS6URQAABBBBAIHIEghp4dRrD/Pnz5eqrry5VbPPmzXL//ffLxx9/HJai0Rp4vyw8K4+kLTVtNrBVR0lpWvQXGicQO6O/Ydm4VBoBBBBAAAEEIkYgqIH3jjvukKSkJDNPt7Rj3LhxkpubK3Pnzg1L0GgNvNpYY9OXy9EzBVLaUmQ60vtsxkrzwtqkzv3Dsm2pNAIIIIAAAghEjkBQA++aNWtk5MiR8tBDD8nPfvYzqVWrlpE7ceKE/P73v5d58+aZf7p16xaWotEceH01mLN0GZtR+JLi+wgggAACCCAQbIGgBl6tvL6Y9txzz8nXX38t8fHxokuV7d+/X3SziV//+tfy05/+NNjPGLTrE3jLpn1441tmjV4d4dWRXg4EEEAAAQQQQKCqBIIeePXBjh49KmvXrpV9+/aZHdeaNWsm1113nVxyySVV9dyVcl8Cb9mMk7etNi+ulbX7Wv6ZAsk/XSCxF8cQiCulN3IRBBBAAAEEEChLwJXAG6n8BN6yW3bmjnVm9zXdlKJbXKsSJzpr+bJ0WaT+6eC5EEAAAQQQCB0BAq9FWxB4y8Z797Pt8t7e7WVuN+yMABN4LTogRRFAAAEEEEDALwECr19MpZ9E4C0bz9mcomeTBBl0eacSJ07MWCm5BZ/L1bHxMiqxh0UrUBQBBBBAAAEEEChfIOoC7zvvvCO6HJq+SNe7d2+Pjs4xnjBhghw+fFg6dOggU6ZMkYYNG5arR+Atm8fXWrzOKg6s1cuPKAQQQAABBBAItkBUBd45c+ZIenq6CbX33nuvJ/AeP35cevbsKdOmTZMuXbrI5MmT5eDBgzJ9+nQCbwV7oLMWb3xMfRnX8X+/WDiXI/BWEJZiCCCAAAIIIBCwQFQF3h07dsiVV14pd911lwwePNgTeFesWGG2QNZArIeuE5ycnCwZGRlSo0aNMlEZ4S2/v5W1Fq/31sRlBeKAezIFEEAAAQQQQACBMgSiKvA6BsOGDSsSeGfOnClHjhyR8ePHe5g08C5atEhatGhB4K3gHx9nLd6pybdJ7er/+8XBO/DqpdmcooLAFEMAAQQQQAABvwQIvCJmvm5hYWGRLZCvv/560SCcmJhoIF977bUSoDoPODs72y/oaDyprLV4nRUcHBMCbzT2Dp4ZAQQQQAAB9wQIvCIya9YsOXDggEycONEj36lTJ1m2bJlnhPdPf/pTiVbRl98IvGV31rLW4iXwuvcHnDshgAACCCCAgAiBV0RWrVolCxYskIULF5o+kZeXJykpKbJ582bm8Fr8KSlrLV4nCDuXfrpjb7kspr7FnSiKAAIIIIAAAgiULUDgFZGTJ0+agKtTGzp37iyTJk0yX9PVGso7eGmt/D9aW/JzZdaOdSXW2nWmOjily9p+mD+4CCCAAAIIIIBAZQhEVeDt37+/7Nq1S86dOyfVqlWTCy+80IRaXY83LS3NrM+ro7sael988UWpX7/8UUcCb/ld0Hk5zVmJIetYntSqfpHM+nSd5J8pkAY1Y+TomQIh8FbGH2WugQACCCCAAAJlCURV4K3sbkDg9S3qLE2mofalbalFCugua1vzc2VkYg9pHxvv+2KcgQACCCCAAAIIVECAwFsBNKcIgdc3nrM0WXJcS0k7tMdToFa1iySlaRt5b+92ualZO+nXvJ3vi3EGAggggAACCCBQAQECbwXQCLz+oxWfr+uxq9tIEurGEXj9p+RMBBBAAAEEEKigAIG3gnBajBFe33iLd2+WNQcyPSc6I73679iadQi8vgk5AwEEEEAAAQQsBQi8FoAEXt943mvuxsfUk3Ed+3gKlbWKg++rcgYCCCCAAAIIIOC/AIHXf6sSZxJ4feN5byOso7rDWyd7Cjnfu6JuIxmd1Mv3xTgDAQQQQAABBBCogACBtwJoThECr2+8fQWfy7MZK82Jd7XuKt3iWhF4fbNxBgIIIIAAAghUogCB1wKTwOsfnrM02aTO/SW2ZoynkBOGnXV6/bsaZyGAAAIIIIAAAoEJEHgD8ypyNoHXAu/bok4Ynt19iP3FuAICCCCAAAIIIFCKAIHXolsQeC3wCLz2eFwBAQQQQAABBPwSIPD6xVT6SQReCzwCrz0eV0AAAQQQQAABvwQIvH4xEXgtmMotOjFjheQWfCFPd+wtl8XUD9ZtuC4CCCCAAAIIRLEAgdei8RnhtcD7tqizE9ujSSlm5zUOBBBAAAEEEECgsgUIvBaiBF4LvGKBd2RiD2kfG29/Qa6AAAIIIIAAAggUEyDwWnQJAq8F3rdFnZ3YbmrWTvo1b2d/Qa6AAAIIIIAAAggQeCuvDxB47S03HsqR+Vmb5OrYeBmV2MP+glwBAQQQQAABBBAg8FZeHyDw2ls62wuz+YS9JVdAAAEEEEAAgdIFmNJg0TMIvBZ4XkXZfKJyHLkKAggggAACCBB4K70PEHgrh3Rs+nI5eqaApckqh5OrIIAAAggggEAxAUZ4LboEgdcCz6vozB3rZGt+rrBSQ+V4chUEEEAAAQQQKCpA4LXoEQReCzyvoqzUUDmOXAUBBBBAAAEEShcg8Fr0DAKvBZ5X0S35uTJrxzqzUsOgyztJ/ukCyT99UhpcHMNmFJVDzFUQQAABBBCIagECr0XzE3gt8LyK7iv4XJ7NWCm1ql0kp7465/kOS5VVji9XQQABBBBAINoFCLwWPYDAa4FXrKizUoN+OT6mnuQWfCEsVVZ5vlwJAQQQQACBaBYg8Fq0PoHXAq9Y0YkZK+TLwnMyPKGrmcbAUmWVZ8uVEEAAAQQQiHYBAq9FDyDwWuAVK6rzeNvHxnu++vDGt8z0hkmd+0tszZjKuxFXQgABBBBAAIGoEyDwWjQ5gdcCz0fRydtWS/axPHk0KYUX14LHzJURQAABBBCICgECr0UzE3gt8HwUXbx7s6w5kCkDW3WUlKZtgncjrowAAggggAACES9A4LVoYgKvBZ6PoqzNGzxbrowAAggggEC0CRB4LVqcwGuB56No5rFD8tK2VLmibiMZndQreDfiyggggAACCCAQ8QIEXosmJvBa4Pko6qzNqy+s6YtrHAgggAACCCCAQEUFCLwVlRMRAq8Fnh9FWZrMDyROQQABBBBAAAGfAgRen0Rln0DgtcDzo+jY9OVy9EyBPN2xt1wWU9+PEpyCAAIIIIAAAgiUFCDwWvQKAq8Fnh9FWZrMDyROQQABBBBAAAGfAgRen0SM8FoQWRX1Z6UGfblN1+vVl9t0hzYOBBBAAAEEEECguACB16JPMMJrgedH0dT9O2VJTob0bJIggy7vVGqJmTvWydb8XEmOaynDWyf7cdX/nfLe3u3mf25q1i6gcpyMAAIIIIAAAuElQOC1aC8CrwWeH0X9WZrsyfTlkn+mIODly7SMltVjdvchftSGUxBAAAEEEEAgXAUIvCJy9uxZadu2rdSoUcPTjikpKTJ9+vRy25XAG9xu74TSWtUukmndBpS42ZeFZ+WRtKXm64Gu1+uEaS3LS3HBbUeujgACCCCAQFULEHhF5PDhw9K3b19JT08PqD0IvAFxVejk8pYm8w6tgY7UbjyUI/OzNpk6PZqUwvzfCrUOhRBAAAEEEAgPAQKviOTk5MiIESMkNTU1oFYj8AbEVaGTJ2askNyCL0oNpc5Lbc6FA5ma4F2WwFuhpqEQAggggAACYSNA4BWRLVu2yKhRo6RVq1aSlZUlCQkJMmHCBGnZsqWnIb/++usSjarnZWdnh01jh2NFnZfSRib2kPax8UUewfme88WpybdJ7er/m5ZS3vPOy0qTtEN7zCn60lq/5ry4Fo79gzojgAACCCDgjwCBV0R27dolc+fOlTvvvNOE3hkzZpjR3vfff99j+KMf/aiEp44ME3j96WYVP6e8pcmcF9Z0ju+pr84FNDXBWeOXwFvxtqEkAggggAAC4SJA4C2lpQoLCyUpKUnWrFkjjRs3LrMtmdIQ/G7uzLUtvuxY8RfWdC3eQKYmOGFZn6AiS5oF/8m5AwIIIIAAAghUlgCBV0Ty8vLk2LFjogFWD121QQPvxo0bpUGDBgTeyuptFbhOWUuTOUFYV2fQbYfXHMiUga06SkrTNn7dxXkZTk8ubYWHfQWfy6nCcxIfU8/vaRJ+3ZiTEEAAAQQQQMB1AQKviGzYsEHGjh0rixYtkksvvdRMaVi/fr0sXfrNkldlHYzwBr+/eo/ker+UNmXbask6lid3te4q+acLRDeR8HcurvcavGUF3oc3vhXwNInga3AHBBBAAAEEEKiIAIH3W7VXX31V5s+fL6dOnTKju/rSWnx80ZekigMTeCvS5QIv44zG6otrpwrPSoOLY+Slbamic3cnde4vqfszTeAtb0c277s6o8Y6eqsrQJS2zq9zT39DdOBPRQkEEEAAAQQQcEuAwGshTeC1wAugqPcLZt7FnDDqz45s3uW25OfKrB3r5OrYeLMtsR7eo8c6neHZjJXm6wTeABqKUxFAAAEEEAhRAQKvRcMQeC3wAijqLCGmc211+sLRMwWe0V1dhsxX4NX5vmmHcsyyZjrH13vlBx0Z1sN7STPvDS0C3cEtgMfiVAQQQAABBBBwSYDAawFN4LXAC6CozrmNrRnjKaGBVQ9n7VxfWxA76/XGx9SXcR17y+Ldmz0vuX2SnyvFV3hI3b9TluRkmHs4ZQKoLqcigAACCCCAQIgJEHgtGoTAa4FXyUXL24LYeQHNGcnVAOyEXA3PxQOvzQ5ulfxYXA4BBBBAAAEEKkGAwGuBSOC1wKvkok7g1bV4l+zOMCO5enjPx9X/1xffluzeLDoq/HTH3qKjubrjmq720C2ulSljs4NbJT8Wl0MAAQQQQACBShAg8FogEngt8Cq5aPEX23T1Bp0G4T09QW+pUxRyCz6XBjVj5P869y8ynzf24hhJqBcnczPTzKivcwSyoUUlPxaXQwABBBBAAIFKECDwWiASeC3wKrlo8cDrjNg6o7XeKzLorZ1NKpzpC04Q1q/r13SrYn1hTYOv9+hvJVebyyGAAAIIIICACwIEXgtkAq8FXiUX1SkKq3N3mqkKutSYs12wM39Xpy84S43prZ1VGZwlypzq6KiwXkMPXZIskA0tKvmRuBwCCCCAAAIIVJIAgdcCksBrgRekos6cXQ2uI9v2MCHXmb4wMWOF2WjCCcNaBe85vroBhY7s6qGbUugSZvOzNhU5P0jV5rIIIIAAAgggEEQBAq8FLoHXAi+IRZ1RXQ22+kKaE3A13G45kivtG8bLZTH1PTXQ7Yud7605kGm+rtMZdNkz3dGNtXiD2FhcGgEEEEAAARcECLwWyAReC7wgFi3rBTZft/Qe7dVtinvFt5En05cX2XpYw7FudsGBAAIIIIAAAuEjQOC1aCsCrwVeEIt6r6Mb6Ojs2PTlZic3Z0thZ7RYX2ZrXS9OpmxdLQMv72SWMHN2adNwTAgOYoNyaQQQQAABBCwFCLwWgAReC7wgFvXeGljX3dUthf099IW1I6dPSkLdOFPEealN5/fq4czx1Wvq9/RgFQd/dTkPAQQQQACBqhEg8Fq4E3gt8IJctPj2wza3896IQl+A0xFg78P7JTib0p1gqAAAIABJREFU+1AWAQQQQAABBIIjQOC1cCXwWuCFUVGdtzsxY6Uk1Gskw1sny7ysNM/LcPpSnK4IoRtdcCCAAAIIIIBAaAoQeC3ahcBrgRdmRXWqgwZb59ARZF3FwZnzq+v8eq/8oOdrUPb+Wpg9MtVFAAEEEEAgYgQIvBZNSeC1wIuQos5or7Nzm/NYurqDhl59oW3Q5Z0i5Gl5DAQQQAABBMJTgMBr0W4EXgu8CCm68VCO2ZxCty4eldjDPJXzNf1vpjtESEPzGAgggAACYS1A4LVoPgKvBV6EFNVR3OJr9Tqju84j6vxe7+kQEfLoPAYCCCCAAAJhI0DgtWgqAq8FXgQVdebx6vJkeuiIr67moC+56Uttxac7RNCj8ygIIIAAAgiEhQCB16KZCLwWeBFU1JnC0LpuI8k/XWDm7nqHX+/pDhH02DwKAggggAACYSNA4LVoKgKvBV4EFdXVGHQag7MpRXxMPRnXsY9ZpeGRtKXmSXVFB931zdnQIoIen0dBAAEEEEAg5AUIvBZNROC1wIuwot7bGT+alOIJthMzVkhuwReep52afBvbEEdY2/M4CCCAAAKhL0DgtWgjAq8FXoQV1WkMG/+bI7WrXyQpTdt4nk63Oc76Ik+25O8zwZdtiCOs4XkcBBBAAIGwECDwWjQTgdcCL8qKlrZ8WZQR8LgIIIAAAghUmQCB14KewGuBF2VFvefzMq0hyhqfx0UAAQQQqHIBAq9FExB4LfCisOjMHetka36uZ1qDToPQVR1iL45hnd4o7A88MgIIIICAewIEXgtrAq8FXhQW9V6+7LGkXjIxY6XkFnxeZJe2KGThkRFAAAEEEAi6AIHXgpjAa4EXhUW9ly+7qVk7eW/vdo+CzW5s+mJc9rE8iY+pL+1j4801dfSY3d2isJPxyAgggAACpQoQeC06BoHXAi9Ki3ovX6YEtapdZNbv1QCsa/U6h4bjKdtSJaVpgnSLa1VEa1/B53JZTH3P15yRYg284zr2loc3vmWuyQ5vUdrJeGwEEEAAgRICBF6LTkHgtcCL4qLOVsRKoMuU6VbEOhqro7x6aKCdsnW1Ca0aiB+7upf5vm5TnLp/p9nQYlynPuZrOpKrm144h4bcJTkZ5n+1rHOe/r9OqSgenv1pBmckWkM5BwIIIIAAAuEoQOC1aDUCrwVeFBfdkp8rq/fvNKO0gy7vJE4A1tHc2Jp1ZEnOZqPToGaMHP12aoKGXGcnN/2ebmOs84DLGjF2Ro6d83Taw0vbUs2ob3JcK3k2Y6UJy96bZJTWJE45/d7IxB6eKRNR3Hw8OgIIIIBAGAoQeC0ajcBrgUdRj4DzMps3Sc8mCWaKw5Rtqz07tenWxL2atpF5mWnfTlnoZEZ8Nbgmx7U0I8DO8XTH3p5RYh2ZTTuUY87TIKyBd82BTHOqE4jLao55WWme6+o9hrdOpuUQQAABBBAIOwECr0WTEXgt8ChaRMCZxqBfHJ6QXOTls8W7N5u5vAl140wZHSGetWOdp7yGWJ0O8UjaUvM1Dcajk3qVOK84uTMK7D3Kq8FY66LLpfVsmmBGhZ3DuU/t6jWsWk9HjXV02/Y6VpWgMAIIIIBAVAkQeC2am8BrgUfREgI6bUFHYb1fSCuLSacyaHA8VXhWWteNM1MjNBhrWNVRYGe1BmftX72OTklwRoc1FGuA1vm5+rLb8ISusmT3Zsk6llfilnqu3ke3RtbR4X0nP5cODeNFR6GLh1ZnFLn41/XZ9Gv6/YmbV0jsxXXksaQUQi9/DhBAAAEEXBEg8FowE3gt8CjqioCzFJoGVQ3FOgVCX2rTUV0N1vrCm/fcYB3FTWnaRvLPnPRMZdAX6/TQl+tKO7RMr/g25lurc3eWCLPzsjZJ1heH5Kbm7SR1f6ZZe1gPrZOOXOuosk678A7JOo9Z66fncCCAAAIIIGArQOD9VnDt2rUyYcIEOXz4sHTo0EGmTJkiDRs2LNeXwGvb/SjvhoBOgdC5uk6g1NCroVYPDcQaLnX+b3xMPRnV9jrP+r16no4kT+s2wJynUyZ0tFdXetB5x7r2b1mHjhprwN538qhn1QjnXL2PTpnwDtp6vjPiqwFZQ7AeTpjW4KtltB7ez+KGH/dAAAEEEAh/AQKviBw/flx69uwp06ZNky5dusjkyZPl4MGDMn36dAJv+PdxnsAPAV9TEfQSZW1modMovlku7Zx50U6nTej0B+9DX3jbciTXfEmXWdPwqvOQdSUKPZzVKGpVr+EZAdZgXPw6zjU19LaPvUzaN4w3AV2DsG7brFMl9NDvcyCAAAIIIOAIEHhFZMWKFbJ06VKZM2eOcTlx4oQkJydLRkaG1KhR9gs6jPDyBwmBkgIaPnVkOOvYIRNYdUqEjgrr13WOsDO/2NlA45tNNv63GoVe0Smj85R1tNcZgdZAXHxkWUeHnWkSxWvjBN+Eet+88KfzncsKxDoSflmd+kV2qNMpGFpPDfJOsPaeesGOdvwJQAABBMJDgMArIjNnzpQjR47I+PHjPa2mgXfRokXSokWLMluSwBsenZxahr6Ahl4NlnpooCzvxT09V8OpBmodNXamRuh0Cz2cF+z8eWonEOuIszPK3a95ksReHGNGrb1f4nOCtU6z0ACtL+9pGf26vsTn76HB2RmJ9rcM5yEQqgK1ql/k14u2oVp/6hU9AgReETNft7CwUMaMGeNp+euvv94E4cTERPO1BQsWlOgVOuc3Ozs7enoLT4pACAroKHDDi+sUGZnVajoh+lThORNO9dBz9Sht/rGzTJv3I+rXdNqE9xrHIUhAlRBAIAoEZncfEgVPGbxHJPCKyKxZs+TAgQMyceJEj3SnTp1k2bJlnhHe119/vUQr6PkE3uB1Tq6MQLAFnACs99Fl2nTkWJd30xFe/X9dRcJZTu3I6ZPmazqqu+XIPomvU9/8v77ApyPE/h46kq1hnAOBSBAI5BOVSHjeqnwGAq+dPoFXRFatWmVGcBcuXGg08/LyJCUlRTZv3swcXrv+RWkEEEAAAQQQQKDKBQi8InLy5EkTcHVqQ+fOnWXSpEnma7paQ3kHc3irvP9SAQQQQAABBBBAwKcAgfdborS0NBk3bpwZ3dXQ++KLL0r9+vUJvD67ECcggAACCCCAAAKhLUDgtWgfRngt8CiKAAIIIIAAAgi4JEDgtYAm8FrgURQBBBBAAAEEEHBJgMBrAU3gtcCjKAIIIIAAAggg4JIAgdcCmsBrgUdRBBBAAAEEEEDAJQECrwU0gdcCj6IIIIAAAggggIBLAgReC2gCrwUeRRFAAAEEEEAAAZcECLwW0AReCzyKIoAAAggggAACLgkQeC2gCbwWeBRFAAEEEEAAAQRcEiDwWkATeC3wKIoAAggggAACCLgkQOC1gCbwWuBRFAEEEEAAAQQQcEmAwGsBTeC1wKMoAggggAACCCDgkgCB1wKawGuBR1EEEEAAAQQQQMAlAQKvBbQGXg4EEEAgEIGuXbvKpk2bAinCuQgggIBkZ2ejYCFA4LXAW7BggZw/f16GDRtmcRWK+hLIysqSadOmycyZM32dyvctBQYOHCivvPKKNGjQwPJKFC9P4KWXXpI2bdpInz59gAqiwMaNG+Wvf/2r/OY3vwniXbi0Ctxwww3ywQcfgIFAyAoQeC2ahsBrgRdAUQJvAFiWpxJ4LQH9LE7g9RPK8jQCryVgAMUJvAFgcWqVCBB4LdgJvBZ4ARQl8AaAZXkqgdcS0M/iBF4/oSxPI/BaAgZQnMAbABanVokAgdeCncBrgRdAUQJvAFiWpxJ4LQH9LE7g9RPK8jQCryVgAMUJvAFgcWqVCBB4LdgJvBZ4ARQl8AaAZXkqgdcS0M/iBF4/oSxPI/BaAgZQnMAbABanVokAgbdK2LkpAggggAACCCCAgFsCBF63pLkPAggggAACCCCAQJUIEHirhJ2bIoAAAggggAACCLglQOB1S5r7IIAAAggggAACCFSJAIG3Sti5KQIIIIAAAggggIBbAgTeCkrrblRz586Vc+fOSb9+/WT8+PFSrVq1Cl6NYo7AunXr5N5775WLLrrIg/LEE0/InXfeKXv37pXHH39cduzYIfHx8TJp0iTp0KEDeAEIqN1DDz0k3bt3l2eeecZTsjzbtWvXyoQJE+Tw4cPGe8qUKdKwYcMA7hp9pxYWFhqnV199VT766CPPznUvvviivPbaa0V+Vixbtszsukb/Dryf7Nq1S8aNGyc7d+40fVJ/VqSkpJgLlfUz+vTp0/LUU0/JmjVrpFatWvLLX/5SBg0aFPjNo6jEyZMnjfP69evNz+Y77rhDHnzwQSNw2223mZ/JF1xwgfn/Sy65xLN1Nn9PRlEnCYNHJfBWoJF0qZuxY8fKwoULpV69ejJixAi56aabzA8BDjuB9957z2wF+vvf/77EhW6//XYT1H7+85/L3//+d5k4caL5S8s7HNvdPbJLZ2RkmJDbunVrqVOnTpHAW5btqVOnpGfPnmZr5y5dusjkyZPl4MGDMn369MjGsny6+++/XxITE+Xll1+WtLQ0T+DV0JCQkCBDhw6lf1saa3HdmlmX0tPt3Tds2GB+mdu0aZN88sknZf6Mnjp1qglo2qcPHTokQ4YMkddff938ueAoXUC3Zj569Kg8//zzkp+fb0Lu7373O+ncubPceOONpp9fccUVRQrz9yS9KdQECLwVaJFf//rX0qRJE7nvvvtM6dTUVDPa+8Ybb1TgahTxFli0aJFs377djN56H/pDVoPX5s2bpXr16uZb/fv3NyM1+kOXw7fAZ599ZkbB5s2bZ0ZrnRHe8myPHDkiS5culTlz5pgbnDhxQpKTk0XDc40aNXzfNErP0EClgVfDrXfgffjhh+WHP/yh6bv0b7vOoaPoOjp+6623en4m6CcQy5cvN6PoZf2M/vGPfyzPPfectG/f3lRAf9boqKSGZY7SBfTvOO3L+smaHvoLnY6kDxgwwPw8+POf/yyNGzcuUpi/J+lNoSZA4K1Ai9x1111mVOBHP/qRKZ2Tk2M+cv/www8rcDWKeAvMnj3bjPDqyOLnn38uPXr0MNNFMjMzzb/ff/99z+kaHvSHLR9HBtaHdDTGO/DqLxFl2WoY1tCr33cONddfTFq0aBHYjaPw7OKB95577jEK2dnZcuGFF4qOrI8cOdL8Ikf/tusgW7duNR+z6xScu+++u8yf0VdeeaX5JUQ/ndND+/LHH38suhkIh28Bnd6gf/fNnz9fvve970nbtm3l+uuvl3/+858SGxtrpp3pL3X8PenbkjPcFSDwVsBbP0IbNWqU+UOux/79+82UBv0YjcNOQMPuli1bzDxenRP9yCOPmGClown6F9Lbb7/tucGYMWPM3Ef9y43Df4HigVc/Ci7LVj/G1JE0tXYO7fczZ840I5gc5QsUD7yzZs0y80b1lzT9uaF9Vz+l0Ckm9O+K96Z9+/aJ/jKhn1pcc801ZppDaT+j09PTTb/dtm2baQc99GfK3/72NzPnl6N8AZ3//MADD5jRcR0R//rrr83UEZ3WoIMT+g7Go48+KqtWrTJzo/l7kh4VSgIE3gq0xvDhw80cJg25eugLEz/72c8Y4a2Apa8iOvKiL6Loyz76b/2LyTn0h+l1113HCK8vxGLfLx54dXpCWbYaeA8cOGDmSztHp06dzEfJjPD6hi8eeIuXmDFjhvHVnyf0b9+epZ2hP381hOkvDjrtSY/yfkbrCK8Gs+9+97vmXB2p1NFhRnjL9z9+/Lh5f6Jr166in66VdeinndqfdZoDf09WrE9TKjgCBN4KuOoE/vr168svfvELU1pftFqyZIl58YHDTkDfutb5dHFxceZC+gKKeusLghpuNQBffPHF5ns6qqDz777//e/b3TTKShcPvBpqy7LV6QwLFiww/nrk5eWZ0Xb9CJ45vL47TvHAqx/7tmvXTmrWrGkK64s/OnVHf5bQv317Fj9DV7bQUfIXXnhB9Bcx5yjvZ7S+6KbzS/UlTD30RUKdf6qhmaN0gTNnzpgXA9VOpyo4x5dffmmmm3mvlqPT/TT06mg6f0/So0JJgMBbgdbQv7T0Yxud+6UfReoP3MGDB5sJ/Bx2ArqU06effmpWaTh//rwJAjoio/PC9Aethlt9YWLlypVmRGb16tWeF1bs7hw9pYsHXn3ysmz1I0wNuNou+nKg/oKhc/h0tQYO3wLFA69+1N6tWzfTr3Nzc83KLr/97W/Nx8H0b9+exc/Q1S70Z2/fvn2LfKu8n9E6HUd/YdOfMToVQsPZn/70J2nVqlXgFYiSEmql8/51eULvQ0d9deUc/aRC/63Llunor34St2fPHv6ejJL+ES6PSeCtYEvpqgw650vX4dW3hJ988knPOoQVvCTFREQDlo6+6LJjOof3hhtuMHPEdL6dfvQ7evRos4pDs2bNzBI5V111FW5+CmiwevPNN+Wrr74yv0zoahcawNS7PFt9wUdHwXR0V0OvTi/RkRuO0gV0xPbaa6813zx79qxnJFxfptIRMf3oXX+p+853vmN+WXZGzOjfgfUoDas6haH4Jw267Jh++lPWz2htE+3PGspq165tfqbccsstgd08ys7WX8g08OqLls6hI7nal3V6yP/93//Jf//7X7nsssvM34U67UEP/p6Mso4S4o9L4A3xBqJ6CCCAAAIIIIAAAnYCBF47P0ojgAACCCCAAAIIhLgAgTfEG4jqIYAAAggggAACCNgJEHjt/CiNAAIIIIAAAgggEOICBN4QbyCqhwACCCCAAAIIIGAnQOC186M0AggggAACCCCAQIgLEHhDvIGoHgIIIIAAAggggICdAIHXzo/SCCCAAAIIIIAAAiEuQOAN8QaieggggAACCCCAAAJ2AgReOz9KI4AAAggggAACCIS4AIE3xBuI6iGAAAIIIIAAAgjYCRB47fwojQACCCCAAAIIIBDiAgTeEG8gqocAAggggAACCCBgJ0DgtfOjNAIIIIAAAggggECICxB4Q7yBqB4CCCCAAAIIIICAnQCB186P0ggggAACCCCAAAIhLkDgDfEGonoIIIAAAggggAACdgIEXjs/SiOAgMsC58+flwceeEDWrl0rEyZMkFtvvbXCNTh+/Lh06tRJ3n//fWndunWFr+MUfPbZZ+W///2vzJgxw/pabl0gmHXu16+fDBw4UO688063Hof7IIAAAqUKEHjpGAgg4LfAjTfeKBoS//a3v8l3vvMdT7nt27fL7bffLp9++qnf16roiTt27JD+/fvLe++9Jy1btpQaNWpU9FJSWFgomzdvlnbt2knt2rVl165dcvDgQenevXuFrvnZZ5/J2bNn5YorrqhQ+aooVJmBt7if9ovvfve70rhx46p4NO6JAAIIeAQIvHQGBBDwW0AD7+effy59+/aVZ555pkoC78aNG2XEiBHW4VrDbvXq1Ys8+0svvSRnzpyRsWPH+m2iJ+qos/5z4YUXBlQuFE6uzMBbUb9QcKAOCCAQ2QIE3shuX54OgUoV0MA7aNAg0WCzZMkSadu2rbl+8RHe06dPy/PPPy+rV6+WL7/8Uq666ioZP368XH755X7VJz093ZTfvXu3xMbGyoABA+TnP/+5bNiwQUaOHGlGUWvVqiXjxo0z3/M+CgoK5De/+Y188MEHUq1aNendu7c5T0eCdWRYP2ZfunSpGR3WezhTGlauXCkzZ840obVRo0ZmysT+/fvl17/+tWh9LrnkErnuuuvkySeflDp16khqaqpMmjTJePzud7+Tt956S95+++0iUxoWLlwor7/+uvla8+bN5Ze//KWkpKSY6t5yyy2mPh999JFkZWXJuXPn5IknnpA+ffqUalRWXb7++mvp2rWrvPrqq9KtWzdPWXXp0qWLjB49Wv7yl7/IrFmzJDc3Vxo2bCj33HOP3HXXXeZc78Cro+bPPfeccXaOBx980IzQPv3006L3mjx5sixfvly++OILadWqlfFITk42BsX9vKc0lNcntI9cffXV8sorr5h/Dh06JPXr15cXX3zRM9XkjTfekNdee03y8vJM++gzMFXCrz9OnIQAAiJC4KUbIICA3wIaeH/1q19JRkaGCYEaejUgFg+8Ovq7ZcsW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" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = em.criterion_plot(res, max_evaluations=300)\n", "fig.show(renderer=\"png\")" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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zft1pjScmdtSZxUBERABERABERCB00dAwgtgx44duOaaazB27Fg0atQII0eOxK+//ooPP/wwzwgv32iD9xpIeE/f75aOJAIiIAIiIAIikE0ISHhThXfp0qVo166dmZYVK1bg/vvvx5w5cyS82eRG1WWIgAiIgAiIgAiIQLQEJLwhyL311ltYuXIlXnnlFf+rCQkJp/Rs0KAB1qxZEy37bDdOEd5sNyW6IBEQAREQAREQgdNAIM8IL4U1lJyWKlUKcXFxfpSM6g4cOBCTJk1CxYoV/T+/7rrrTsFNKZbwnoa7UIcQAREQAREQAREQgUwkkGeEd+vWrWZRWnBr1qwZbrvtNvPjzz//HK+//jrefvttVKtWLSz23LRojW9WEd6wU64OIiACIiACIiACOZBAnhHecHPDKg0jRozA+PHjUb58+XDdzesSXleY1EkEREAEREAEREAEzigBCS+AgwcP4tprr8XEiRMD0hvCzYyENxwhvS4CIiACIiACIiACZ56AhBfA5MmT0b9/f8TGxgbMyNy5c1G6dOl0Zym3CW+LiS1wOOmw6vCe+d9LXYEIiIAIiIAIiMBpJCDh9QAztwlvj5k9sHjnYgmvh3tCQ0VABERABERABLIfAQmvhzmR8HqAp6EiIAIiIAIiIAIikEUEJLweQEt4PcDTUBEQAREQAREQARHIIgISXg+gJbwe4GmoCIiACIiACIiACGQRAQmvB9ASXg/wNFQEREAEREAEREAEsoiAhNcDaAmvB3gaKgIiIAIiIAIiIAJZREDC6wG0hNcDPA0VAREQAREQAREQgSwiIOH1ADq3Cu/IK0aibdW2HshoqAiIgAiIgAiIgAhkHwISXg9zkduE1wMKDRUBERABERABERCBbEtAwuthaiS8HuBpqAiIgAiIgAiIgAhkEQEJrwfQEl4P8DRUBERABERABERABLKIgITXA2gJrwd4GioCIiACIiACIiACWURAwusBtITXAzwNFQEREAEREAEREIEsIiDh9QBawusBnoaKgAiIgAiIgAiIQBYRkPB6AC3h9QBPQ0VABERABERABEQgiwhIeD2AlvB6gKehIiACIiACIiACIpBFBCS8HkBLeD3A01AREAEREAEREAERyCICEl4PoCW8HuBpqAiIgAiIgAiIgAhkEQEJrwfQEl4P8DRUBERABERABERABLKIgITXA2gJ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eSIgAiIgAiIgAiIgAt4ISHi98dNoERABERABERABERCBbE5AwpvNJ0iXJwIiIAIiIAIiIAIi4I2AhNcbP40WAREQAREQAREQARHI5gQkvNl8gnR5IiACIiACIiACIiAC3ghIeL3x02gREIEsJpCSkoIHH3wQP/74I5599ll06dIl6iuIj49HkyZN8OWXX6JWrVpRH8cOfO6557Bjxw68/vrrno+VVQfIzGu+7rrrcNNNN+H222/Pqrej84iACIhASAISXt0YIiACrglcffXVoCR+/fXXKFGihH/c8uXLccstt+DPP/90faxoO65YsQKdOnXC9OnTce655yI2NjbaQyE5ORlLlixBgwYNULRoUaxduxbbt2/HpZdeGtUxN27ciMTERNSsWTOq8Wdi0OkU3mB+vC/Kly+PSpUqnYm3pnOKgAiIgJ+AhFc3gwiIgGsCFN79+/ejY8eOGDRo0BkR3p9//hn33nuvZ7mm7BYoUCDgvb/yyis4fvw4+vfv75oJOzLqzP/y5csX0bjs0Pl0Cm+0/LIDB12DCIhA7iYg4c3d86t3JwKnlQCF9+abbwbF5uOPP8YFF1xgjh8c4U1ISMDQoUPx7bff4ujRo6hfvz6efvppnH/++a6u55dffjHj//77b5QtWxZdu3bFfffdh7lz56JXr14milqkSBEMGDDAvOZsR44cwTPPPINvvvkG+fPnxzXXXGP6MRLMyDAfs0+ePNlEmxrWKQAACr1JREFUh3kOm9IwY8YMjBo1ykhrhQoVTMrE1q1bMXDgQPB6ihcvjtatW+PJJ59EsWLFMHv2bLzwwguGx6uvvopPPvkEn376aUBKw4QJE/D++++bn1WrVg2PPPII2rZtay73hhtuMNezcOFCrF69GklJSejXrx86dOgQklF613Ly5Ek0b94c77zzDi655BL/WHK5+OKL8fjjj2Pq1KkYPXo0tmzZgnLlyqFnz5648847TV+n8DJqPmTIEMPZtoceeshEaP/zn/+A5xo+fDimTZuGAwcO4LzzzjM8WrRoYRgE83OmNGR0T/AeadSoEcaMGWP+27lzJ0qXLo2XXnrJn2ry4Ycf4t1338WuXbvM/PA9KFXC1a+TOomACACQ8Oo2EAERcE2AwvvEE0/g119/NRJI6aUgBgsvo7+///473njjDSMulKHPP/8c33//PQoXLpzh+SiHlEIK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YwlIeHPs1OnCRUAEREAEREAEREAE3BCQ8LqhpD4iIAIiIAIiIAIiIAI5loCEN8dOnS5cBERABERABERABETADQEJrxtK6iMCIiACIiACIiACIpBjCUh4c+zU6cJFQAREQAREQAREQATcEJDwuqGkPiIgAiIgAiIgAiIgAjmWgIQ3x06dLlwEREAEREAEREAERMANAQmvG0rqIwIiIAIiIAIiIAIikGMJSHhz7NTpwkVABERABERABERABNwQkPC6oaQ+IiACIiACIiACIiACOZaAhDfHTp0uXAREQAREQAREQAREwA0BCa8bSuojAiIgAiIgAiIgAiKQYwlIeHPs1OnCRUAEREAEREAEREAE3BCQ8LqhpD4iIAIiIAIiIAIiIAI5loCEN8dOnS5cBERABERABERABETADQEJrxtK6iMCIiACIiACIiACIpBjCUh4c+zU6cJFQAREQAREQAREQATcEJDwuqGkPiIgAiIgAiIgAiIgAjmWgIQ3x06dLlwEREAEREAEREAERMANAQmvG0rqIwIiIAIiIAIiIAIikGMJSHhz7NTpwkVABERABERABERABNwQkPC6oaQ+IiACIiACIiACIiACOZaAhDfHTp0uXAREQAREQAREQAREwA0BCa8bSuojAiIgAiIgAiIgAiKQYwlIeHPs1OnCRUAEREAEREAEREAE3BCQ8LqhpD4iIAIiIAIiIAIiIAI5loCEN8dOnS5cBERABERABERABETADQEJrxtK6iMCIiACIiACIiACIpBjCUh4c+zU6cJFQAREQAREQAREQATcEPh/sqUvTVBFNAkAAAAASUVORK5CYII=" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = em.params_plot(\n", " res,\n", " max_evaluations=300,\n", " # optionally select a subset of parameters to plot\n", " selector=lambda params: params[\"c\"],\n", ")\n", "fig.show(renderer=\"png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## There are many optimizers\n", "\n", "If you install some optional dependencies, you can choose from a large (and growing) set of optimization algorithms -- all with the same interface!\n", "\n", "For example, we wrap optimizers from `scipy.optimize`, `nlopt`, `cyipopt`, `pygmo`, `fides`, `tao` and others. \n", "\n", "We also have some optimizers that are not part of other packages. Examples are a `parallel Nelder-Mead` algorithm, The `BHHH` algorithm and a `parallel Pounders` algorithm.\n", "\n", "See the full list [here](../how_to_guides/optimization/how_to_specify_algorithm_and_algo_options" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## You can add bounds" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0., 0., 0., 1., 2.])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res = em.minimize(\n", " criterion=sphere,\n", " params=np.arange(5),\n", " algorithm=\"scipy_lbfgsb\",\n", " lower_bounds=np.arange(5) - 2,\n", " upper_bounds=np.array([10, 10, 10, np.inf, np.inf]),\n", ")\n", "\n", "res.params.round(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## You can fix parameters " ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0., 1., -0., 3., 0.])" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res = em.minimize(\n", " criterion=sphere,\n", " params=np.arange(5),\n", " algorithm=\"scipy_lbfgsb\",\n", " constraints=[{\"loc\": [1, 3], \"type\": \"fixed\"}],\n", ")\n", "\n", "res.params.round(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Or impose other constraints\n", "\n", "As an example, let's impose the constraint that the first three parameters are valid probabilities, i.e. they are between zero and one and sum to one:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0.33334, 0.33333, 0.33333, -0. , 0. ])" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res = em.minimize(\n", " criterion=sphere,\n", " params=np.array([0.1, 0.5, 0.4, 4, 5]),\n", " algorithm=\"scipy_lbfgsb\",\n", " constraints=[{\"loc\": [0, 1, 2], \"type\": \"probability\"}],\n", ")\n", "\n", "res.params.round(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For a full overview of the constraints we support and the corresponding syntaxes, check out [the documentation](../how_to_guides/optimization/how_to_specify_constraints.md).\n", "\n", "Note that `\"scipy_lbfgsb\"` is not a constrained optimizer. If you want to know how we achieve this, check out [the explanations](../explanations/optimization/implementation_of_constraints.md)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## There is also maximize\n", "\n", "If you ever forgot to switch back the sign of your criterion function after doing a maximization with `scipy.optimize.minimize`, there is good news:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "def upside_down_sphere(params):\n", " return -params @ params" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0., 0., 0., 0., -0.])" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res = em.maximize(\n", " criterion=upside_down_sphere,\n", " params=np.arange(5),\n", " algorithm=\"scipy_bfgs\",\n", ")\n", "\n", "res.params.round(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "estimagic got your back." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## You can provide closed form derivatives" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "def sphere_gradient(params):\n", " return 2 * params" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0., -0., -0., -0., -0.])" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res = em.minimize(\n", " criterion=sphere,\n", " params=np.arange(5),\n", " algorithm=\"scipy_lbfgsb\",\n", " derivative=sphere_gradient,\n", ")\n", "res.params.round(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Or use parallelized numerical derivatives" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0., -0., -0., -0., -0.])" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res = em.minimize(\n", " criterion=sphere,\n", " params=np.arange(5),\n", " algorithm=\"scipy_lbfgsb\",\n", " numdiff_options={\"n_cores\": 6},\n", ")\n", "\n", "res.params.round(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Turn local optimizers global with multistart" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0., 0., -0., -0., 0., -0., 0., -0., -0., -0.])" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res = em.minimize(\n", " criterion=sphere,\n", " params=np.arange(10),\n", " algorithm=\"scipy_neldermead\",\n", " soft_lower_bounds=np.full(10, -5),\n", " soft_upper_bounds=np.full(10, 15),\n", " multistart=True,\n", " multistart_options={\"convergence.max_discoveries\": 5},\n", ")\n", "res.params.round(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## And plot the criterion history of all local optimizations" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = em.criterion_plot(res)\n", "fig.show(renderer=\"png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exploit the structure of your optimization problem\n", "\n", "Many estimation problems have a least-squares structure. If so, specialized optimizers that exploit this structure can be much faster than standard optimizers. Likewise, other problems might have, if not a least-squares structure, at least a sum-structure (e.g. likelihood functions) that can also be exploited by suitable optimizers.\n", "\n", "If you define your criterion function a bit differently, you can seamlessly switch between least-squares, sum-structure and standard optimizers." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "def general_sphere(params):\n", " contribs = params**2\n", " out = {\n", " # root_contributions are the least squares residuals.\n", " # if you square and sum them, you get the criterion value\n", " \"root_contributions\": params,\n", " # if you sum up contributions, you get the criterion value\n", " \"contributions\": contribs,\n", " # this is the standard output\n", " \"value\": contribs.sum(),\n", " }\n", " return out" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([-0., 0., 0., 0., -0.])" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res = em.minimize(\n", " criterion=general_sphere,\n", " params=np.arange(5),\n", " algorithm=\"pounders\",\n", ")\n", "res.params.round(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Using and reading persistent logging\n", "\n", "For long-running and difficult optimizations, it can be worthwhile to store the progress in a persistent log file. You can do this by providing a path to the `logging` argument:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "res = em.minimize(\n", " criterion=sphere,\n", " params=np.arange(5),\n", " algorithm=\"scipy_lbfgsb\",\n", " logging=\"my_log.db\",\n", " log_options={\"if_database_exists\": \"replace\"},\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can read the entries in the log file (while the optimization is still running or after it has finished) as follows:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dict_keys(['params', 'criterion', 'runtime'])" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "reader = em.OptimizeLogReader(\"my_log.db\")\n", "reader.read_history().keys()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For more information on what you can do with the log file and LogReader object, check out [the logging tutorial](../how_to_guides/optimization/how_to_use_logging.ipynb)\n", "\n", "The persistent log file is always instantly synchronized when the optimizer tries a new parameter vector. This is very handy if an optimization has to be aborted and you want to extract the current status. It is also used by the [estimagic dashboard](../how_to_guides/optimization/how_to_use_the_dashboard.md). " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Customize your optimizer\n", "\n", "Most algorithms have a few optional arguments. Examples are convergence criteria or tuning parameters. You can find an overview of supported arguments [here](../how_to_guides/optimization/how_to_specify_algorithm_and_algo_options.md)." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0., -0., -0., -0., -0.])" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "algo_options = {\n", " \"convergence.relative_criterion_tolerance\": 1e-9,\n", " \"stopping.max_iterations\": 100_000,\n", "}\n", "\n", "res = em.minimize(\n", " criterion=sphere,\n", " params=np.arange(5),\n", " algorithm=\"scipy_lbfgsb\",\n", " algo_options=algo_options,\n", ")\n", "res.params.round(5)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3.8.5 ('base')", "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.8.5" }, "vscode": { "interpreter": { "hash": "40d3a090f54c6569ab1632332b64b2c03c39dcf918b08424e98f38b5ae0af88f" } } }, "nbformat": 4, "nbformat_minor": 4 }