{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import estimagic as em\n", "import numpy as np\n", "import pandas as pd" ] }, { "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": "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pkztdEtYG5OLI4AAAggggEDlBc6cOWMGvcaNGyddunSRWbNmyZo1a+Tll1+u/EUpGRECMRN4S2rn5OTIgw8+KO+8845Mnz5ddAR45MiR5rTPPvtMRo0aJYsXLw4q8DpLkZUczXU2oHi588CIaHQeAgEEEEAAAQTOFdi8ebP57e+CBQvMN7/55hvp2LGjrFy5Us4//3zIolggJgPvwYMHzac3/VXFAw88IKNHj5arrrpKbrzxRtOURUVF5u+ZmZkBBV4dxdU1d5d+8d/zde5ufO04X1kCbxT/C+HREUAAAQTCKqArGVXFocuFljyWLFliRnQnT57s+9bNN98sTz75pKSkpFTFY3LPEAnEVODNzc2Vm266STTwdu7cWZ599llp3LixDB8+XHr06CG9e/f2ser83OzsbKlWrZr5ms7/LXn8/ve/l24zni725f4t0qR7s1bFvjZq/RI5WFR4ThAOURtyGQQQQAABBKJWwBkUcrsCpf3Wdf78+ZKVlWXe43GO2267zfxGuEOHDm4/IvcLoUBMBV7HTUdwly1bJtOmTZO3335bnnrqKWnbtq3079/fnFJQUGA69pYtW3zUpU1vePTRR32BV6cx3JncsdjIrlP42YyVZvOJ4SndJblBQgibj0shgAACCCAQ3QKRNML71ltvyQcffGBeVHOOvn37yvjx401O4IhegZgMvE5z/fCHPzSrM+jKDXl5eWberh76huYTTzwhS5cuLbdly1qHt2QhAm/0/gPhyRFAAAEEYkdg69at5v//ziDX6dOnpX379rJq1Spp2LBh7EB4sKYxE3h37twpcXFxkpDw3xFWfVntmWeeMZ/k9u7dKwMHDpTXX3/dt0pDUlKS+RVGeUewgXdI6y6SGp/owW5ElRBAAAEEEIh+AX1J7brrrpOxY8eaqY+6SoO+sDZ79uzor1yM1yBmAq9OQteAe+jQIalRo4Zcdtll8vjjj0tycrLpAjrFQSepnzhxQrp27SqTJk2SWrVqhSTw6stsbC8c4//SqD4CCCCAQFQIbNu2TR577DHZt2+ftGzZ0rzv07x586h4dh6ybIGYCbzh6ASBjvASeMOhzzURQAABBBBAAIHABAi8gTmVehaB1wKPoggggAACCCCAgEsCBF4L6EAD76b8XJmWtVraxifKA627WNyRoggggAACCCCAAALBChB4gxXzOz/QwLv9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plmLl80nLBqQoggggAACCCAQEwIEXotmJvBa4FEUAQQQQAABBBBwSYDAawFdlYF3Td5OmZW9TjomXCp3JHW0qAVFEUAAAQQQQAABbwu4GnhPnTolX331lTRt2tQTqlUZeNl8whNdiEoggAACCCCAgAsCrgTeI0eOyFNPPSVvv/22nD17VrZv326qtmTJEvniiy9k6NChLlQ19Lcg8IbelCsigAACCCCAAAKhFnAl8I4cOVKKiopMsO3Xr59s3brV1EOD73333ScffPBBqOvlyvWqMvBqBdltzZVm5iYIIIAAAgggEOUCrgTeq666St59911p3LixXHnllb7AqyO/HTt2lKysrKhkJPBGZbPx0AgggAACCCAQYwKuBN527drJ8uXLJSEhoVjgXb9+vQwfPlw++uijqGSv6sDLbmtR2W14aAQQQAABBBBwWcCVwPv000/Lvn37ZNy4cdKjRw/5+OOPZcOGDebvvXv3lhEjRoS92vrC3LRp02ThwoVy5swZSUpKkkmTJvleoFu0aJFMnTpVTp48KT179hR95urVq5f7XFUdeNltLezdhhsggAACCCCAgAcEXAm8GiI1TM6ePVtOnDhh2GrVqiV33nmnDBs2TGrUqBF2ysOHD8vcuXNl0KBBUr9+fXnxxRclJydHXnjhBdm1a5f5+rx586RJkyYmgKempspdd90VFYF3SOsukhqfGHZDboAAAggggAACCESjgCuB14HRUda9e/eaEdbmzZub0FtVh84bfuyxx2TZsmUyffp0OXr0qOjLdXp89tlnMmrUKFm8eHFEB152W6uq3sN9EUAAAQQQQCCaBFwNvJEEM2fOHPPynE5rGD16tOiLdTfeeKN5RF1RQv+emZlJ4I2kRuNZEEAAAQQQQACBSgi4EngrmqM7ZcqUSjx65Yvs379fbr/9dpk5c6Y0a9bMvDinc4t1PrFz6Pzc7OxsqVatmvmSzv8teTz33HNmWkRVHYzwVpU890UAAQQQQACBaBJwJfDqPFn/Q0dQd+/eLatWrTJr895///2umR06dEgGDx4sjz76qHTu3Nnc94knnpC2bdtK//79zd8LCgqkQ4cOsmXLFt9zvfnmm+c84+OPP16lgZfd1lzrNtwIAQQQQAABBKJYwJXAW5aPrtTwl7/8pdTR03CYfv311+ZFubvvvlt69erlu8WMGTMkLy/PzNvV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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": "iVBORw0KGgoAAAANSUhEUgAAArwAAAH0CAYAAADfWf7fAAAgAElEQVR4XuzdCXyNV/4/8I8lxJIgtBK71r63qCW0RdW+dNBhFI22tv+MrS1p/RTVTulULdOR0ilaFMWMrSqUaIktGEGCqCXWWEpEkFj/r++5OdeT/d48Nzc31+d5veZVbp7lPO/zxHxy8n3OyfPo0aNH4EYBClCAAhSgAAUoQAE3FcjDwOumPcvbogAFKEABClCAAhRQAgy8fBAoQAEKUIACFKAABdxagIHXrbuXN0cBClCAAhSgAAUowMDLZ4ACFKAABShAAQpQwK0FGHjdunt5cxSgAAUoQAEKUIACDLx8BihAAQpQgAIUoAAF3FqAgdetu5c3RwEKUIACFKAABSjAwMtngAIUoAAFKEABClDArQUYeN26e3lzFKAABShAAQpQgAIMvHwGKEABClCAAhSgAAXcWoCB1627lzdHAQpQgAIUoAAFKMDAy2eAAhSgAAUoQAEKUMCtBRh43bp7eXMUoAAFKEABClCAAgy8fAYoQAEKUIACFKAABdxagIHXrbuXN0cBClCAAhSgAAUowMDLZ4ACFKAABShAAQpQwK0FGHjdunt5cxSgAAUoQAEKUIACDLx8BihAAQpQgAIUoAAF3FqAgdetu5c3RwEKUIACFKAABSjAwMtngAIUoAAFKEABClDArQUYeN26e3lzFKAABShAAQpQgAIMvHwGKEABClCAAhSgAAXcWoCB1627lzdHAQpQgAIUoAAFKMDAy2eAAhSgAAUoQAEKUMCtBRh43bp7eXMUoAAFKEABClCAAgy8fAYoQAEKUIACFKAABdxagIHXrbuXN0cBClCAAhSgAAUowMDLZ4ACFKAABShAAQpQwK0FGHjdunt5cxSgAAUoQAEKUIACDLx8BihAAQpQgAIUoAAF3FqAgdetu5c3RwEKUIACFKAABSjAwMtngAIUoAAFKEABClDArQUYeN26e3lzFKAABShAAQpQgAIMvHwGKEABClCAAhSgAAXcWoCB1627lzdHAQpQgAIUoAAFKMDAy2eAAhSgAAUoQAEKUMCtBRh43bp7eXMUoAAFKEABClCAAgy8fAYoQAEKUIACFKAABdxagIHXrbuXN0cBClCAAhSgAAUowMDLZ4ACFKAABShAAQpQwK0FGHjdunt5cxSgAAUoQAEKUIACDLx8BihAAQpQgAIUoAAF3FqAgdetu5c3RwEKUIACFKAABSjAwMtngAIUoAAFKEABClDArQUYeN26e3lzFKAABShAAQpQgAIMvHwGKEABClCAAhSgAAXcWoCB1627lzdHAQpQgAIUoAAFKMDAy2eAAhSgAAUoQAEKUMCtBRh43bp7eXMUoAAFKEABClCAAgy8fAYoQAEKUIACFKAABdxagIHXrbuXN0cBClCAAhSgAAUowMDLZ4ACFKAABShAAQpQwK0FGHjdunt5cxSgAAUoQAEKUIACDLx8BihAAQpQgAIUoAAF3FqAgdetu5c3RwEKUIACFKAABSjAwMtngAIUoAAFKEABClDArQUYeN26e3lzFKAABShAAQpQgAIMvHwGKEABClCAAhSgAAXcWoCB1627lzdHAQpQgAIUoAAFKMDAy2eAAhSgAAUoQAEKUMCtBRh43bp7eXMUoAAFKEABClCAAgy8fAYoQAEKUIACFKAABdxagIHXrbuXN0cBClCAAhSgAAUowMDLZ4ACFKAABShAAQpQwK0FGHjdunt5cxSgAAUoQAEKUIACDLx8BihAAQpQgAIUoAAF3FqAgdetu5c3RwEKUIACFKAABSjAwMtngAIUoAAFKEABClDArQUYeN26e3lzFKAABShAAQpQgAIMvHwGKEABClCAAhSgAAXcWoCB1627lzdHAQpQgAIUoAAFKMDAy2eAAhSgAAUoQAEKUMCtBRh43bp7eXMUoAAFKEABClCAAgy8fAYoQAEKUIACFKAABdxagIHXrbuXN0cBClCAAhSgAAUowMDLZ4ACFKAABShAAQpQwK0FGHjdunt5cxSgAAUoQAEKUIACDLx8BihAAQpQgAIUoAAF3FqAgdetu5c3RwEKUIACFKAABSjAwMtngAIUoAAFKEABClDArQUYeN26e3lzFKAABShAAQpQgAIMvHwGKEABClCAAhSgAAXcWoCB1627lzdHAQpQgAIUoAAFKMDAy2eAAhSgAAUoQAEKUMCtBRh43bp7eXMUoAAFKEABClCAAgy8fAYoQAEKUIACFKAABdxagIHXrbuXN0cBClCAAhSgAAUowMDLZ4ACFKAABShAAQpQwK0FGHjdunt5cxSgAAUoQAEKUIACDLx8BihAAQpQgAIUoAAF3FqAgdetu5c3RwEKUIACFKAABSjAwMtngAIUoAAFKEABClDArQUYeN26e3lzFKAABShAAQpQgAIMvHwGKEABClCAAhSgAAXcWoCB1627lzdHAQpQgAIUoAAFKMDAy2eAAhSgAAUoQAEKUMCtBRh43bp7eXMUoAAFKEABClCAAgy8fAYoQAEKUIACFKAABdxagIHXrbuXN0cBClCAAhSgAAUowMBr4hmoWrUqjh8/buIMPJQCFKAABShAAQpQILsFGHhNCDPwmsDjoRSgAAUoQAEKUMBJAgy8JqAZeE3g8VAKUIACFKAABSjgJAEGXhPQDLwm8HgoBShAAQpQgAIUcJIAA68JaAZeE3g8lAIUoAAFKEABCjhJgIHXBDQDrwk8HkoBClCAAhSgAAWcJMDAawKagdcEHg+lAAUoQAEKUIACThJg4DUBzcBrAo+HUoACFKAABShAAScJMPCagGbgNYHHQylAAQpQgAIUoICTBBh4TUAz8JrA46EUoAAFKEABClDASQIMvCagGXhN4PFQClCAAhSgAAUo4CQBBl4T0Ay8JvB4KAUoQAEKUIACFHCSAAOvCWgGXhN4PJQCFKAABShAAQo4SYCB1wQ0A68JPB5KAQpQgAIUoAAFnCTAwGsCmoHXBB4PpQAFKEABClCAAk4SYOA1AW1L4N17aS/8ivihbNGyJq7EQylAAQpQgAIUoAAFsirAwJtVOQCZBd7z8efRfmV7dYVDAw6ZuBIPpQAFKEABClCAAhTIqgADb1blbAi8m89sxsiQkeoK89rNQ2PfxiauxkMpQAEKUIACFKAABbIiwMCbFbWkYzIb4Z19YDaCwoMYeE0Y81AKUIACFKAABShgVoCB14RgZoE3YEMApIZXtsn+k9G9SncTV+OhFKAABShAAQpQgAJZEWDgTaG2bds2DBw4EDt27MBTTz2VoWlmgbf5kua4efemOsfQ+kMxrMGwrPQRj6EABShAAQpQgAIUMCHAwGvAi4+PR//+/ZGQkIDvvvvOVOA1vrAml+hbsy8CXwg00VU8lAIUoAAFKEABClAgKwIMvAa1Dz74AM2bN8fcuXMxb948U4HX+MKaXKJR6UaY335+VvqIx1CAAhSgAAUoQAEKmBBg4E3C+/XXX7F8+XJ89dVX6NChA77//ntTgVe/sCZBV+p4GXhNPKU8lAIUoAAFKEABCpgQYOAFcPPmTfTt2xcLFiyAj49PmoH3H//4RypmGQn2/D/PDPnHNB6Dz8M+h1cBL+zos8NEV/FQClCAAhSgAAUoQIGsCDDwAhg7dixefvllFXRlS2uENzg4OJXvX//610wD74YeG7j4RFaeTB5DAQpQgAIUoAAFHCTAwAugdu3aKFCggJX01q1bKFKkCCZNmoSuXbumS53ZLA36wGY/NEP8vXiE9gmFdwFvB3UdT0MBClCAAhSggCMFDh48iMDAQFy5cgU1atTAtGnT8PTTTzvyEjxXDgkw8KYB74gaXuNp9Xy8XG0th55yXpYCFKAABSiQicCDBw/Qtm1bTJw4ES+++KKarUmmKJ0zZw7t3ECAgZeB1w0eY94CBShAAQpQIG2BkydP4qOPPsKJEydQsGBB9b5OpUqVUu0cHh6OTz75RL3ALtvDhw/RrFkz/PLLL/Dy8iJvLhdg4DXRgbaWNEzZMwWLjyyGvMDWr1Y/E1fkoRSgAAUoQAHXFpjxy/EcaeDIV6qmuq6M2nbq1AkjRoxQ7+dcv34dxYoVQ968eVPtu3r1ajWiO3XqVOvXevbsqcJyvXr1cuSeeFHHCTDwmrC0NfDqKcq42poJbB5KAQpQgAK5QqBS4E850s7TUzqlum5kZCTGjBmDdevWZdqmZcuWQfaX93f09sYbb0BeUG/atGmmx3MH1xZg4DXRP7YG3oWRC9XUZHq1NVmFTebmLVOkDBr7NjbRAh5KAQpQgAIUcC0BVxrhDQkJwaJFi/Dtt99mirRmzRrInPzyopreunXrho8//hj169fP9Hju4NoCDLwm+sfWwBsWE4aBwQOti08M3zIcIWdDUKZoGSzvspwzN5joAx5KAQpQgAIUSE/g0KFD+PDDD7F27dpMkSIiIjBu3DisWrVK7Xv//n288MIL2LJlC4oXL57p8dzBtQUYeE30T1YDb8+1PXHs2jF1ZT3qa6IZPJQCFKAABShAgTQEJLS2a9dOTTUmMzDEx8cjT548aurRlJu8pNa+fXuMHz8eLVu2VLM0yAtrCxcupK0bCDDwmuhEWwOvXKLud3XVlQ4NOGT9s760jPLW8KlhoiU8lAIUoAAFKECBtASOHj2KCRMmIDo6GoULF1blDZUrV04TS/aVmt8LFy7g2WefxRdffIHy5csT1g0EGHhNdKI9gbfHmh6Iuh6lZmqQel6/In5oXaG1mr2h67Nd8WmLT020hIdSgAIUoAAFKEABCqQnwMBr4tmwJ/CO2z4Oa06sUXW88sKa/PeTFp9Ylx2WJYjLFi1rojU8lAIUoAAFKECBzAT279+vRnxTbkFBQShXrlxmh/PruVSAgddEx9kTePVMDfpyeooyHYRZy2uiI3goBShAAQpQgAIUyECAgdfE42FP4NUzNejLTfafjO5VuuPotaPotbYXvAp4YUefHSZaw0MpQAEKUIACFKAABdISYOA18VzYE3jlMvrFNfmz8UU1Xd87r908zstroj94KAUoQAEKUIACFGDgdfAzYG/g1cFWmiGzNehNLz3Mldgc3EE8HQUoQAEKUIACFADAEV4Tj4G9gVfX61YrUQ0ru660Xnnzmc0YGTIS1X2qY0WXFSZaxEMpQAEKUIACFKAABVIKMPCaeCbsDbyrfl+F1b+vVsE28IXAZFfW5Q6hfUK58pqJPuGhFKAABShAAQpQgIHXgc+AvYE3o0sHbAhQ05XNaDUDbSq0cWAreSoKUIACFKAABSjwZAtwhNdE/zsy8M4+MBtB4UFcathEf/BQClCAAhSgAAUokJYAA6+J58KRgVdPWybTk8lsDVxq2ETH8FAKUIACFKBAFgVCQkIwevRoLF68GLVq1criWXiYqwkw8JroEUcGXmmGLmuQP+t5ek00j4dSgAIUoAAFKGCHwLfffostW7bg9u3b+PTTTxl47bBz9V0ZeE30kKMDrzTFuATx/PbzTbSOh1KAAhSgAAUocPLkSXz00Uc4ceIEChYsiAULFqBSpUppwuzatQvPP/88BgwYgPHjxzPwutHjw8BrojOzI/Cejz+P9ivbo0zRMgjuEWyidTyUAhSgAAUokAMCW6fkwEUBvJx89iNpxIMHD9CpUyeMGDECHTp0wPXr11GsWDHkzZs3wzb++c9/xoQJExh4c6Yns+WqDLwmWLMj8Epz9BRlxsUpTDSTh1KAAhSgAAWcJzCxmPOuZbzSxBuprhsZGYkxY8Zg3bp1drWJgdcurlyxMwOviW7KrsCra3m51LCJzuGhFKAABSiQMwIuNMIrL6AtWrQIUptrz8bAa49W7tiXgddEP2VX4NV1vHxxzUTn8FAKUIACFHjiBQ4dOoQPP/wQa9eutcuCgdcurlyxMwOviW7KrsCr5+QdWn8ohjUYZqKFPJQCFKAABSjw5Arcv38f7dq1Q2BgINq2bYv4+HjkyZMHRYoUyRCFgdf9nhkGXhN9ml2Bd/OZzRgZMhKNSjcCZ2ow0UE8lAIUoAAFnniBo0ePqhfQoqOjUbhwYVXeULlyZQbeJ+zJYOA10eHZFXiPXjuKXmt7caYGE33DQylAAQpQgAIUoIAWYOA18SxkV+CVJnGmBhMdw0MpQAEKUIAC6Qjs379fjfim3IKCglCuXDm6uakAA6+Jjs3OwNtjTQ9EXY9Syww39m1sopU8lAIUoAAFKEABCjzZAgy8Jvo/OwPv8C3DEXI2hEsMm+gfHkoBClCAAhSgAAVEgIHXxHOQnYF3YeRCfB72Oar7VFejvN4FvE20lIdSgAIUoAAFKECBJ1eAgddE32dn4I27GwdZgELKGlpXaI2ZrWaaaCkPpQAFKEABClCAAk+uAAOvib7PzsArzToffx491/RE/L141vKa6CceSgEKUIACFKDAky3AwGui/7M78ErTuOqaiQ7ioRSgAAUoQAEKUIA1vOaegQwD764gIOEG0KAPULxili/EVdeyTMcDKUABClCAAhSggBLgCK+JByHdwJsQC0xJCrkvBQKtPkh+Ffm6Z3GbrszAaxMTd6IABShAAQpQgALpCjDwmng40g28R9cBS/tazlzRHwhYb/lzbLTl8+qdUofgdNoRFhOGgcEDLcsMN50IbPgAiD0DvLnO5tBs4hZ5KAUoQAEKUOCJELh37x5k8YkVK1bgwYMHqFatGv7+97/Dz8/vibh/d79JBl4Ap06dwpdffok9e/agQIECaNKkCT755BN4enpm2P/pBt6fxwK7v358bGA0cPQnS1iVMofqHYE+S2x6tpIFXt9XgFXDLMfV6AT0/sGmc3AnClCAAhSgAAUyFoiNjcUPP/yA/v37o2jRovjnP/+J48ePY9asWaRzAwEGXkAF3cTERPj7+6uf6t59913Url0bgwcPzlrgnVHXMgpb0BtIjAOaDEkegItXAEYesunxkZka2q9sjzJFyyA4b2Ug3BCUey8GanS26TzciQIUoAAFKPAkCpw8eRIfffQRTpw4gYIFC2LBggWoVKlSphSRkZEYM2YM1q1bl+m+3MH1BRh40+ijRYsWISoqCh9//LH9gVfKFmbUs4TdpsOAX6c8PofU8+6abQnBMuprYx1v3e/qqnMcui5lEWeA+n0swde3LjBke9ptlHaYeFnO9R9dtpACFKAABVxRICg8KEeaNbT+0FTXlUGsTp06YcSIEejQoQOuX7+OYsWKIW/evJm2cfHixYiIiFBlDdxyvwADb4o+lJ8AR40ahQ8//BBNmza1flUCcMpNvomOj6uW/GMpWYg5ZClbaDYMWJA0Aqtreed3BKJDLTW4MtIbexbw9AZ866X7NFkD76mkUeMPzgKflbcE5yHbkh974Adg62eAZ7H0w3Duf255BxSgAAUo4KIC+v+znN28QwNS/+Y0q6O0MTEx6NevnxoNLlu2rLNvhdfLBgEG3iTUNWvWYOLEiYiPj8dbb72F0aNHw8PDw0o+bFhS7ayhEzZt2oTjfS+n3S3dZwMN+gL/HWIZlX0tyDLiGvKZZdRXRnujtwOnDSO0MmIrIVjCb6UWgG8dNQosK67tvbQX8y5eRuOKrS31v3JeGeWVcokOUy1tWNAp+fnsGEXOhmeLp6QABShAgSdQwJVGeENCQiC/tf32229t7gkZBR4wYADef/99tGzZ0ubjuKNrCzDwpugfedBnzpyJO3fuYOrUpCCZTh+ql9Y2zUv7qxJe0ypZ0DM4yNdlJFi20nWAS4fTPk/xCggoXhB78yRaAu/LEyylEjEHga9bWgKy1APrUgo5S7HywI2zllHkSvxmde1vQbaOAhSgAAWyS+DQoUPqN7Zr16616RI3b95EQECAGviSEghu7iPAwJtGX54+fVo97Js3b86wp7O00poxmMrZpR73taQZHU5vs4wGXzxoCcNS+iCrrZXywRqvohjzx3XU7DYHKFpaTVOG6XUswVbKGmR/mcFBSikkBMssEWnNAew+zy7vhAIUoAAFKJChwP3799GuXTsEBgaibdu26re4efLkQZEiRVIdd+vWLbz99tuqlKFjx46UdTMBBl4A4eHhqFKlivoGuHv3LqZNm4arV6+q/2a0ZSnwygl1/a38ObNR2NhozN47HUHnN6MaCiIKiapJqlZJT38moVlqh4+tB6SUQup3Zb5f4xzAbvbg8nYoQAEKUIACtggcPXoUEyZMQHR0NAoXLqzKGypXrpzq0KVLl2L8+PGpXmhbtmwZGjRoYMuluI8LCzDwApg/fz6+++47yKTTUrfbrFkz9dOgvMmZLYFXv7gmpQej0illMFxYr7ZmbMuGHhtQ9v59y4wQsknIldA78qDlz3qlt4k3XPjxY9MoQAEKUIACFKBA9gsw8JowzvIIr5QuyMtrz/W1vNiWyaYXnzDuNq/dPDT2bfz45TX5otQCD7WUQSQrd8hgBojMrs2vU4ACFKAABdxJYP/+/WrEN+Umq6yVK1fOnW6V92IQYOA18ThkOfDaec20Au+YxmPQr1a/5C+rGWds0LM4tP/M8pIbNwpQgAIUoAAFKPCECjDwmuh4ZwXeuLtx8F/in6ylfWv2ReALgZbPDiwGrp8Bmg19PDOEfCYvsRlfijNxrzyUAhSgAAUoQAEK5FYBBl4TPeeswCtN1BN5d322K9acWKNmaZjffn76rdezQUg9b+AZE3fJQylAAQpQgAIUoEDuFmDgNdF/zgy88uKajPS2qdAGA4MHokzRMgjuEZxx643TlrGO10RP81AKUIACFKAABXKzAAOvid5zZuA1NtO61HAayygmux09bZmxttfE/fJQClCAAhSgAAUokBsFGHhN9FpOBd4ea3og6noUlndZjho+NdK/A5kNYkFnQFZ1k03KG14O5OprJvqch1KAAhSgAAUokPsEGHhN9FlOBd6ADQHYe2kvZrSaoUocMtyMi1zIjnyJzUSP81AKUIACFKAABXKjAAOviV7LqcCrF6IYWn8ohjXIZMqxJX0sK7DpTZYdltXdZAYH2d78KbXAjLqWJY4zWwXOhB0PpQAFKEABClCAAs4SYOA1IZ1TgXfV76swPnQ8ZMaGT1t8mvEdxBwEjvwE+NUF/jsUSIwDpKZ399eW44ZsA1K+0DYxaYU5zuFr4ungoRSgAAUoQAEKuIoAA6+JnsipwKsXoqjuUx0ruqyw/Q70YhTGI9IKtTrw8mU32225JwUoQAEKUIACLivAwGuia3Iq8EqTbZ6pwXh/ejEK42fVOwJ9ljz+RL/oJp9U9AcCDOUQJqx4KAUoQAEKUIACFMgpAQZeE/I5GXj1TA3z2s1DY9/Gtt2FXoxCh9noUEBqekceSjvwyqcTb1i+FvIZ8OsUIGVA3hUEJNywzP7AjQIUoAAFKEABCrigAAOviU7JycA7bvs4teLamMZj0K9WP9vvYtds4OJBoNUHQFALS03vyINA8YqIuBAHz4ileDb0/cfnS/oadDlEyoCsyx/4gpvtfcA9KUABClCAAhRwqgADrwnunAy8dr24lt496hkcus8GGvRFx5nb8OrleRjp8Z/HR+ggO78jICPCxlFfeSHu65aWz14KtIRobhSgAAUoQAEKUMDFBBh4TXRITgbeo9eOotfaXrYtMZzePeoyhSZDEPfyJ6g3aSNG5luRPPDqIKtHcuVcOgSz3tfE08NDKUABClCAAhRwlgADrwnpnAy80mz94lpon1B4F/C2/04MK7EFt1yBwQv3YZnHx2iS76ilVlfm75WFKjpMAaZUfHz+pBFhGAOvceTX/pbwCApQgAIUoAAFKJBtAgy8JmhzOvDqFdfsenEt5f0mjdz+X/WfsCj8xuPAKyO78pKazNQgpQqyRLHe9KivHiHWn7OO18TTxEMpQAEKUIACFMguAQZeE7I5HXin7JmCxUcWw6YV19K7z6Ta3L8VnIy1N57F9oIjUC7PFcuCFLo+V0Z0ZWW2YuWBG2cfT1eWMvCyjtfE08RDKUABClCAAhTILgEGXhOyOR147VpiOL37/HmsWnVtxr0/4VuP3jiE1y17ynRkQf7ApcOAb10g5pClvCF8yeOpzJKORek6lv04b6+Jp4mHUoACFKAABSiQXQIMvCZkczrw6pkaWpVvhVmtZ2XtTo6uA5b2xe4HNfDvqv/CNyfbqPPs7H8SzS4vAzYYZl7ovVjtq7bAaGDJXywzN+jPPYsBgWey1g4eRQEKUIACFKAABbJJgIHXBGxOB169xHCj0o0wv/38NO9k+b5zWLnvHNrWKo23WlROtc/5mBiU/bo64h4VxrFWX6Px1v4q/D4MWI9mPvHAjHqPj5Eyh58DLSFX6nWlpEH/+b9DLeUOso+v4RgTvjyUAhSgAAUoQAEKOEKAgdeEYm4IvDK3buTFODSp7INlg5slu9uz1+/g/eXhmHauL8rmvQq0/0yN6Erg3fHiQoxqWw3XvmgMn/goddzZETEov3WUpaxB9j3wg6XUQULuztmPP286zIQqD6UABShAAQpQgAKOFWDgNeHpKoG3uk91rOiyItWdSKBtOXWL9fPTUzpZ/zzo+73YGHlJ/T2o8Fx0eLjVWqu78n5LnHnpSxV4v5s+BgNuzMH5h6Ww4dVf8Na9pZbZG5oMUbW/apN63wOLLS+2yXRmMqtDQhzgWwfwLG5CmIdSgAIUoAAFKEAB8wIMvCYMczrwStP1XLyHBhxKdSffbj+FyesirZ8vGdQUzZ4piZ0n/0CfubvU5z2eL4d3n96LMltHW/eTF9h2VhikRoTrffAjauWJRhwKI65YTWz/s4dlijJ5Qc248lpstKX8Qep4ZUu4wdXXTDxbPJQCFKAABShAAccJMPCasHT1wKvLGcoWL4TzsXcwvnMtVcf7zvd7sSnyEka0qapGcdX23yGWkgRAzdgggXdk22oqGNf088K563dwM+E+NgVUQtUlzS3BVkKtTFU26rDlHNPrWOp49cZZG0w8XTyUAhSgAAUoQAFHCTDwmpB05cCryxm8PPPjoy61Va2uvLgmf9ZlDoPsOtIAACAASURBVAcnvArvQh6PBX4ei8T7D9B4xwuIe1REBeKZm48jwL8S4u7cx8r959S+hz3fRlHcthxnDLWG0Ky+VrwCMDL1yLMJch5KAQpQgAIUoAAF7BZg4LWb7PEBrhB4e6zpgajrUVjeZTlq+NSwNm76pigVVqVkQUZqJeSWK1FIhd75oafV59Ner5/m3VcK/El9LvvLyO6cfg1RrkRhvLf8AI5cvPl4NbaUgVeWGpaX1yTo6vpemb6MdbwmnjIeSgEKUIACFKCAWQEGXhOCrhB401teuMXULSqs6rrduhODVUmC3n4a3hK1y3inefcdZv6mgq3eUo4E/2/OIDx3cZn68sUaA+DXO405gJNWcFPTl1VqaUKZh1KAAhSgAAUoQAFzAgy8JvxcNfAGR8Rg8MJ9kNrd0MDW6g513a6UOIx8pVqac/JqCpm799y124hLuKdKGVKNBO+abV2QYmOpN/HqX2emVtTlDTJ9GacpM/GU8VAKUIACFKAABcwKMPCaEHSFwDt8y3CEnA3BjFYz0KaCZZU0HW71S2rymZQ4yHy803rVT163m5X7l9IFmalBpjR71BNDJ32b+iw6FMtyxK8lTV+WlWvxGApQgAIUoAAFKGBSgIHXBGBOBV55IU1WT4u7cw+lym9FUHgQhtYfiue8/4yZvxzHrpN/qLtK9VKaiXtNdmhCLDClovpo0L3R6PGXwWhX2zf52XUo5kwNjlLneShAAQpQgAIUyKKAUwPvvXv3cPXqVfj5+WWxua51WE4F3klrI9SLZ7L9qXUENl1ciKfud8HJ4/7qM1vKFkxLflYeSIxD77v/B68arfBN/0bJT2kIxWphCm4UoAAFKEABClAghwScEnhv3LiBCRMmYMOGDXj06BGOHTumbnf16tWIjo7G8OHDc+j2zV3WmYE34kIcVuw7iwldakPPr6vCre9moMQmJF5pg4LxHTDQv7Kqz0023Zi520z76JiDuB13DbXm3VJfl+uOfKUqIi/eRNNnfCzH6Hl5Rx4EiltGhLlRgAIUoAAFKEABZws4JfC+9957SExMVMG2e/fuiIiIUPcpwXfQoEH49ddfnX3fDrmeswKvhN0+c3ciLuE+ZHaFTrO2qfY3qeyDvVe3oXC5hahQsDGWdJuT/UE3hZy84CZz/Bo3mc7s1Vq++PDyu8h/dgfQezFQw1Lzy40CFKAABShAAQo4W8ApgbdRo0bYuHEjfHx8ULt2bWvglZHfZs2aITLy8fK3zgaQ60mZxdSpU7Ft2zZ4eHjgxRdfxMSJE9WfM9rSCry95+5SNbQZzXMr55Q63GKe+TMMqLLPpsgYzNgUpcKubHpuXJlPV2Zb+Nt/l+NK0RloVLoR5refnxN8kEA+6Pu9ajU3vaqbNOS7Sr/gpZh5XGI4R3qFF6UABShAAQpQQAs4JfA2bNgQ69evR+nSpZMF3j179mD06NHYvn17jvbI//73P5w6dQpdu3bFw4cPMWTIELRp0wZ9+/a1K/Dq1c3kIG/P/Ng+tnWyQCvThcloqA6v/+hVH70alkt2jY2Rl7DrxB/YGBmj5tHVmwRcWQ5Yb3oGhrCYMAwMHpijgTcl0s6Tf6gliV/NtxdzPb4EqncE+izBDMMLdfLCncwakZZBjj4MvDgFKEABClCAAm4n4JTAO2nSJFy4cEGNmr7yyisICwvDvn371N87duyId99916Vg58+fj3PnzmH8+PF2BV7jy2RyoA5zEu4k7M0LPZXsfBJi5WUvKQvYFBEDCbvGTV4+k9KAps+WVMH43R/Drcv76oUjjl47il5re6G6T3Ws6LLCZRxlGrRNIZuwvsCHauW1iNdDraUYKRspI9VS/8uNAhSgAAUoQAEKZIeAUwLv3bt3MWPGDCxcuBAJCQnqPgoUKICAgACMHDkS+fPnz457y/I5pdZYRni7deuWaeBdGLzbus+g78PU6G2AfyU1i0ItP2+1rK+UJMhopmwyMivhtd6kjervxppc+XtNPy8Vcl+t7ZtqJTQZQX7vxwNq1Ng4K0Ld7+qqcx0acCjL9+zoAyXkd5i5DaEJr6lTT/cPsy513LNROXh7eigTXf/bs2E5fNEr7aWOHd02no8CFKAABShAgSdLwCmBV5PKtGTnz5/HgwcPUL58eRV6XW2T8orp06dj2bJlyYL4qFGjUjV13bp1uNdjRrLPJbD+POJFpFzKVz7/olcDa4jVi0NI6YOEZBntzeqiEK4YeAXl2+2nUCe4N5rkO4pAr8+w9EpFzOnXMNmcvcaX3ka0qYpRbau52iPB9lCAAhSgAAUokMsFnBp4Xd3q4MGDGDNmDKSkIeVcwYcPH07V/Ndeew3Pv/d9ss8HtqisAp2EvY0RMeprtcp4Y9Qr1ZLV86ac3WDb2NYoX6JQlohcNfDKiPSeab3QI/82fHy/H+bd74DTUzqlukejRbYtlpElWR5EAQpQgAIUoIA7CDgl8GZWoztt2rQctzx69ChkFPerr77Cs88+a1N7zE5LpkeBM5vRIbPG9FjTA1HXo7C8y3LU8KmR2e5O/frcz9/DoNvfYN79dthZbUzqBSqSWvPnOTux+9Q1LBnUFM2eKenUNvJiFKAABShAAQq4t4BTAu+sWbOSKcqcvGfOnMGWLVvU3LyDBw/OUeUTJ06odsycORNVqlSxuS1mA69M5yVTmEm9blZHd6WxARsCsPfSXsxrNw+NfRvb3H5n7Pjrxv/gpR0B2P2gBs50X5lqVgrdBnnJbebm42BZgzN6hdegAAUoQAEKPFkCTgm86ZHKTA3//ve/ERQUlKPqMrIr9bh58+a1tqNgwYKQEoeMNrOB11E3rQNvmaJl0L1KdwytP9RRpzZ9npuxV+A1w/JDxNkRMekGe13WoGeuMH1hnoACFKAABShAAQokCeRo4JU2tGrVCiEhIbmyQ1wl8C6MXIjZB2Yj/l68ctzQYwPKFi3rOqZ6ieGXAoFWH6TZLhntlhXkZGENmb+YGwUoQAEKUIACFHCUQI4GXllprUuXLvjtt98cdT9OPY+rBF5907qW1+VKG05vAxYkLS088iBQvGKa/VQp8Cf1ubzAd/76Hcg8xLXLeDu1T3kxClCAAhSgAAXcT8ApgffLL79MJSfz8W7duhXNmzdXC1Dkxs3VAu+UPVOw+MhiVdIwrMEw1yL9eSyw+2ugUgvgTUuwTbnpF9f08slprVbnWjfF1lCAAhSgAAUokBsEnBJ4ZaqvlFuRIkVQp04ddO/eHfny5csNVqna6GqBV0obPg/7HF2f7YpPW3zqWqYJscD0ukBiHJBOaUPKlerkBmQRjwldarvWvbA1FKAABShAAQrkKgGnBN5cJWJHY10t8IbFhGFg8EA0Kt0I89vPt+NOnLSrsbRhyDbAt16yCxvn421S2UdNUyabmTmKnXRnvAwFKEABClCAAi4skG2B98qVKzbf9lNPPWXzvq60o6sF3ri7cfBf4g+vAl7Y0WeHK1E9bosubajeEeizJFkb5cW13nN34mbCfRVyZUnmlfvPcZTXNXuSraIABShAAQrkGoFsC7wSBm3djh8/buuuLrWfqwVewdGrroX2CYV3ARd84Ss2GphRD/AsBgSeybA/OXODSz3ubAwFKEABClAg1wpkW+C9deuWzShSz5sbN1cMvK68CIW1j/U0ZWmUNaR8DvRqdD8Nb8kZG3LjNwnbTAEKUIACFHABgWwLvC5wb9neBFcMvOO2j8OaE2swpvEY9KvVL9sNsnQBXdaQwby8+rzv/hiuyhrGd66Ft1pUztLleBAFKEABClCAAk+2gFMC7507d7B48WJERUVBlhVOucmSvrlxc8XAKwtQBIUHuebUZLqTj64DlvYFKvoDAesz7PrgiBgMXrgPtfy8sX5ES6c9Ju8tD0e5EoXRo2E5U8s+O63BvBAFKEABClCAAukKOCXwjhgxAmfOnEHbtm2xaNEi9OnTB6dOnVILTnzyySdo3759ruwiVwy8Lj9Tg/S0TFE2JWnxiYk3Muz7uDv3UG/SRrXPwQmvwruQB+SziItxaPZMyWx7bvQiGEsGNc3W62TbDfDEFKAABShAAQpYBZwSeJ9//nls2rQJJUuWVCurrV27VjVg9erVKvROmzYtV3aJKwbeo9eOotfaXihTtAyCewS7rmuQP3DpMNB7MVAjaRW2dFr7zvd7sSnykhrlHdiiMj5eG6FGX1OO+O46eQ1Nn/Exfc/6ZTk50Yg2VTGqbTXT5+QJKEABClCAAhTIOQGnBd7t27ejcOHC6Nq1K1atWoW8efNCVltr0qQJwsPDc07AxJVdMfDK7eiZGg4NOGTi7rL50JDPgF+npLsIhfHqMqL757k7ceTizWSNkqnLzl2/jZm/HMeuk3+orzliRFaXUTDwZvMzwNNTgAIUoAAFnCTglMDbv39/vPPOO2jZsiWGDx+OV155RQVfCbqDBg3C7t27nXS7jr2MqwbeXDFTgx11vNJrOvSeu34H3p4eOB97B//oVR+7TvyhXmrTW9NnSmLpoKamOnr6pijM3GyZKq9trdL4pn8jU+fjwRSgAAUoQAEK5KyAUwLv4cOH4e3tjQoVKuDgwYMYMGCA+rssTiEBeMiQITmrkMWru2rgzRUzNdhRx6u7R0LvjYT7ajT3/eXhkNXYjlyMQ1zCfci0ZXrRCrOjvLqEQq4r11g2uFkWnxAeRgEKUIACFKCAKwg4JfCmvNGYmBhICC5btixq1qzpCg5ZaoOrBt6FkQvxedjn6PpsV3za4tMs3ZtTDrJjPl5je85ev4OWU7dYP9KhVI/Mmh3lbTF1C2QkWTZvz/w4OLGdUzh4EQpQgAIUoAAFskfAKYG3Q4cOqoRBXlgrV65c9txJDpzVVQOvnqmhuk91rOiyIgdkbLzkf4cA4UuA7rOBBn1tPMiyW4eZv1lreqW0oVfDcqrswX/qFrU0sZmFKvQMDbpBp6d0sqtt3JkCFKAABShAAdcScErgXblyJX766Sfs3LkT9erVU+FXQrCPj/k36nOS01UDr5jkihfXds0GNnwA1O8DvPa1XV05aW0E5oeeVsfo6crkz3+esxO7T11L9vKajAjP335K7ftRl1oZXmfnyT/QZ+4u1PTzQtyd+6pWWF6OK1+ikF3t484UoAAFKEABCriOgFMCr77d2NhYbNy4EevXr8fevXvRvHlzFX47d854WirX4UreElcOvD3W9EDU9Sgs77IcNXxquCbh6W3Ags6Ab11gyHa72ighdsXesyjnU1iN7upNlzUYpxMzvoSmR4P1/hJwV+47hybPlFTnWb7vnKoP7vF8OTUDRMrwbFcjuTMFKEABClCAAi4h4NTAa7zjEydOYPLkyQgNDcXx45Y34nPb5sqBd/iW4Qg5G4LJ/pPRvUp316WdWMzStsBowLO46XZ+u/0UJq+LRIB/JUzoUludzxh45e/Gl9p6z92lXoLTtbp65FgCc+TFODX/b8qQbLqRPAEFKEABClCAAk4VcGrgvXbtGjZs2KBGeA8cOIAWLVqoEd6OHTs69aYddTFXDrx6ieG+Nfsi8IVAR92y488zvyMQHQq8uQ6olLR0sMzgEHMY8PQGfOvZdU1dkmCcXeHdH8PV1GVSpiBz+cro7bTX61tHc/UFpDRCZmjQo7oy5ZlMT8bFJ+zqAu5MAQpQgAIUcDkBpwTe5cuXqxpemW+3QYMG1hre4sXNj+jlpKgrB95cscSwGm7tAxxbn3zFNV3bW9EfCFhvVxfrGRyMsyvoul4ZqZVyBfna9rGt0XHWNutsDHrkd/D3e9U0Z1K3uzEiJtVosV2N4c4UoAAFKEABCriEgFMCr4zgduvWTc3SUKZMGZe4cUc0goHXAYpprbimPyteARhp/2pxepYFPbuC8UU2WZZYRnll6jIpZZCRYFmmWEaAx3eupQKul2d+HJrYDmmNFjvgjnkKClCAAhSgAAWcLOCUwOvke3La5Rh4HUCdVuDVo75y+ok37L6InrJM1+oaA2/khTgVavUm++jSBQm/Us6gyyF04K3l5431I5LKLexuDQ+gAAUoQAEKUCCnBRh4TfSAKwfeuLtx8F/iD68CXtjRZ4eJu8zmQ/USw9U7An2WWC6m63rlz1l4mU2vlDanX0O0q+2LehODVZmC1OjKSm160QpdyxscEYPBC/dZb9T4wlvK0eJs1uDpKUABClCAAhTIBgEGXhOorhx45bZyxVy8emoyY73ulApAQtLIrvFlNhv7KuXUZClDq0w9du7abfRsVF7NrxtxIQ6dZm2znl1KG95qUVn93X/KFs7Fa6M7d6MABShAAQq4qgADr4meYeA1gacPTWsuXj1VmeyThcCr59JtW6s0vunfCLaM0hpXVzNOW6ZHizk1mQP6mqegAAUoQAEK5JCAUwLvCy+8gNWrV8PPzy+HbjN7LsvA6yBXHXClXlcHYH3q9p8BTYfZdSHjy2YSeOtN2qiOz2iJYONSxcb99Ly+uvzBroZwZwpQgAIUoAAFXELAKYH35ZdfxqxZs9Sywu605ZbAG9onFN4FvF2XPqPA+1Ig0OoDu9oed+eeNeTKaK0sFWyclzetk+mR3LLFCyE0sLV1F764Zhc9d6YABShAAQq4pIBTAu+WLVswZ84cTJ06FZUqVXJJiKw0ytUDb8CGAOy9tBfz2s1DY9/GWblF5xwzvQ5w4yww8iDwvx+AX6cABb2BxDigfh/gta/tbocuUbA18Oq637SCsT6XvPTmXcjD7rbwAApQgAIUoAAFclbAKYF32LBhOHLkCM6dOwdfX18UKlQo2V1v3Gj5lXNu2xh4HdRjxtXWTm23BF55iU1WYMvC4hPSKl2iIKukyWppmY3wyoIV567fVnPyyotsxs04rVmzZ0qq+Xl3n7yGJs/4QP7OjQIUoAAFKEAB1xZwSuCVEd6MttatH/8K2bW5kreOgddBvWUMvDIvrwTdJkOA3V8DvnWBIdvtvpAOqVJ7K4tKmKnBnbQ2AvNDT1uXGNbn1i/F2d04HkABClCAAhSggFMFnBJ4nXpHTrwYA6+DsI2LT8hLaxJ4ZXaGBZ0tF8jC4hPv/hiugq6smnYz4b41rGalxXqeXj1KrOf1NS5fnJXz8hgKUIACFKAABZwj4JTA+/DhQyxbtgzr1q3DpUuX8Msvv6i72759O27duoV27do5524dfBVXD7zjto/DmhNrMNl/MrpX6e7gu3fg6YyBV8oZdMg1vsxm5+V0Ta4+TEobRrWtZudZLLtLuYMsViEBd/vY1tYX4uRrsriFLFVcq4w3Xq1VOkvn50EUoAAFKEABCmSvgFMC71dffaXC7htvvIG///3viIy0LO26d+9efPTRR1i/fn323mU2nd3VA+/sA7MRFB6EofWHYlgD+6b2yiaytE+7azaw4QNAVls7lvQsyKhukD9w6TAwZBvga98MH3o6MUcEXjmHXoBCFqUwLk0sIVhWcZPtp+EtUbuMC8+G4dRO5cUoQAEKUIACriPglMDbsmVLfPfdd3jmmWdQu3ZtREREKIHr169Dvnb48OEcF3n06BH+9a9/Yf78+di37/Eysxk1jIHXQd2Wcu5dvcywsba3Uku7LqanE9MH6WWG7TqJYWddIiHTlp2PvaNegtt96lqy00kYllkcVu47h5p+XpjQpXZWL8fjKEABClCAAhRwoIBTAm+dOnWwa9cuFC1aNFng/f333/H6669j//79Drwl+0917949jBo1Ck8//TTWrl2LsLAwm07CwGsTU+Y7pQy83WcDDfoCS/pYRnz13zM/k3WPlMsFG1dPs+M01l1TjhhLuJ23/ZQKvxJupaxBXmKTbVPkpUxnhchKG3gMBShAAQpQgAJZE3BK4H3nnXfUohN/+9vfrIE3NjYWo0ePRrFixTB9+vSstd6BR/32229o0aIFGjZsiP/97382nZmB1yamzHdKiAWmVLTsV6w8MCppxN9Y22vn4hNyqvSWC868Qan3SCtAyxRmMpWZt6cHOs3apmp8dXmDnCGjld2y0gYeQwEKUIACFKBA1gScEngvXryowq6UMJw9exYy4iujuzVq1MDs2bNRqlSprLXewUfdv38fjRs3dpvAu/nMZowMGYlW5VthVutZDtZy8On0C2rGldV04JUpyjpMtfuCjgy8KQN0ykUodI2vsZFcqMLuLuMBFKAABShAgWwRcErg1S2X2lgJug8ePECVKlXwwgsvZMtNZfWkGQXerVu3pjqtjFwfP348q5fL9uPCYsIwMHggGpVuhPnt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" }, "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 (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.10.8" }, "vscode": { "interpreter": { "hash": "40d3a090f54c6569ab1632332b64b2c03c39dcf918b08424e98f38b5ae0af88f" } } }, "nbformat": 4, "nbformat_minor": 4 }