diff --git a/book/_toc.yml b/book/_toc.yml index 69df894..5154ceb 100644 --- a/book/_toc.yml +++ b/book/_toc.yml @@ -23,4 +23,6 @@ parts: sections: - file: pages/nonlinear_constrained_optimization_example - file: pages/moo + sections: + - file: pages/moo_example - file: more_will_follow diff --git a/book/pages/Session 4b.ipynb b/book/pages/Session 4b.ipynb deleted file mode 100644 index 4fb7dfe..0000000 --- a/book/pages/Session 4b.ipynb +++ /dev/null @@ -1,560 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "2a587eee", - "metadata": {}, - "source": [ - "Import libraries" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "691faa94", - "metadata": {}, - "outputs": [], - "source": [ - "import scipy as sp\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt" - ] - }, - { - "cell_type": "markdown", - "id": "9a9bf5f5", - "metadata": {}, - "source": [ - "Variables" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "e6909420", - "metadata": {}, - "outputs": [], - "source": [ - "# s = design variable diesel engine speed in rpm\n", - "\n", - "CO2 = np.array([[ 800, 708],\n", - " [1000, 696.889],\n", - " [1200, 688.247],\n", - " [1400, 682.897],\n", - " [1700, 684.955],\n", - " [1800, 697.3 ]])\n", - "POW = np.array([[ 800, 161.141],\n", - " [1000, 263.243],\n", - " [1200, 330.51 ],\n", - " [1400, 381.561],\n", - " [1700, 391.17 ],\n", - " [1800, 370 ]])\n", - "\n", - "def CO2func(s):\n", - " return sp.interpolate.pchip_interpolate(CO2[:,0],CO2[:,1],s)\n", - "\n", - "def POWfunc(s):\n", - " return sp.interpolate.pchip_interpolate(POW[:,0],POW[:,1],s)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "f2aac738", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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VqxWKwcPHmTcuHHUrl0bUD+XhsjISKxWK02bNi22vkmTJu6neNTPpSM/P58nnniCadOmccMNN9CiRQtGjx7N4MGD+ec//wmY39dVIqDk5eXh5VX8UL29vd1pvU6dOsTExLB06VL39sLCQlauXEmnTp0AaNOmDT4+PsXapKSksHXrVncb+UNp9WnHjh3JzMzk559/drdZu3YtmZmZ6vff/B5O9uzZw7Jly4iIiCi2Xf185YYNG8bmzZvZtGmTe4mLi+PRRx/l22+/BdTPpcHX15d27dqxa9euYut3795NQkICoH4uLQ6HA4fDccHvRtP7+opusa0ghg8fbtSoUcP4+uuvjf379xvz5883IiMjjccee8zd5sUXXzRCQ0ON+fPnG1u2bDHuuOMOIzY21sjKynK3uf/++42aNWsay5YtMzZs2GB0797daNmypVFUVGTGYZkuOzvb2Lhxo7Fx40YDMKZNm2Zs3LjR/fRIafVp3759jRYtWhg//fST8dNPPxnNmzc3+vfvX+7Ha5YL9bPD4TAGDBhg1KxZ09i0aZORkpLiXux2u3sf6ueLu9jf5z/781M8hqF+vhQX6+f58+cbPj4+xttvv23s2bPHeP311w1vb2/jxx9/dO9D/XxpLtbXXbp0MZo1a2YsX77c2LdvnzFz5kzDz8/PePPNN937MLOvq0RAycrKMh5++GGjVq1ahp+fn1G3bl3jySefLPYL3OVyGU8//bQRExNj2Gw249prrzW2bNlSbD/5+fnG6NGjjfDwcMPf39/o37+/cejQofI+HI+xfPlyAzhrGT58uGEYpdenp06dMoYOHWoEBwcbwcHBxtChQ4309PRyOkrzXaif9+/ff85tgLF8+XL3PtTPF3exv89/dq6Aon6+uEvp53fffdeoX7++4efnZ7Rs2dL4/PPPi+1D/XxpLtbXKSkpxogRI4y4uDjDz8/PaNSokfHyyy8bLpfLvQ8z+9piGIZxZedgREREREpXlbgHRURERCoWBRQRERHxOAooIiIi4nEUUERERMTjKKCIiIiIx1FAEREREY+jgCIiIiIeRwFFREREPI4CioiIiHgcBRQRERHxOAooIiIi4nH+P05G0lwyy8C4AAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "CO2_x = np.linspace(800,1800,100)\n", - "CO2_y = CO2func(CO2_x)\n", - "plt.plot(CO2_x,CO2_y)\n", - "plt.title('Carbon dioxide')\n", - "\n", - "POW_x = np.linspace(800,1800,100)\n", - "POW_y = POWfunc(POW_x)\n", - "plt.figure()\n", - "plt.plot(POW_x,POW_y)\n", - "plt.title('Engine power');" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "aee3813f", - "metadata": {}, - "outputs": [], - "source": [ - "def weighted_obj(s):\n", - " delta_p = 1/3\n", - " delta_c = 1 - delta_p\n", - " return -delta_p * POWfunc(s) + delta_c * CO2func(s)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "507095ba", - "metadata": {}, - "outputs": [], - "source": [ - "bounds = [[800,1800]]\n", - "s0 = np.array(1200)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "a2aae3da", - "metadata": {}, - "outputs": [], - "source": [ - "result = sp.optimize.minimize(fun = weighted_obj, x0 = s0, bounds = bounds)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "17503f08", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " message: CONVERGENCE: NORM_OF_PROJECTED_GRADIENT_<=_PGTOL\n", - " success: True\n", - " status: 0\n", - " fun: 325.81425292950235\n", - " x: [ 1.613e+03]\n", - " nit: 7\n", - " jac: [-5.684e-06]\n", - " nfev: 26\n", - " njev: 13\n", - " hess_inv: <1x1 LbfgsInvHessProduct with dtype=float64>\n" - ] - } - ], - "source": [ - "print(result)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "59002813", - "metadata": {}, - "outputs": [], - "source": [ - "# goal attainment" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "2995fc8f", - "metadata": {}, - "outputs": [], - "source": [ - "Pt = 460\n", - "Ct = 640\n", - "def goal_attainment(s):\n", - " return max(Pt - POWfunc(s)) +max(CO2func(s)-Ct)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "7cb5743d", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " message: CONVERGENCE: NORM_OF_PROJECTED_GRADIENT_<=_PGTOL\n", - " success: True\n", - " status: 0\n", - " fun: 113.39680107686877\n", - " x: [ 1.649e+03]\n", - " nit: 4\n", - " jac: [-5.684e-06]\n", - " nfev: 20\n", - " njev: 10\n", - " hess_inv: <1x1 LbfgsInvHessProduct with dtype=float64>\n" - ] - } - ], - "source": [ - "result2 = sp.optimize.minimize(fun = goal_attainment, x0 = s0, bounds=bounds)\n", - "print(result2)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "ac550e69", - "metadata": {}, - "outputs": [], - "source": [ - "#pareto front" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "e96dc28b", - "metadata": {}, - "outputs": [], - "source": [ - "def weighted_obj(s):\n", - " return -delta_p * POWfunc(s) + delta_c * CO2func(s)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "20b1730d", - "metadata": {}, - "outputs": [], - "source": [ - "s_opt =[]\n", - "for delta_p in np.linspace(0,1,100):\n", - " delta_c = 1- delta_p\n", - " result_i = sp.optimize.minimize(fun = weighted_obj,x0=s0,bounds=bounds)\n", - " s_opt.append(result_i.x)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "87f7a72d", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[array([1399.98664189]),\n", - " array([1416.17202334]),\n", - " array([1430.84250565]),\n", - " array([1443.80885885]),\n", - " array([1455.4110537]),\n", - " array([1466.80021982]),\n", - " array([1476.97800748]),\n", - " array([1486.57913774]),\n", - " array([1495.16060729]),\n", - " array([1503.4511007]),\n", - " array([1511.05438763]),\n", - " array([1518.20603943]),\n", - " array([1525.07208468]),\n", - " array([1531.46161391]),\n", - " array([1537.67899845]),\n", - " array([1543.30015641]),\n", - " array([1548.88095695]),\n", - " array([1554.07633568]),\n", - " array([1559.05303167]),\n", - " array([1563.76086632]),\n", - " array([1568.50340222]),\n", - " array([1572.6633925]),\n", - " array([1576.79315986]),\n", - " array([1580.87413567]),\n", - " array([1584.78292526]),\n", - " array([1588.30392215]),\n", - " array([1591.91807423]),\n", - " array([1595.21335724]),\n", - " array([1598.68176536]),\n", - " array([1601.69934718]),\n", - " array([1604.75504214]),\n", - " array([1607.76430515]),\n", - " array([1610.59066698]),\n", - " array([1613.37008788]),\n", - " array([1616.0282122]),\n", - " array([1618.68916257]),\n", - " array([1621.15626621]),\n", - " array([1623.54639961]),\n", - " array([1625.9106603]),\n", - " array([1628.26226419]),\n", - " array([1630.41304313]),\n", - " array([1632.58459363]),\n", - " array([1634.59704331]),\n", - " array([1636.69611471]),\n", - " array([1638.68133108]),\n", - " array([1640.56444884]),\n", - " array([1642.47867791]),\n", - " array([1644.16845848]),\n", - " array([1645.95131114]),\n", - " array([1647.77700795]),\n", - " array([1649.47119401]),\n", - " array([1651.16918352]),\n", - " array([1652.73909561]),\n", - " array([1654.32117461]),\n", - " array([1655.72807604]),\n", - " array([1657.26688553]),\n", - " array([1658.7371726]),\n", - " array([1660.08342308]),\n", - " array([1661.51216296]),\n", - " array([1662.9106013]),\n", - " array([1664.19311651]),\n", - " array([1665.53911371]),\n", - " array([1666.82547995]),\n", - " array([1668.0035213]),\n", - " array([1669.22051366]),\n", - " array([1670.4476556]),\n", - " array([1671.56122354]),\n", - " array([1672.75806266]),\n", - " array([1673.86943142]),\n", - " array([1674.94698091]),\n", - " array([1676.05513949]),\n", - " array([1677.078429]),\n", - " array([1678.09974999]),\n", - " array([1679.13442751]),\n", - " array([1680.11079934]),\n", - " array([1681.10171141]),\n", - " array([1682.052323]),\n", - " array([1682.97776967]),\n", - " array([1683.92709503]),\n", - " array([1684.8235459]),\n", - " array([1685.71983608]),\n", - " array([1686.60163934]),\n", - " array([1687.44077288]),\n", - " array([1688.28946941]),\n", - " array([1689.13094251]),\n", - " array([1689.91643688]),\n", - " array([1690.70810279]),\n", - " array([1691.52494095]),\n", - " array([1692.31828049]),\n", - " array([1693.06288588]),\n", - " array([1693.77879018]),\n", - " array([1694.52243801]),\n", - " array([1695.28856683]),\n", - " array([1695.97197903]),\n", - " array([1696.64002228]),\n", - " array([1697.35373972]),\n", - " array([1697.98080296]),\n", - " array([1698.70449988]),\n", - " array([1699.37661249]),\n", - " array([1699.93697941])]" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s_opt" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "9309ce53", - "metadata": {}, - "outputs": [], - "source": [ - "P_opt = POWfunc(s_opt)" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "5a31977c", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[[381.56019783]\n", - " [382.51068142]\n", - " [383.33508903]\n", - " [384.03364916]\n", - " [384.63428399]\n", - " [385.20102531]\n", - " [385.68799317]\n", - " [386.1302405 ]\n", - " [386.51124713]\n", - " [386.86637367]\n", - " [387.18073334]\n", - " [387.4664176 ]\n", - " [387.73147643]\n", - " [387.96995177]\n", - " [388.19435634]\n", - " [388.3906956 ]\n", - " [388.57942721]\n", - " [388.74953282]\n", - " [388.90738651]\n", - " [389.05209598]\n", - " [389.1933052 ]\n", - " [389.31337283]\n", - " [389.42903887]\n", - " [389.53986544]\n", - " [389.64276214]\n", - " [389.73271135]\n", - " [389.82232753]\n", - " [389.9016312 ]\n", - " [389.98261152]\n", - " [390.05098018]\n", - " [390.11822671]\n", - " [390.18249118]\n", - " [390.24107164]\n", - " [390.29699353]\n", - " [390.34890587]\n", - " [390.39933174]\n", - " [390.44470173]\n", - " [390.48738377]\n", - " [390.52836808]\n", - " [390.56791035]\n", - " [390.60300515]\n", - " [390.63739838]\n", - " [390.66833594]\n", - " [390.69964354]\n", - " [390.72834736]\n", - " [390.75475937]\n", - " [390.780792 ]\n", - " [390.80308731]\n", - " [390.82591284]\n", - " [390.8485428 ]\n", - " [390.8688677 ]\n", - " [390.88858496]\n", - " [390.90623196]\n", - " [390.92344796]\n", - " [390.93827805]\n", - " [390.95398064]\n", - " [390.96847759]\n", - " [390.98131679]\n", - " [390.99448736]\n", - " [391.0069238 ]\n", - " [391.01793316]\n", - " [391.02907918]\n", - " [391.03934006]\n", - " [391.04840084]\n", - " [391.05742336]\n", - " [391.06617299]\n", - " [391.07380987]\n", - " [391.08169598]\n", - " [391.08871996]\n", - " [391.09525494]\n", - " [391.10169256]\n", - " [391.10738199]\n", - " [391.11281589]\n", - " [391.11807139]\n", - " [391.12280022]\n", - " [391.12737034]\n", - " [391.13153743]\n", - " [391.13538968]\n", - " [391.13913146]\n", - " [391.14246951]\n", - " [391.14561709]\n", - " [391.14852832]\n", - " [391.15112769]\n", - " [391.15358691]\n", - " [391.15585647]\n", - " [391.1578233 ]\n", - " [391.15965718]\n", - " [391.16139307]\n", - " [391.16292692]\n", - " [391.16423007]\n", - " [391.16535829]\n", - " [391.16640065]\n", - " [391.16733633]\n", - " [391.16805254]\n", - " [391.16864461]\n", - " [391.16915904]\n", - " [391.16951026]\n", - " [391.16979835]\n", - " [391.1699533 ]\n", - " [391.16999952]]\n" - ] - } - ], - "source": [ - "print(P_opt)" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "14528d6d", - "metadata": {}, - "outputs": [], - "source": [ - "C_opt = CO2func(s_opt)" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "67620000", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkkAAAGwCAYAAAC99fF4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABemElEQVR4nO3deVxU5f4H8M/MwAz7ALIIsgqoIC4obqAiaa65Vpo/2y01I4vKEqtbV1Oz61XbtDSvZptahnFLM1Nw3xHNDRAwEFFkkV22eX5/IHOdRGUQ5gzweb9e83LmOWfO+Z5jNZ+e85znyIQQAkRERESkQy51AURERETGiCGJiIiIqA4MSURERER1YEgiIiIiqgNDEhEREVEdGJKIiIiI6sCQRERERFQHE6kLaK40Gg0uX74Ma2tryGQyqcshIiKiehBCoKioCK6urpDL795XxJDUQJcvX4a7u7vUZRAREVEDZGRkwM3N7a7rMCQ1kLW1NYCak2xjYyNxNURERFQfhYWFcHd31/6O3w1DUgPVXmKzsbFhSCIiImpm6jNUhgO3iYiIiOrAkERERERUB4YkIiIiojpIHpIyMzPx+OOPo02bNrCwsED37t1x/Phx7fLi4mJERETAzc0N5ubm8Pf3x8qVK3W2MWjQIMhkMp3XY489ds99r1ixAt7e3jAzM0PPnj2xd+/eRj8+IiIiap4kHbidn5+P0NBQhIeHY9u2bXByckJKSgpsbW2160RGRiI2NhbffPMNvLy88Pvvv2PmzJlwdXXF2LFjtes9//zzmDdvnvazubn5Xfe9ceNGvPLKK1ixYgVCQ0PxxRdfYMSIETh79iw8PDwa/ViJiIioeZEJIYRUO58zZw72799/1x6cwMBATJo0Ce+88462rWfPnhg5ciTmz58PoKYnqXv37li+fHm9992nTx/06NFDp1fK398f48aNw6JFi25bv7y8HOXl5drPtbcQFhQU8O42IiKiZqKwsBBqtbpev9+SXm6LiYlBcHAwHn30UTg5OSEoKAirV6/WWad///6IiYlBZmYmhBCIjY1FUlIShg0bprPet99+CwcHB3Tu3Bmvv/46ioqK7rjfiooKHD9+HEOHDtVpHzp0KA4cOFDndxYtWgS1Wq19cSJJIiKilk3SkJSamoqVK1fCz88P27dvx4wZMzBr1iysX79eu87HH3+MgIAAuLm5QalUYvjw4VixYgX69++vXWfKlCn4/vvvERcXh3feeQebN2/GhAkT7rjfnJwcVFdXw9nZWafd2dkZV65cqfM7UVFRKCgo0L4yMjLu8+iJiIjImEk6Jkmj0SA4OBgLFy4EAAQFBeHMmTNYuXIlnnzySQA1IenQoUOIiYmBp6cn9uzZg5kzZ8LFxQVDhgwBUDMeqVZgYCD8/PwQHByM+Ph49OjR4477//tEUkKIO04upVKpoFKp7ut4iYiIqPmQNCS5uLggICBAp83f3x+bN28GAJSVlWHu3LmIjo7GqFGjAABdu3ZFQkIClixZog1Jf9ejRw+YmpoiOTm5zpDk4OAAhUJxW69Rdnb2bb1LRERE1DpJerktNDQUiYmJOm1JSUnw9PQEAFRWVqKysvK2p/QqFApoNJo7bvfMmTOorKyEi4tLncuVSiV69uyJHTt26LTv2LEDISEhDTkUIiIiamEk7UmKjIxESEgIFi5ciIkTJ+LIkSNYtWoVVq1aBaDmuWhhYWGYPXs2zM3N4enpid27d2P9+vVYunQpACAlJQXffvstRo4cCQcHB5w9exavvfYagoKCEBoaqt3X4MGDMX78eERERAAAXn31VTzxxBMIDg5Gv379sGrVKqSnp2PGjBmGPxFERERkdCQNSb169UJ0dDSioqIwb948eHt7Y/ny5ZgyZYp2nQ0bNiAqKgpTpkxBXl4ePD09sWDBAm2YUSqV2LlzJz766CMUFxfD3d0do0aNwrvvvguFQqHdTkpKCnJycrSfJ02ahNzcXMybNw9ZWVkIDAzE1q1btb1YUimtqEJeSQVUJgo4WnMMFBERkVQknSepOdNnngV9xJy8jFnfn0CITxt893zfRtsuERERNaN5koiIiIiMFUOSkWL/HhERkbQYkoyM/OY0TRqmJCIiIkkxJBkZGWpSEiMSERGRtBiSjExtTxLH0xMREUmLIcnI1D4WRcOMREREJCmGJCOjuNmVVM2UREREJCmGJCOjuPk3woHbRERE0mJIMjKKm8+pq6xmSCIiIpISQ5KRMdVebrvzA3yJiIio6TEkGRmTm9fbqtiTREREJCmGJCNjoqjpSapkTxIREZGkGJKMjPJmT1JlFXuSiIiIpMSQZGRMb4akimr2JBEREUmJIcnIKE1qe5IYkoiIiKTEkGRkVDdDUjlDEhERkaQYkoxMbUiqqNZAw1m3iYiIJMOQZGRUpgrte45LIiIikg5DkpGp7UkCgBuV1RJWQkRE1LoxJBkZU4UcJjdn3b5RyZ4kIiIiqTAkGSHzm5fcSiuqJK6EiIio9WJIMkJmypqQxJ4kIiIi6TAkGSGLmyGprJI9SURERFJhSDJCFkoTAEBpBQduExERSYUhyQjV9iSVlLMniYiISCoMSUbIUlXTk1RSzp4kIiIiqTAkGSHL2p4k3t1GREQkGYYkI2R1syepmJfbiIiIJMOQZISszGpCUtENhiQiIiKpMCQZIWszUwBA0Y1KiSshIiJqvRiSjJANe5KIiIgkx5BkhGy0PUkMSURERFJhSDJCNuY1PUkFZbzcRkREJBWGJCNU25PEkERERCQdhiQjpLZgSCIiIpIaQ5IRUpv/LyQJISSuhoiIqHViSDJCthZKAEBFlQZllXw0CRERkRQYkoyQpVIBpaLmrya/lJfciIiIpMCQZIRkMhlsb45Lyi+pkLgaIiKi1okhyUjZW9ZccssvZUgiIiKSAkOSkaoNSXnsSSIiIpIEQ5KRqg1JucUMSURERFJgSDJSDlYqAEBOcbnElRAREbVODElGqg17koiIiCTFkGSkHKzZk0RERCQlhiQjxcttRERE0mJIMlKON3uSsosYkoiIiKTAkGSknG6GpGtF5dBo+Pw2IiIiQ2NIMlK1l9uqNIITShIREUmAIclIKU3k2jvcrhTekLgaIiKi1ochyYg525gBALILOS6JiIjI0BiSjFhbdU1IYk8SERGR4TEkGbHakJRVwJBERERkaAxJRszl5uW2KwVlEldCRETU+jAkGbHanqTL19mTREREZGgMSUasna05AOAye5KIiIgMjiHJiLnWhqTrZRCCE0oSEREZEkOSEXOxrbncdqNSg7wSTihJRERkSAxJRkxlotA+niTzOi+5ERERGRJDkpFzs6u55HYpnyGJiIjIkBiSjJy7vQUAICOvVOJKiIiIWheGJCPnblcTktIZkoiIiAyKIcnIebRhSCIiIpICQ5KR87BnSCIiIpICQ5KR87zZk5SZX4bKao3E1RAREbUeDElGztnaDCoTOao0Apc5DQAREZHBMCQZOblcpu1NSsspkbgaIiKi1oMhqRnwamMJALjIkERERGQwDEnNgLdjTUhKZUgiIiIyGIakZsDHwQoAL7cREREZkuQhKTMzE48//jjatGkDCwsLdO/eHcePH9cuLy4uRkREBNzc3GBubg5/f3+sXLmyzm0JITBixAjIZDJs2bLlrvt97733IJPJdF5t27ZtzENrNO1re5KuMSQREREZiomUO8/Pz0doaCjCw8Oxbds2ODk5ISUlBba2ttp1IiMjERsbi2+++QZeXl74/fffMXPmTLi6umLs2LE621u+fDlkMlm999+5c2f88ccf2s8KheK+j6kp+DjW9CRlXi9DaUUVLJSS/rURERG1CpL+2i5evBju7u5Yu3atts3Ly0tnnYMHD+Kpp57CoEGDAADTpk3DF198gWPHjumEpJMnT2Lp0qU4evQoXFxc6rV/ExMTo+09upWdpRL2lkrklVQg9VoJAtuppS6JiIioxZP0cltMTAyCg4Px6KOPwsnJCUFBQVi9erXOOv3790dMTAwyMzMhhEBsbCySkpIwbNgw7TqlpaWYPHkyPv30U71CT3JyMlxdXeHt7Y3HHnsMqampd1y3vLwchYWFOi9D8r3Zm5ScXWTQ/RIREbVWkoak1NRUrFy5En5+fti+fTtmzJiBWbNmYf369dp1Pv74YwQEBMDNzQ1KpRLDhw/HihUr0L9/f+06kZGRCAkJue3y29306dMH69evx/bt27F69WpcuXIFISEhyM3NrXP9RYsWQa1Wa1/u7u4NP/AG8HW+GZKuFht0v0RERK2VpJfbNBoNgoODsXDhQgBAUFAQzpw5g5UrV+LJJ58EUBOSDh06hJiYGHh6emLPnj2YOXMmXFxcMGTIEMTExGDXrl04ceKEXvseMWKE9n2XLl3Qr18/+Pj44KuvvsKrr7562/pRUVE67YWFhQYNSn5OtT1JDElERESGIGlIcnFxQUBAgE6bv78/Nm/eDAAoKyvD3LlzER0djVGjRgEAunbtioSEBCxZsgRDhgzBrl27bhvsDQAPP/wwBgwYgLi4uHrVYmlpiS5duiA5ObnO5SqVCiqVSr8DbEQdnK0BAElXebmNiIjIECQNSaGhoUhMTNRpS0pKgqenJwCgsrISlZWVkMt1rwoqFApoNDUPe50zZw6ee+45neVdunTBsmXLMHr06HrXUl5ejnPnzmHAgAENOZQm17FtTUhKzyvlHW5EREQGIOkvbe1YooULF2LixIk4cuQIVq1ahVWrVgEAbGxsEBYWhtmzZ8Pc3Byenp7YvXs31q9fj6VLlwIA2rZtW+dgbQ8PD3h7e2s/Dx48GOPHj0dERAQA4PXXX8fo0aPh4eGB7OxsvP/++ygsLMRTTz1lgCPXn4OVCm0slcgtqUDy1WJ0c7eVuiQiIqIWTdKB27169UJ0dDS+//57BAYGYv78+Vi+fDmmTJmiXWfDhg3o1asXpkyZgoCAAHzwwQdYsGABZsyYode+UlJSkJOTo/186dIlTJ48GR07dsSECROgVCpx6NAhbS+WMerkUtObdP6KYe+sIyIiao1kQgghdRHNUWFhIdRqNQoKCmBjY2OQfc7/5SzW7EvD0yFeeG9MZ4Psk4iIqCXR5/db8seSUP35u9T8ZbIniYiIqOkxJDUj/jcvt529XAh2ABIRETUthqRmxM/JGqYKGQpvVOFSfpnU5RAREbVoDEnNiNJErp0v6cxlXnIjIiJqSgxJzUxn15pxSWcuF0hcCRERUcvGkNTMdGmnBgD8mcmQRERE1JTuKySVl5c3Vh1UT4G1IelSAQdvExERNSG9QtL27dvx9NNPw8fHB6amprCwsIC1tTXCwsKwYMECXL58uanqpJv8XWxgIpcht6QClwtuSF0OERFRi1WvkLRlyxZ07NgRTz31FORyOWbPno2ffvoJ27dvx5o1axAWFoY//vgD7du3x4wZM3Dt2rWmrrvVMjNVaJ/jdirjurTFEBERtWD1enbbwoULsWTJEowaNeq2h80CwMSJEwEAmZmZ+Oijj7B+/Xq89tprjVspaXV1s8WZy4VIuHQdI7q4SF0OERFRi1SvkHTkyJF6baxdu3b48MMP76sgurfu7mp8fwQ4yZ4kIiKiJsO725qh7u52AIBTlwpQreHgbSIioqZQr56kW1VXV2PdunXYuXMnsrOzodFodJbv2rWr0Yqjuvk6WcFKZYLi8iokXilCgKthHrBLRETUmugdkl5++WWsW7cOo0aNQmBgIGQyWVPURXehkMvQ3d0W+y7kID49nyGJiIioCegdkjZs2IBNmzZh5MiRTVEP1VMPTzttSHq8r6fU5RAREbU4eo9JUiqV8PX1bYpaSA89PWvGJR3/K1/iSoiIiFomvUPSa6+9ho8++oizPUssyMMWMhnwV24psos4qSQREVFjq9fltgkTJuh83rVrF7Zt24bOnTvD1NRUZ9lPP/3UeNXRHdmYmaJTWxucyyrEsYv5GMn5koiIiBpVvUKSWq3W+Tx+/PgmKYb008vLDueyCnEkLY8hiYiIqJHVKyStXbu2qeugBujlZY/1B//C0Yt5UpdCRETU4tR7TNLbb7+NXbt24cYNjn8xFn287QEAZ7MKUVBWKXE1RERELUu9Q9L333+PIUOGwNbWFmFhYXjvvfewZ88eVFRUNGV9dBdONmbwdrCEEMAx9iYRERE1qnqHpJSUFGRkZGD16tXw9fXF119/jUGDBsHOzg5DhgzBggULcODAgaaslerQt31Nb9LBlFyJKyEiImpZZOI+7uXPyMhAbGws4uLisHnzZpSUlKCqqqox6zNahYWFUKvVKCgogI2NdDNe/5yQiZc3JKCzqw1+nTVAsjqIiIiaA31+v/WecbtWSkoK4uLisGvXLsTFxaG6uhrh4eEN3Rw1UL/2bQDUjEu6XloBWwulxBURERG1DPUOSWlpaYiNjdX2HBUUFCA0NBRhYWGIiIhAr169YGLS4MxFDeRkYwZfJytcyC7GodRcDA/kVABERESNod6pxsfHBx4eHpg5cyZmzZqFHj16QKFQNGVtVE/9fR1wIbsY+y7kMCQRERE1knoP3H700UdRXl6ORYsWYf78+Vi+fDni4+P5eBIjEOrrAADYl5wjcSVEREQtR71D0saNG5GVlYWDBw9ixIgROHLkCEaOHAk7Ozs89NBD+Ne//oWjR482Za10B33b20Mhl+Fibiky8kqlLoeIiKhF0PsBt506dcILL7yAjRs34sqVKzhw4AC6d++O999/H/369WuKGukerM1M0cPDFgCwJ/matMUQERG1EA0aaX316lXExcUhLi4OsbGxSEpKgkqlwoABvAVdKgP8HHH0Yj72JuVgSh9PqcshIiJq9uodkn744QftnW2JiYkwMTFB7969MXHiRISHhyMkJAQqlaopa6W7GNjBEUt3JGH/hRxUVmtgqtC7k5CIiIhuUe+QNGXKFAQHB2P8+PEIDw9HaGgozM3Nm7I20kOXdmrYWyqRV1KB+L/y0efm/ElERETUMPUOSfn5+bC0tLzrOmVlZQxOElHIZRjo54AtCZcRm3iNIYmIiOg+1fuaTG1AevHFF+tcXlJSghEjRjROVdQg4Z2cAABxidkSV0JERNT86T1w5ffff8fbb7+t01ZSUoLhw4ejurq60Qoj/Q30c4RcBpy/UoRL+ZwKgIiI6H40KCStXbsWy5YtAwAUFRXhwQcfhEwmw2+//dboBVL92VkqEexpDwDYdZ69SURERPdD7ykAvL29sX37dgwaNAhyuRwbNmyASqXCr7/+es8xS9T0HvB3wpGLefjjXDae7OcldTlERETNVoPuEw8MDMQvv/yCt956CxYWFti2bRsDkpEY4l8zLulQSi6KblRKXA0REVHzVa+epKCgIMhkstvaVSoVLl++jNDQUG1bfHx841VHevNxtEJ7B0uk5pRgd9I1PNTVVeqSiIiImqV6haRx48Y1cRnUWGQyGR7s7Iwvdqfi9zNXGZKIiIgaqF4h6d1330VSUhI6dOjQ1PVQIxga0BZf7E5F7PlslFdVQ2WikLokIiKiZqfeY5KCgoLg7++PN998EwcPHmzKmug+BbnbwslahaLyKhy4kCt1OURERM1SvUNSbm4uFi9ejNzcXIwfPx7Ozs6YOnUqYmJicOPGjaaskfQkl8swrHNbAMC201kSV0NERNQ81TskmZmZYcyYMfjyyy+RlZWF6OhoODo6Ys6cOWjTpg3Gjh2L//znP8jO5vw8xmBEl5qQ9PvZq6is1khcDRERUfPToCkAZDIZQkJC8MEHH+Ds2bNISEjAwIEDsW7dOri7u+Ozzz5r7DpJT7297NHGUonrpZU4mMJLbkRERPpqUEj6Oz8/P7z22mvYs2cPLl++jKFDhzbGZuk+mCjkGB5Y05v0y6nLEldDRETU/Og943ZMTEyd7TKZDGZmZvDz84Ofn999F0b3b1RXF3x7OB3bz1zF++M0UJo0SiYmIiJqFfQOSePGjYNMJoMQQqe9tk0mk6F///7YsmUL7OzsGq1Q0l8f7zZwsFIhp7gce5OvYbC/s9QlERERNRt6dy3s2LEDvXr1wo4dO1BQUICCggLs2LEDvXv3xi+//II9e/YgNzcXr7/+elPUS3pQyGV4qKsLACDmJC+5ERER6UPvnqSXX34Zq1atQkhIiLZt8ODBMDMzw7Rp03DmzBksX74czz77bKMWSg0ztrsr1h24iN/PXEVpRRUslHr/lRMREbVKevckpaSkwMbG5rZ2GxsbpKamAqgZyJ2Tk3P/1dF96+5uCw97C5RVVmPH2atSl0NERNRs6B2SevbsidmzZ+PatWvatmvXruGNN95Ar169AADJyclwc3NrvCqpwWQyGcZ1r3l+W/SJTImrISIiaj70Dklr1qxBWloa3Nzc4OvrCz8/P7i5ueHixYv48ssvAQDFxcV45513Gr1YapjxPWoC656ka8gu4uzoRERE9aH3AJWOHTvi3Llz2L59O5KSkiCEQKdOnfDggw9CLq/JXOPGjWvsOuk+eDtYooeHLeLTryMm4TKeG9Be6pKIiIiMXoNG8cpkMgwfPhzDhw9v7HqoiYzv4Yb49Ov48fglTO3vDZlMJnVJRERERq1el9s2bNhQ7w1mZGRg//79DS6ImsaYrq5Qmshx/koRzlwulLocIiIio1evkLRy5Up06tQJixcvxrlz525bXlBQgK1bt+L//u//0LNnT+Tl5TV6oXR/1BamGNa55jElm45lSFwNERGR8atXSNq9ezeWLFmCXbt2ITAwEDY2NvDz80OXLl3g5uaGNm3aYOrUqfDy8sLp06cxevTopq6bGmBicM0A7p8TLuNGZbXE1RARERm3eo9Jeuihh/DQQw8hNzcX+/btw8WLF1FWVgYHBwcEBQUhKChIO3CbjFOIjwPa2Zoj83oZtp+5grHd20ldEhERkdHSe+B2mzZtMHbs2KaohZqYQi7Do8FuWP5HMr4/ks6QREREdBfs+mllJga7Qy4DDqXmIfVasdTlEBERGS2GpFbG1dYc4R2dAADfH0mXuBoiIiLjxZDUCk3u7QEA+OH4JQ7gJiIiugOGpFYovJMT2tma43ppJX49lSV1OUREREapwSGpoqICiYmJqKqqasx6yAAUchn+r09Nb9L6Q39JXA0REZFx0jsklZaWYurUqbCwsEDnzp2Rnl4zrmXWrFn44IMPGr1AahqTernDVCHDyYzrOHXputTlEBERGR29Q1JUVBROnjyJuLg4mJmZaduHDBmCjRs3Nmpx1HQcrFQY1cUFALDuwEVpiyEiIjJCeoekLVu24NNPP0X//v11HpIaEBCAlJSURi2OmtbTod4AgF9OZuFaUbnE1RARERkXvUPStWvX4OTkdFt7SUkJnyzfzHR3t0WQhy0qqjX49jDHJhEREd1K75DUq1cv/Prrr9rPtcFo9erV6NevX+NVRgbxdIgXAOCbQ+kor+J0AERERLX0DkmLFi3CW2+9hRdeeAFVVVX46KOP8OCDD2LdunVYsGCB3gVkZmbi8ccfR5s2bWBhYYHu3bvj+PHj2uXFxcWIiIiAm5sbzM3N4e/vj5UrV9a5LSEERowYAZlMhi1bttxz3ytWrIC3tzfMzMzQs2dP7N27V+/6m7uRXVzQ1sYMOcXl+DnhstTlEBERGQ29Q1JISAj279+P0tJS+Pj44Pfff4ezszMOHjyInj176rWt/Px8hIaGwtTUFNu2bcPZs2fx73//G7a2ttp1IiMj8dtvv+Gbb77BuXPnEBkZiZdeegk///zzbdtbvnx5vS/5bdy4Ea+88greeustnDhxAgMGDMCIESO0d+u1FqYKOZ4J9QIAfLk3FUIIaQsiIiIyEjIh4a/inDlzsH///rv24AQGBmLSpEl45513tG09e/bEyJEjMX/+fG3byZMn8dBDD+Ho0aNwcXFBdHQ0xo0bd8ft9unTBz169NDplfL398e4ceOwaNGie9ZeWFgItVqNgoIC2NjY3HN9Y1ZQVomQRTtRUlGNdc/0wqCOt485IyIiagn0+f2uV09SYWFhvV/6iImJQXBwMB599FE4OTkhKCgIq1ev1lmnf//+iImJQWZmJoQQiI2NRVJSEoYNG6Zdp7S0FJMnT8ann36Ktm3b3nO/FRUVOH78OIYOHarTPnToUBw4cKDO75SXl9/XsRoztbkpHrv5qJLVe1MlroaIiMg41Csk2draws7Orl4vfaSmpmLlypXw8/PD9u3bMWPGDMyaNQvr16/XrvPxxx8jICAAbm5uUCqVGD58OFasWIH+/ftr14mMjERISAjGjh1br/3m5OSguroazs7OOu3Ozs64cuVKnd9ZtGgR1Gq19uXu7q7XsRq7Z/t7w0Quw/4LuZxckoiICIBJfVaKjY3Vvr948SLmzJmDp59+Wns328GDB/HVV1/V6zLVrTQaDYKDg7Fw4UIAQFBQEM6cOYOVK1fiySefBFATkg4dOoSYmBh4enpiz549mDlzJlxcXDBkyBDExMRg165dOHHihF77BnDb+CUhxB3HNEVFReHVV1/Vfi4sLGxRQamdrTnGdHfFT/GZWBGbgs+f0G98GRERUUtTr5AUFhamfT9v3jwsXboUkydP1raNGTMGXbp0wapVq/DUU0/Ve+cuLi4ICAjQafP398fmzZsBAGVlZZg7dy6io6MxatQoAEDXrl2RkJCAJUuWYMiQIdi1axdSUlJ0BnsDwMMPP4wBAwYgLi7utv06ODhAoVDc1muUnZ19W+9SLZVKBZVKVe9ja45mhPngp/hMbD97BReyi+HrZCV1SURERJLR++62gwcPIjg4+Lb24OBgHDlyRK9thYaGIjExUactKSkJnp6eAIDKykpUVlZCLtctU6FQQKPRAKgZ/H3q1CkkJCRoXwCwbNkyrF27ts79KpVK9OzZEzt27NBp37FjB0JCQvQ6hpakg7M1HgxwhhDA57s5ezoREbVueockd3d3fP7557e1f/HFF3pffoqMjMShQ4ewcOFCXLhwAd999x1WrVqFF198EQBgY2ODsLAwzJ49G3FxcUhLS8O6deuwfv16jB8/HgDQtm1bBAYG6rwAwMPDA97e3tp9DR48GJ9++qn286uvvoovv/wS//nPf7RTC6Snp2PGjBn6npIWZeYgHwDAlhOZyMgrlbgaIiIi6dTrctutli1bhocffhjbt29H3759AQCHDh1CSkqK9jJZffXq1QvR0dGIiorCvHnz4O3tjeXLl2PKlCnadTZs2ICoqChMmTIFeXl58PT0xIIFC/QOMykpKcjJydF+njRpEnJzczFv3jxkZWUhMDAQW7du1fZitVZBHnYY4OeAvck5WBGXgkUTukhdEhERkSQaNE9SRkYGVq5cifPnz0MIgYCAAMyYMaNFDWS+l5Y0T9LfHbuYh0c+PwhThQxxs8PRztZc6pKIiIgahT6/35JOJtmcteSQBAD/t/oQDqTk4om+npg/LlDqcoiIiBqFPr/f9brcdurUKQQGBkIul+PUqVN3Xbdr1671r5SM1qzBfjiQkosNR9MxPaw93OwspC6JiIjIoOoVkrp3744rV67AyckJ3bt3h0wmq/MZXzKZDNXVfJJ8S9C3fRuE+LTBgZRcfLrrAj54mOGXiIhal3qFpLS0NDg6OmrfU+vw2tAOOLDyIH44fgkzwnzg5WApdUlEREQGU6+QdOsdX3e7+4vDm1qWnp72GNTREXGJ1/DRzmQsm9Rd6pKIiIgMRu95kp544gkUFxff1n7x4kUMHDiwUYoi4/Hagx0BAFsSMnH+Sst5qC8REdG96B2Szp49iy5dumD//v3atq+++grdunW74yM9qPnq4qbGqC4uEAL412+J9/4CERFRC6F3SDp8+DAmTZqEBx54AHPnzsWjjz6KiIgILFu2DD/++GNT1EgSe21oByjkMuw8n40jaXlSl0NERGQQes+4bWJigg8++AAqlQrz58+HiYkJdu/ejX79+jVFfWQE2jtaYVIvd3x3OB0fbDuHzS+EQCaTSV0WERFRk9K7J6myshKvvfYaFi9ejKioKPTr1w/jx4/H1q1bm6I+MhKvDPaDuakC8enXsf3MFanLISIianJ6h6Tg4GDExMQgLi4OCxYsQFxcHCIjIzFhwgTMnDmzKWokI+BkY4bnB9Q8MHjRtvOoqNJIXBEREVHTalBISkhI0D7cViaT4c0338ShQ4ewZ8+eRi+QjMf0MB84WqvwV24p1h+8KHU5RERETapRn91WXl4OlUrVWJszai392W13svFoOt7c/CdszEywe3Y47CyVUpdERERUb/r8fuvdkwQAu3fvxujRo+Hr6ws/Pz+MGTMGe/fubTUBqTV7pKc7OrW1RuGNKny0M1nqcoiIiJqM3iHpm2++wZAhQ2BhYYFZs2YhIiIC5ubmGDx4ML777rumqJGMiEIuwzsPBQAAvj70FxKvFElcERERUdPQ+3Kbv78/pk2bhsjISJ32pUuXYvXq1Th37lyjFmisWuvltlozvj6O385cQb/2bfDd8304JQARETULTXq5LTU1FaNHj76tfcyYMXz4bSvy1ih/qEzkOJiai61/ckoAIiJqefQOSe7u7ti5c+dt7Tt37oS7u3ujFEXGz93eAi8M8gEALPj1LEorqiSuiIiIqHHpPeP2a6+9hlmzZiEhIQEhITUzL+/btw/r1q3DRx991BQ1kpGaEeaDH45dQub1Mny66wLeGN5J6pKIiIgaTYOmAIiOjsa///1v7fgjf39/zJ49G2PHjm30Ao1Vax+TVGvH2at4fv0xmMhl2PbyAPg5W0tdEhER0R3p8/vdqPMktSYMSf/z3FfH8Me5q+jtbY+N0/pyEDcRERmtJp8niehW740JgLmpAkfS8rA5PlPqcoiIiBpFvUKSvb09cnJyAAB2dnawt7e/44taHzc7C7w8xA8AsHDrOeSVVEhcERER0f2r18DtZcuWwdq6ZqzJ8uXLm7Ieaqam9vdGdHwmEq8WYf4vZ7FsUnepSyIiIrovHJPUQByTdLuEjOuYsGI/NAJY+0wvhHd0krokIiIiHfr8fus9BUBBQQF27NiBixcvQiaToX379hg8eDCDAqG7uy2eCfXGmn1peOunP/H7q2GwUun9jxgREZFR0OsX7JtvvkFERAQKCwt12tVqNT7//HNMmjSpUYuj5ue1oR3w+9kryMgrw4e/nce8sYFSl0RERNQg9b67LT4+Hs888wzGjRuHEydOoKysDKWlpTh27BhGjx6NJ554AidPnmzKWqkZsFCaYNH4rgCA9Qf/wqHUXIkrIiIiaph6j0l65plnUFxcjB9++KHO5Y888ghsbGzwn//8p1ELNFYck3R3czafwoajGXC3N8dvLw+EJS+7ERGREWiSeZL279+P6dOn33H5jBkzsG/fvvpXSS3aW6P80c7WHBl5ZVi49ZzU5RAREemt3iHp8uXL6NChwx2Xd+jQAZmZnEiQalibmeJfj9Rcdvv2cDr2JF2TuCIiIiL91DsklZaWwszM7I7LVSoVbty40ShFUcsQ4uuAp/p5AgDe3HwKBWWVEldERERUf3oNFNm+fTvUanWdy65fv94Y9VAL8+aITtiddA0Xc0vx9pbT+Pix7ny2GxERNQv1Hrgtl9+700kmk6G6uvq+i2oOOHC7/k6k5+ORzw+iWiOwbFI3jA9yk7okIiJqpZpk4LZGo7nnq7UEJNJPkIcdXhlc82y3d7acQUZeqcQVERER3Vu9QxLR/ZgZ7oteXnYoLq/CKxsTUFWtkbokIiKiu2JIIoNQyGVYOrE7rFUmOP5XPj7emSx1SURERHfFkEQG425vgQUTugAAPom9gH3JORJXREREdGcMSWRQY7q5YnJvdwgBvLIxAdlFnDaCiIiME0MSGdy7ozujU1tr5BSX4+XvE1CtqdcNlkRERAbV4JBUUVGBS5cuIT09XedFdC9mpgp8NqUHLJQKHEzNxSe7OD6JiIiMj94hKTk5GQMGDIC5uTk8PT3h7e0Nb29veHl5wdvbuylqpBbIx9EKC8YHAgA+2pnM8UlERGR09H40+9NPPw0TExP88ssvcHFx4ezJ1GDjg9xwODUPG45m4KXv4/Hfl/rDzc5C6rKIiIgANCAkJSQk4Pjx4+jUqVNT1EOtzHtjOuNsViFOXSrAC9/E44cZ/WBmqpC6LCIiIv0vtwUEBCAnh5dGqHGYmSqwYkoP2FmY4s/MAvzj59Oo55NyiIiImpTeIWnx4sV44403EBcXh9zcXBQWFuq8iPTlZmeBTyb3gFwGbDp2Cd8d4Q0AREQkvXo/4LZW7YNu/z4WSQjBB9zSfVkZl4LFv52HqUKGb5/ri97e9lKXRERELYw+v996j0mKjY1tcGFEdzMjrD1OZxbg1z+zMOOb4/j5xVC423MgNxERSUPvniSqwZ6kplFWUY1HvziA05mF6NTWGj++EAIrld5ZnoiIqE76/H43KCRdv34da9aswblz5yCTyRAQEIBnn30WarW6wUU3NwxJTSeroAxjPt2Pa0XlGOLvjFVP9IRczqkmiIjo/unz+633wO1jx47Bx8cHy5YtQ15eHnJycrB06VL4+PggPj6+wUUT1XJRm2PVEz2hNJHjj3NX8eH2RKlLIiKiVkjvnqQBAwbA19cXq1evholJzWWQqqoqPPfcc0hNTcWePXuapFBjw56kphd94hIiN54EAHz4cFdM7OUucUVERNTcNenlNnNzc5w4ceK2ySTPnj2L4OBglJaW6l9xM8SQZBhLtifi09gLMJHL8J+ne2FgB0epSyIiomasSS+32djY1Pkg24yMDFhbW+u7OaK7em1oB4zt7ooqjcDMb+Nx9jLn4iIiIsPQOyRNmjQJU6dOxcaNG5GRkYFLly5hw4YNeO655zB58uSmqJFaMZlMhg8f6Yq+7e1RXF6FZ9cdRVZBmdRlERFRK6D3vdVLliyBTCbDk08+iaqqKgCAqakpXnjhBXzwwQeNXiCRykSBLx4PxsOfH8CF7GI8s/YoNs3oBxszU6lLIyKiFqzB8ySVlpYiJSUFQgj4+vrCwqJ1TfrHMUmGdym/FONXHMC1onL08bbHV8/25sNwiYhIL006JqmWhYUFbG1tYW9v3+oCEknDzc4Ca5/uBSuVCQ6n5eGl70+gqlojdVlERNRC6R2Sqqqq8M4770CtVsPLywuenp5Qq9V4++23UVlZ2RQ1EmkFtlNj9ZPBUJrIsePsVcz56U9w0ngiImoKeoekiIgIrFq1Ch9++CFOnDiBEydO4MMPP8SaNWvw0ksvNUWNRDr6+bTBp5ODIJcBPx6/hIVbzzEoERFRo9N7TJJarcaGDRswYsQInfZt27bhscceQ0FBQaMWaKw4Jkl6m45l4I0fTwEA3hjeETMH+UpcERERGbsmHZNkZmYGLy+v29q9vLygVCr13RxRg00MdsdbI/0BAB/+loivDlyUtiAiImpR9A5JL774IubPn4/y8nJtW3l5ORYsWICIiIhGLY7oXp4f2B4vhvsAAN6NOYNvD/8lcUVERNRS1GuepAkTJuh8/uOPP+Dm5oZu3boBAE6ePImKigoMHjy48SskuofXh3ZERZUGq/em4a3o0zCVy/mcNyIium/1CklqtVrn88MPP6zz2d2dP0gkHZlMhrkj/VFZLbDuwEW8+dMpmJrIMD7ITerSiIioGatXSFq7di0AQAiB9PR0ODo6cm4kMioymQzvjg5AlUaDbw6l47VNJ2Eil2N0N1epSyMiomZKrzFJQgj4+fkhMzOzqeohajCZTIZ5YwLxWC93aATwysYE/HLqstRlERFRM6VXSJLL5fDz80Nubm5T1UN0X+RyGRaO74KHe7ihWiMw6/sT2Hz8ktRlERFRM6T33W0ffvghZs+ejdOnTzdFPUT3TS6X4cNHump7lF7/8SS+O5wudVlERNTM6D2ZpJ2dHUpLS1FVVQWlUglzc3Od5Xl5eY1aoLHiZJLGT6MR+Od/z+CrgzXTArw7OgDPhHpLXBUREUlJn9/veg3cvtXy5csbWheRQcnlMrw3pjPMTBX4Yk8q/vnfs7hRqcELg3ykLo2IiJoBvXuSGltmZibefPNNbNu2DWVlZejQoQPWrFmDnj17AgCKi4sxZ84cbNmyBbm5ufDy8sKsWbPwwgsvaLcxffp0/PHHH7h8+TKsrKwQEhKCxYsXo1OnTnfc73vvvYd//vOfOm3Ozs64cuVKvepmT1LzIYTAsj+S8fHOZADArAd8EflgB8hkMokrIyIiQ2vSnqRblZWVobKyUqdNn8CQn5+P0NBQhIeHY9u2bXByckJKSgpsbW2160RGRiI2NhbffPMNvLy88Pvvv2PmzJlwdXXF2LFjAQA9e/bElClT4OHhgby8PLz33nsYOnQo0tLSoFAo7rj/zp07448//tB+vtu61HzJZDK8+mAHmJnK8eFvifh41wXkllRg3thAKOQMSkREVDe9Q1JJSQnefPNNbNq0qc673Kqrq+u9rcWLF8Pd3V07DxOA254Ld/DgQTz11FMYNGgQAGDatGn44osvcOzYMW1ImjZtms7333//fXTr1g0XL16Ej8+dL62YmJigbdu29aq1vLxc51EshYWF9foeGY+Zg3xhbWaKf/x8Gt8eTkdeSQWWTeoOM1OGYyIiup3ed7e98cYb2LVrF1asWAGVSoUvv/wS//znP+Hq6or169frta2YmBgEBwfj0UcfhZOTE4KCgrB69Wqddfr374+YmBhkZmZCCIHY2FgkJSVh2LBhdW6zpKQEa9euhbe39z1nAk9OToarqyu8vb3x2GOPITU19Y7rLlq0CGq1WvviLOPN0xN9PfHp5B5QKuTYdvoKnl57BEU3Ku/9RSIian2Entzd3UVsbKwQQghra2uRnJwshBBi/fr1YsSIEXptS6VSCZVKJaKiokR8fLz4/PPPhZmZmfjqq6+065SXl4snn3xSABAmJiZCqVSK9evX37atzz77TFhaWgoAolOnTuLChQt33ffWrVvFjz/+KE6dOiV27NghwsLChLOzs8jJyalz/Rs3boiCggLtKyMjQwAQBQUFeh0zGYf9yddE53/8Jjzf/EWM/GiPyC68IXVJRERkAAUFBfX+/dZ74LaVlRXOnDkDT09PuLm54aeffkLv3r2RlpaGLl26oLi4uN7bUiqVCA4OxoEDB7Rts2bNwtGjR3Hw4EEAwJIlS7B69WosWbIEnp6e2LNnD6KiohAdHY0hQ4Zov1dQUIDs7GxkZWVhyZIlyMzMxP79+2FmZlavWkpKSuDj44M33ngDr7766j3X58Dt5u90ZgGeXnsEOcUV8Gxjga+e6Q0vB0upyyIioiakz++33pfb2rdvj4sXLwIAAgICsGnTJgDAf//7X50B1/Xh4uKCgIAAnTZ/f3+kp9dM/FdWVoa5c+di6dKlGD16NLp27YqIiAhMmjQJS5Ys0fmeWq2Gn58fBg4ciB9//BHnz59HdHR0vWuxtLREly5dkJycrNcxUPMV2E6NH2eEwMPeAn/llmL8iv04erF1zPNFRET3pndIeuaZZ3Dy5EkAQFRUlHZsUmRkJGbPnq3XtkJDQ5GYmKjTlpSUBE9PTwBAZWUlKisrIZfrlqlQKKDRaO66bSGEzkDreykvL8e5c+fg4uJS7+9Q8+flYIkfX+iHbm5q5JdWYsrqw9hygs8mJCKiBtzdFhkZqX0fHh6O8+fP49ixY/Dx8UG3bt303lZISAgWLlyIiRMn4siRI1i1ahVWrVoFoGY6gbCwMMyePRvm5ubw9PTE7t27sX79eixduhQAkJqaio0bN2Lo0KFwdHREZmYmFi9eDHNzc4wcOVK7r8GDB2P8+PGIiIgAALz++usYPXo0PDw8kJ2djffffx+FhYV46qmn9D0l1Mw5WZthw7R+iNyYgN/OXMErGxOQllOCV4b4cS4lIqJW7L7mSQIADw8PeHh4NOi7vXr1QnR0NKKiojBv3jx4e3tj+fLlmDJlinadDRs2ICoqClOmTEFeXh48PT2xYMECzJgxAwBgZmaGvXv3Yvny5cjPz4ezszMGDhyIAwcOwMnJSbudlJQU5OTkaD9funQJkydPRk5ODhwdHdG3b18cOnRI24tFrYu5UoEVU3pg8fbz+GJ3Kj7amYy/ckuw+JGuUJlwigAiotao3gO3d+3ahYiICBw6dOi2gU4FBQUICQnB559/jgEDBjRJocaGA7dbru+PpOOdLadRpRHo5WWHL54Ihr2lUuqyiIioETTJwO3ly5fj+eefr3ODarUa06dP114CI2rOJvf2wLpnesPazARHL+Zj3Gf7kXilSOqyiIjIwOodkk6ePInhw4ffcfnQoUNx/PjxRimKSGr9/Rzw0wshcLc3R3pezZ1vW//MkrosIiIyoHqHpKtXr8LU1PSOy01MTHDt2rVGKYrIGPg5W+PnF/sj1LcNSiuqMfPbeHz423lUayR9JjQRERlIvUNSu3bt8Oeff95x+alTp3j7PLU49pZKfPVMbzw/wBsAsCIuBc+uO4qCUj7KhIiopat3SBo5ciT+8Y9/4MaNG7ctKysrw7vvvouHHnqoUYsjMgYmCjneGhWAjx7rDjNTOXYnXcOYz/ZxnBIRUQtX77vbrl69ih49ekChUCAiIgIdO3aETCbDuXPn8Nlnn6G6uhrx8fFwdnZu6pqNAu9ua53OXC7AtPXHkXm9DBZKBT58pCse6uoqdVlERFRP+vx+6/Xstr/++gsvvPACtm/fjtqvyWQyDBs2DCtWrICXl9d9Fd6cMCS1XnklFXjp+3jsv5ALAHiynyfmjvSHmSnnUyIiMnZNFpJq5efn48KFCxBCwM/PD3Z2dg0utrliSGrdqqo1+PeOJKyMSwEAdHa1wWf/14MPyCUiMnJNHpKIIYlqxCZm47VNJ5FXUgErlQkWTeiC0d14+Y2IyFg1yWSSRHS78I5O2DprAHp72aO4vAovfX8Cc6P/xI3KaqlLIyKi+8SQRHSf2qrN8N3zffBiuA9kMuC7w+kYv+IAUq8VS10aERHdB4YkokZgopBj9rBO+OqZ3mhjqcS5rEKM/mQfNh3NAK9oExE1TwxJRI1oYAdHbH15APp426OkohpvbD6F6V8fR25xudSlERGRnhiSiBqZs40Zvnu+L94c3gmmChl+P3sVw5bvwc5zV6UujYiI9MCQRNQEFHIZXhjkgy0vhqKDsxVyiisw9atjiPrpT5SUV0ldHhER1QNDElET6uyqRkxEfzzXv+bZb98fScfIj/fi+F/5EldGRET3wpBE1MTMTBV4+6EAfPdcH7iqzfBXbike/fwA/v17IiqqNFKXR0REd8CQRGQgIb4O2PbKQIwPageNAD7ZdQGjP9mHE+nsVSIiMkYMSUQGpDY3xbJJ3fHZ//VAG0slEq8WYcLKA5j/y1mUVnCsEhGRMWFIIpLAqK4u2PFqGCYEtYMQwJp9aRi2fA/2JedIXRoREd3EkEQkEXtLJZZO6o51z/RCO1tzZOSV4fE1hzH7h5MoKK2UujwiolaPIYlIYoM6OmF75EA8HeIFmQz44fglDF66G9v+zJK6NCKiVo0hicgIWKlM8N6YzvhxRj/4OFoip7gcL3wbj2nrjyHzepnU5RERtUoMSURGpKenPba+PACzHvCFibxmtu7B/47Dp7uSUV5VLXV5REStCkMSkZFRmSjw6tCO+HXWAPT2tseNSg2W/J6EYcv2IDYxW+ryiIhaDYYkIiPVsa01Nk7ri48e6w4naxUu5pbimbVH8fz6Y8jIK5W6PCKiFo8hiciIyWQyjO3eDjtfC8PzA7xhIpdhx9mrGLJ0Nz76Ixk3KnkJjoioqciEEELqIpqjwsJCqNVqFBQUwMbGRupyqJVIvlqEf/x8BgdTcwEAHvYW+MdDARjs7wSZTCZxdURExk+f32+GpAZiSCKpCCHw659ZeP+Xc7hSeAMAEOrbBlEj/BHYTi1xdURExo0hyQAYkkhqJeVV+GTXBfxnXxoqqjWQyYDx3dvhtWEd0c7WXOryiIiMEkOSATAkkbHIyCvFkt8T8XPCZQCA0kSOZ0K9MHOQL9TmphJXR0RkXBiSDIAhiYzNqUvXsXDrORxKzQMA2FqY4qUH/PBEX08oTXiPBhERwJBkEAxJZIyEEIhNzMaireeRnF0MoGZw9+xhHfFQVxcO7iaiVo8hyQAYksiYVVVr8OPxS1i6IwnZReUAgG7utpgzvBP6+bSRuDoiIukwJBkAQxI1B6UVVVi9Jw1f7ElBaUXNnEp929sjckgH9GnPsERErQ9DkgEwJFFzcq2oHB/vTMbGoxmoqNYAAEJ82uCVIR3Q29te4uqIiAyHIckAGJKoObp8vQyfxV7ApmMZqKyu+Vc/1LcNIod0QLAXwxIRtXwMSQbAkETN2aX8UqyIS8EPt4SlAX4OeGWIH3p6MiwRUcvFkGQADEnUElzKL8VnsRfww7FLqNL8LyxFPtgBPTzsJK6OiKjxMSQZAEMStSQZeTVh6cfjumFpRpgPQnzacOoAImoxGJIMgCGJWqL03FJ8GpuMzfGZqL4ZlgLb2eD5Ae0xqosLTBSclJKImjeGJANgSKKWLD23FF/uS8WmYxm4UVlzN1w7W3NM7e+NSb3cYakykbhCIqKGYUgyAIYkag3ySirw9cG/sP7gReSWVAAA1OameLyvB54K8YKTtZnEFRIR6YchyQAYkqg1uVFZjc3xl/Dl3jSk5ZQAqHmQ7oSgdnh+YHv4OFpJXCERUf0wJBkAQxK1RtUagR1nr2LVnhTEp1/Xtg/xd8b0sPYI9rTjIG8iMmoMSQbAkESt3bGLefhiTyp2nL2qbQtsZ4PH+3hiTHdXWCg5bomIjA9DkgEwJBHVSLlWjC/3pmJzfCYqqmoGeVubmeCRnm6Y0scTvk68FEdExoMhyQAYkoh05ZdU4IfjGfj2cDr+yi3Vtof4tMHjfT3xYIAzTDmFABFJjCHJABiSiOqm0QjsvZCDrw/+hV3nr+LmdEtwslZhcm8PTO7tgbZq3hVHRNJgSDIAhiSie8u8XobvD6djw9F05BTXTCGgkMvwoL8zHu/riVBfzuZNRIbFkGQADElE9VdRpcH2M1fw9aG/cCQtT9ve3sESj/V2x7ju7eBkw94lImp6DEkGwJBE1DCJV4rw7eG/8FN8JorLqwAAchkwsIMjHu7hhgcDnGFmqpC4SiJqqRiSDIAhiej+FJdXISbhMn48nqEz55K1mQke6uqCh3u4oSfnXSKiRsaQZAAMSUSNJ/VaMX6Kz0T0iUxkXi/Ttnu2scCEIDdM6NEO7vYWElZIRC0FQ5IBMCQRNT6NRuBQWi5+is/E1j+zUFpRrV3W29sej/Rww4gubWFtZiphlUTUnDEkGQBDElHTKq2owm+nr+Cn+EzsT8lB7X+pzEzlGNa5LSb0cEOoTxuYcO4lItIDQ5IBMCQRGc7l62XYkpCJzccvIeVaiba9jaUSQzs7Y0SgC/r5tOFklUR0TwxJBsCQRGR4QgicvFSAn+Iv4b8nLyO/tFK7TG1uigcDnDGyS1uE+jpAZcI75IjodgxJBsCQRCStymoNDqfmYevpLGw/fQW5JRXaZdYqEwwJcMbwwLYI6+DIKQWISIshyQAYkoiMR7VG4OjFPGz7MwvbTl9BdlG5dpmFUoEHOjlhRKALwjs5wkJpImGlRCQ1hiQDYEgiMk4ajUB8ej62nb6CbX9m4XLBDe0yM1M5BnVwwogubfFAJyfeJUfUCjEkGQBDEpHxqx3DtO10Frb9eQXpeaXaZUqFHAP8HBDeyQmDOjrCzY7zMBG1BgxJBsCQRNS8CCFw5nIhfjt9BVtPZyH1lrvkAMDXyQqDOjhiUEcn9PK248BvohaKIckAGJKImi8hBJKuFuOPc1cRl5iN+PTrqNb87z+FFkoFQnzaIKyjEwZ1cORs30QtCEOSATAkEbUcBaWV2HvhGuISr2F30jVcu2XgN8BeJqKWhCHJABiSiFomjUbgbFYhdiddYy8TUQvEkGQADElErUNBaSX2XchBbGJ2nb1MPo6WCOvghL7t7dHLyx52lkqJKiWi+mBIMgCGJKLW5169TADQqa01+njbo7d3G/T2toejtUqiaomoLgxJBsCQRES1vUz7U3JwODVX57lytXwcLdHbuw36trdHH+82aKs2k6BSIqrFkGQADElE9HfXispx9GIeDqfm4nBaHs5fKbptHQ97C/Txtkef9m3Qx9sebnbmkMlkElRL1Drp8/st+SOzMzMz8fjjj6NNmzawsLBA9+7dcfz4ce3y4uJiREREwM3NDebm5vD398fKlSt1tjF9+nT4+PjA3Nwcjo6OGDt2LM6fP3/Pfa9YsQLe3t4wMzNDz549sXfv3kY/PiJqPRytVRjZxQX/HBuI314ZiIR/PIhVT/TE1P7e6NJODbkMSM8rxQ/HL+H1H05iwIexCP1gFyI3JuD7I+lIvVYM/n8rkfGQ9CFG+fn5CA0NRXh4OLZt2wYnJyekpKTA1tZWu05kZCRiY2PxzTffwMvLC7///jtmzpwJV1dXjB07FgDQs2dPTJkyBR4eHsjLy8N7772HoUOHIi0tDQpF3bfqbty4Ea+88gpWrFiB0NBQfPHFFxgxYgTOnj0LDw8PQxw+EbVwthZKDO3cFkM7twUAFN6oxPGL+TiclofDabn481IBLhfcQPSJTESfyARQE7R6e9sj2NMOXd1s0dnVhg/oJZKIpJfb5syZg/3799+1BycwMBCTJk3CO++8o23r2bMnRo4cifnz59f5nVOnTqFbt264cOECfHx86lynT58+6NGjh06vlL+/P8aNG4dFixbds3ZebiOi+1VaUYX4v67jcFouDqfmISHjOiqqNTrrKOQydHC2Rtd2anRxU6Obmy06trWG0kTyCwFEzZI+v9+S9iTFxMRg2LBhePTRR7F79260a9cOM2fOxPPPP69dp3///oiJicGzzz4LV1dXxMXFISkpCR999FGd2ywpKcHatWvh7e0Nd3f3OtepqKjA8ePHMWfOHJ32oUOH4sCBA3V+p7y8HOXl/7v1t7CwUN/DJSLSYaE0QX8/B/T3cwAA3KisRkLGdRxJqwlMpy5dR05xBc5lFeJcViE2HssAUPPcOX8Xa3RxU6NrO1t0dVfD19EKJgoGJ6LGJGlISk1NxcqVK/Hqq69i7ty5OHLkCGbNmgWVSoUnn3wSAPDxxx/j+eefh5ubG0xMTCCXy/Hll1+if//+OttasWIF3njjDZSUlKBTp07YsWMHlMq65yvJyclBdXU1nJ2dddqdnZ1x5cqVOr+zaNEi/POf/2yEoyYiqpuZqQJ927dB3/ZtANQ8PiWr4AZOXSrAn5nXcepSAU5dKkBBWSVOXirAyUsFANJvfleOzq5qdHWreXVpZ4v2DpaQyzkonKihJL3cplQqERwcrNN7M2vWLBw9ehQHDx4EACxZsgSrV6/GkiVL4OnpiT179iAqKgrR0dEYMmSI9nsFBQXIzs5GVlYWlixZgszMTOzfvx9mZrffbnv58mW0a9cOBw4cQL9+/bTtCxYswNdff13noO+6epLc3d15uY2IDEoIgYy8Mpy8dB1/Zhbg1KXrOJ1ZiOLyqtvWtVKZILCdDbq62daEp3a2cLfn3XTUujWby20uLi4ICAjQafP398fmzZsBAGVlZZg7dy6io6MxatQoAEDXrl2RkJCAJUuW6IQktVoNtVoNPz8/9O3bF3Z2doiOjsbkyZNv26+DgwMUCsVtvUbZ2dm39S7VUqlUUKk4KRwRSUsmk8GjjQU82lhgdDdXADWTXKbmlODPzOs4mVGAPzMLcOZyAYrLq3AoNQ+HUvO037e1MEWnttbwc7JGB2cr+DpZw8/ZCm0slQxPRH8jaUgKDQ1FYmKiTltSUhI8PT0BAJWVlaisrIRcrnudXaFQQKPRHdz4d0IInZ6fWymVSvTs2RM7duzA+PHjte07duzQ3jFHRNRcyOUy+DpZwdfJCuOD3AAAVdUaJGcX489LBTh181LduaxCXC+tvC04AYCdhSn8bgYmPycr+Dlbw8/JCo7WKoYnarUkDUmRkZEICQnBwoULMXHiRBw5cgSrVq3CqlWrAAA2NjYICwvD7NmzYW5uDk9PT+zevRvr16/H0qVLAdSMa9q4cSOGDh0KR0dHZGZmYvHixTA3N8fIkSO1+xo8eDDGjx+PiIgIAMCrr76KJ554AsHBwejXrx9WrVqF9PR0zJgxw/AngoiokZko5PB3sYG/iw0m9qq5iaW8qhpJV4qRdLUIydnFuJBdhKSrxcjIL0V+aSWOXMzDkYu64cnGzAR+zrf0OjlZwc/ZCm1tzBieqMWTNCT16tUL0dHRiIqKwrx58+Dt7Y3ly5djypQp2nU2bNiAqKgoTJkyBXl5efD09MSCBQu0YcbMzAx79+7F8uXLkZ+fD2dnZwwcOBAHDhyAk5OTdjspKSnIycnRfp40aRJyc3Mxb948ZGVlITAwEFu3btX2YhERtTQqEwW6uNVMJXCrsopqpFwrxoXsYiTfDE4XsovxV24JCm9U4fhf+Tj+V77Od6xUJvB1skIHZyv4OVnD92YPlKvanIPFqcXgY0kaiPMkEVFLd6OyGmk5JTW9TldrwlNydhEu5pbe9mDfWhZKBXydaoKTj5MlPOwt4G5nATc7c9hz3BMZAT67zQAYkoiotaqo0uBibgmSb4am2j/TckpQWX3nnxQLpQJuduZws7OAe+2f9jV/utmZQ21uyhBFTa7Z3N1GRETNj9JEjg7O1ujgbA3ARdteWa3BX7mluHAzOKVcK8al/DJk5JfiamE5SiuqkXS1GElXi+vcrrXKBO3szOFub1FnmLI2MzXQERLVYE9SA7EniYio/m5UVuPy9TJtaLqUf/N9Xs37nOK670a+ldrcFG525trLd7eGKTc7c1iq+P/9dG/sSSIiIqNiZqpAe0crtHe0qnN5WUU1Mq+XIiOvDJduhqjaMJWRV3P3XUFZzevM5bofC2VnYQonazM4WCvhaKWCg5UKDtY3/7RSwsFKBUdrFewtlTDlI1yoHhiSiIhIcuZKBXydrOHrZF3n8uLyKmRqe55KkZFfE6ZqQ1XhjSrkl1Yiv7QSiVfvvT87C9Ob4ak2SN0MUVYqOFj/L1C1sVTxYcKtGEMSEREZPSuVCTq2tUbHtnWHqIKySmTevGx3ragcOcW1r4pb2iqQV1IOjYA2UCVn1z0+6lZqc1NtiHKwvhmkaj//LWSZmSoa+9BJQgxJRETU7KnNTaE2v/fA7mqNQH5pTXDKKarQhqlrf/ucU1yO3OIKVGmE9jJfyrWSe27fSmVS8zIz+d97lQksVSawNvvfeyszE1jXvr+57Nb3KhM57/QzAgxJRETUaijkMm0PENrefV3NzYCkDVHFFcgpqg1Uuj1VOcXlqKwWKC6vqnnYcN3DpvSq89aQZXUzRFmr7hC0zExgpVLASmV6W1Dj5cKGY0giIiKqg1wug52lEnaWSvg5132Zr5YQAoVlVcgrrUDxjSptWCour0RxefXNtkqUlFej6EYVSm4uLyq/+f7md0oqqiBETY9XbQ/W/VIq5LAyM4GZiRwmCjlM5DKYKGRQyP/33kQug4lcfrP95vtblinkcpjeXGaqkN9c53/bMZXLoPjbdmq3odBuR37L9v63HdM71FIbFO0slfd9DhqKIYmIiOg+yWQyqC1Moba4v7mcNBqB0spqnaBVUl6Fohv/e19883Nd70tuBq/iG1Uoq6wGAFRUa5BXUtEYh2lwD3V1waf/10Oy/TMkERERGQn5LZfZ7ldVtQYlFdU1YetGFcqrqlGlEaiqFqjSaFBVLVCtETfbNDV/3tJeqRGo1rbfbKvW3PxToFqjuWV7NdvQbu/mdv73Xc3N7/xvX7dv7+b3NALV1QKVGg1UJtIOhGdIIiIiaoFMFHKozeX1GtBOdeNoLiIiIqI6MCQRERER1YEhiYiIiKgODElEREREdWBIIiIiIqoDQxIRERFRHRiSiIiIiOrAkERERERUB4YkIiIiojowJBERERHVgSGJiIiIqA4MSURERER1YEgiIiIiqgNDEhEREVEdTKQuoLkSQgAACgsLJa6EiIiI6qv2d7v2d/xuGJIaqKioCADg7u4ucSVERESkr6KiIqjV6ruuIxP1iVJ0G41Gg8uXL8Pa2hoymUzqcpqNwsJCuLu7IyMjAzY2NlKX0yrwnEuD510aPO/SaE7nXQiBoqIiuLq6Qi6/+6gj9iQ1kFwuh5ubm9RlNFs2NjZG/y9SS8NzLg2ed2nwvEujuZz3e/Ug1eLAbSIiIqI6MCQRERER1YEhiQxKpVLh3XffhUqlkrqUVoPnXBo879LgeZdGSz3vHLhNREREVAf2JBERERHVgSGJiIiIqA4MSURERER1YEgiIiIiqgNDEt2XlStXomvXrtoJxPr164dt27Zpl1+9ehVPP/00XF1dYWFhgeHDhyM5OVlnG+Xl5XjppZfg4OAAS0tLjBkzBpcuXTL0oTQr9zrvxcXFiIiIgJubG8zNzeHv74+VK1fqbOPKlSt44okn0LZtW1haWqJHjx748ccfDX0ozUpjnHcAOHjwIB544AFYWlrC1tYWgwYNQllZmSEPpVlprPMO1My2PGLECMhkMmzZssVAR9A83e95z8vLw0svvYSOHTvCwsICHh4emDVrFgoKCqQ4nIYRRPchJiZG/PrrryIxMVEkJiaKuXPnClNTU3H69Gmh0WhE3759xYABA8SRI0fE+fPnxbRp04SHh4coLi7WbmPGjBmiXbt2YseOHSI+Pl6Eh4eLbt26iaqqKgmPzLjd7bwLIcRzzz0nfHx8RGxsrEhLSxNffPGFUCgUYsuWLdptDBkyRPTq1UscPnxYpKSkiPnz5wu5XC7i4+OlOiyj1xjn/cCBA8LGxkYsWrRInD59WiQlJYkffvhB3LhxQ6rDMnqNcd5rLV26VIwYMUIAENHR0QY+kublfs/7n3/+KSZMmCBiYmLEhQsXxM6dO4Wfn594+OGHpTwsvTAkUaOzs7MTX375pUhMTBQAtP9CCSFEVVWVsLe3F6tXrxZCCHH9+nVhamoqNmzYoF0nMzNTyOVy8dtvvxm89uas9rwLIUTnzp3FvHnzdJb36NFDvP3229rPlpaWYv369Trr2Nvba7dB9aPvee/Tp4/OZ2oYfc+7EEIkJCQINzc3kZWVxZDUQA0577fatGmTUCqVorKysknrbCy83EaNprq6Ghs2bEBJSQn69euH8vJyAICZmZl2HYVCAaVSiX379gEAjh8/jsrKSgwdOlS7jqurKwIDA3HgwAHDHkAz9ffzDgD9+/dHTEwMMjMzIYRAbGwskpKSMGzYMO33+vfvj40bNyIvLw8ajQYbNmxAeXk5Bg0aJNGRNC8NOe/Z2dk4fPgwnJycEBISAmdnZ4SFhWn/faB7a+g/76WlpZg8eTI+/fRTtG3bVqrym62Gnve/KygogI2NDUxMmsmjY6XNaNQSnDp1SlhaWgqFQiHUarX49ddfhRBCVFRUCE9PT/Hoo4+KvLw8UV5eLhYtWiQAiKFDhwohhPj222+FUqm8bZsPPvigmDZtmkGPo7m503kXQojy8nLx5JNPCgDCxMREKJXK23qNrl+/LoYNG6Zdx8bGRvz++++GPoxm537O+8GDBwUAYW9vL/7zn/+I+Ph48corrwilUimSkpKkOJxm437/eZ82bZqYOnWq9jPYk1Qv93veb5WTkyM8PDzEW2+9ZYjSGwVDEt238vJykZycLI4ePSrmzJkjHBwcxJkzZ4QQQhw7dkx069ZNABAKhUIMGzZMjBgxQowYMUIIceeQNGTIEDF9+nSDHkdzc7fz/q9//Ut06NBBxMTEiJMnT4pPPvlEWFlZiR07dmi/HxERIXr37i3++OMPkZCQIN577z2hVqvFqVOnpDqkZuF+zvv+/fsFABEVFaWzzS5duog5c+YY/Fiak/s57z///LPw9fUVRUVF2u0xJNXP/f53plZBQYHo06ePGD58uKioqDD0YTQYQxI1usGDB9/WC3T9+nWRnZ0thBCid+/eYubMmUIIIXbu3CkAiLy8PJ31u3btKv7xj38YpuAWova8l5aWClNTU/HLL7/oLJ86daoYNmyYEEKICxcu3DZerHYbDKf60ee8p6amCgDi66+/1lln4sSJ4v/+7/8MVnNLoM95f/nll4VMJhMKhUL7AiDkcrkICwuToPrmS5/zXquwsFD069dPDB48WJSVlRmy3PvGMUnU6IQQ2vFItdRqNRwdHZGcnIxjx45h7NixAICePXvC1NQUO3bs0K6blZWF06dPIyQkxKB1N3e1572yshKVlZWQy3X/9VYoFNBoNABqxmcAuOs6VD/6nHcvLy+4uroiMTFRZ52kpCR4enoarOaWQJ/zPmfOHJw6dQoJCQnaFwAsW7YMa9euNXTpzZo+5x0ACgsLMXToUCiVSsTExOiMUW0WJI1o1OxFRUWJPXv2iLS0NHHq1Ckxd+5cIZfLtWNbNm3aJGJjY0VKSorYsmWL8PT0FBMmTNDZxowZM4Sbm5v4448/RHx8vHjggQc4BcA93Ou8h4WFic6dO4vY2FiRmpoq1q5dK8zMzMSKFSuEEDXjxXx9fcWAAQPE4cOHxYULF8SSJUuETCbTGXNAuu73vAshxLJly4SNjY344YcfRHJysnj77beFmZmZuHDhglSHZfQa47z/HXi57Z7u97wXFhaKPn36iC5duogLFy6IrKws7au5/PedIYnuy7PPPis8PT2FUqkUjo6OYvDgwTqDfz/66CPh5uYmTE1NhYeHh3j77bdFeXm5zjbKyspERESEsLe3F+bm5uKhhx4S6enphj6UZuVe5z0rK0s8/fTTwtXVVZiZmYmOHTuKf//730Kj0WjXSUpKEhMmTBBOTk7CwsJCdO3a9a6DLqlxzrsQQixatEi4ubkJCwsL0a9fP7F3715DH0qz0ljn/VYMSfd2v+c9NjZWAKjzlZaWJtFR6UcmhBDS9WMRERERGSeOSSIiIiKqA0MSERERUR0YkoiIiIjqwJBEREREVAeGJCIiIqI6MCQRERER1YEhiYiIiKgODElEREREdWBIIiKDWrduHWxtbaUuo9nKzc2Fk5MTLl68CACIi4uDTCbD9evXG3U/v/zyC4KCgvgsP2rVGJKICADw9NNPQyaT3fYaPnx4o+5n0qRJSEpKatRttiaLFi3C6NGj4eXlVa/1+/btixdeeEGnbeXKlZDJZFizZo1O+9SpU7UPln7ooYcgk8nw3XffNUrdRM0RQxIRaQ0fPhxZWVk6r++//75R92Fubg4nJ6dG3ebfCSFQVVXVpPtoShUVFXW2l5WVYc2aNXjuuefqva3w8HDExsbqtMXFxcHd3b3O9vDwcO3nZ555Bp988okelRO1LAxJRKSlUqnQtm1bnZednZ12uUwmw5dffonx48fDwsICfn5+iImJ0dlGTEwM/Pz8YG5ujvDwcHz11Vc6l4P+frntvffeQ/fu3fH111/Dy8sLarUajz32GIqKirTrCCHw4Ycfon379jA3N0e3bt3w448/apfXXnLavn07goODoVKpsHfv3tuO7+LFi5DJZNiwYQNCQkJgZmaGzp07Iy4uTme93bt3o3fv3lCpVHBxccGcOXO0oeu///0vbG1ttZehEhISIJPJMHv2bO33p0+fjsmTJ2s/HzhwAAMHDoS5uTnc3d0xa9YslJSUaJd7eXnh/fffx9NPPw21Wo3nn3++zr+fbdu2wcTEBP369atzOVATpEaNGoW+ffsiLy8P4eHhSExMRFZWls7xRUVF6Rx3RkYGUlNTdULSmDFjcOTIEaSmpt5xf0QtGUMSEenln//8JyZOnIhTp05h5MiRmDJlCvLy8gDUhJBHHnkE48aNQ0JCAqZPn4633nrrnttMSUnBli1b8Msvv+CXX37B7t278cEHH2iXv/3221i7di1WrlyJM2fOIDIyEo8//jh2796ts5033ngDixYtwrlz59C1a9c77m/27Nl47bXXcOLECYSEhGDMmDHIzc0FAGRmZmLkyJHo1asXTp48iZUrV2LNmjV4//33AQADBw5EUVERTpw4AaAmcDg4OOjUEhcXh7CwMADAn3/+iWHDhmHChAk4deoUNm7ciH379iEiIkKnpn/9618IDAzE8ePH8c4779RZ9549exAcHHzH4yooKMDQoUNRUVGBnTt3wt7eHqGhoTA1NdUGorNnz6KsrAzPPvssCgsLkZycDACIjY2FUqnUXm4DAE9PTzg5OdUZOIlaBUFEJIR46qmnhEKhEJaWljqvefPmadcBIN5++23t5+LiYiGTycS2bduEEEK8+eabIjAwUGe7b731lgAg8vPzhRBCrF27VqjVau3yd999V1hYWIjCwkJt2+zZs0WfPn20+zAzMxMHDhzQ2e7UqVPF5MmThRBCxMbGCgBiy5Ytdz3GtLQ0AUB88MEH2rbKykrh5uYmFi9eLIQQYu7cuaJjx45Co9Fo1/nss8+ElZWVqK6uFkII0aNHD7FkyRIhhBDjxo0TCxYsEEqlUhQWFoqsrCwBQJw7d04IIcQTTzwhpk2bplPH3r17hVwuF2VlZUIIITw9PcW4cePuWrsQQowdO1Y8++yzOm21x37+/HnRrVs3MWHCBFFeXq6zTkhIiLaGzz77TIwcOVIIIcTw4cPFqlWrhBBCPPPMM2LAgAG37TMoKEi8995796yNqCViTxIRaYWHhyMhIUHn9eKLL+qsc2sPjaWlJaytrZGdnQ0ASExMRK9evXTW79279z336+XlBWtra+1nFxcX7TbPnj2LGzdu4MEHH4SVlZX2tX79eqSkpOhs5269LLe69XKViYkJgoODce7cOQDAuXPn0K9fP8hkMu06oaGhKC4uxqVLlwAAgwYNQlxcHIQQ2Lt3L8aOHYvAwEDs27cPsbGxcHZ2RqdOnQAAx48fx7p163RqHzZsGDQaDdLS0vSqvaysDGZmZnUuGzJkCNq3b49NmzZBqVTqLAsPD9f2JMXFxWHQoEEAgLCwMJ32Bx544Lbtmpubo7S09J61EbVEJlIXQETGw9LSEr6+vnddx9TUVOezTCbTjs8RQuiEi9q2e7nbNmv//PXXX9GuXTud9VQq1W31N1Rt3Xc7htr2QYMGYc2aNTh58iTkcjkCAgIQFhaG3bt3Iz8/X3uprbb+6dOnY9asWbft08PDQ6/aHRwckJ+fX+eyUaNGYfPmzTh79iy6dOmisyw8PBwLFixAZmYmdu/ejddffx1ATUj65JNPkJ6ejrS0NJ3xSLXy8vLg6Oh4z9qIWiL2JBFRo+nUqROOHj2q03bs2LH72mZAQABUKhXS09Ph6+ur83J3d2/QNg8dOqR9X1VVhePHj2t7fgICAnDgwAGdcHfgwAFYW1trQ1rtuKTly5cjLCwMMplM2ytz63gkAOjRowfOnDlzW+2+vr639fjcS1BQEM6ePVvnsg8++ABPPfUUBg8efNs6ISEhUKlUWLFiBcrKytCzZ08ANb1XBQUF+OKLL2BmZoa+ffvqfO/GjRtISUlBUFCQXnUStRQMSUSkVV5ejitXrui8cnJy6v396dOn4/z583jzzTeRlJSETZs2Yd26dQBwW+9MfVlbW+P1119HZGQkvvrqK6SkpODEiRP47LPP8NVXXzVom5999hmio6Nx/vx5vPjii8jPz8ezzz4LAJg5cyYyMjLw0ksv4fz58/j555/x7rvv4tVXX4VcXvOfTLVaje7du+Obb77RXroaOHAg4uPjkZSUpG0DgDfffBMHDx7Eiy++iISEBCQnJyMmJgYvvfSS3nUPGzYMZ86cuWNv0pIlSzBlyhQ88MADOH/+vLbd3Nwcffr0wSeffILQ0FAoFAoANT14/fr1wyeffKINUrc6dOgQVCrVXe+mI2rJGJKISOu3336Di4uLzqt///71/r63tzd+/PFH/PTTT+jatStWrlypvbvt7z/A+pg/fz7+8Y9/YNGiRfD398ewYcPw3//+F97e3g3a3gcffIDFixejW7du2Lt3L37++Wc4ODgAANq1a4etW7fiyJEj6NatG2bMmIGpU6fi7bff1tlGeHg4qqurtYHIzs4OAQEBcHR0hL+/v3a9rl27Yvfu3UhOTsaAAQMQFBSEd955By4uLnrX3aVLFwQHB2PTpk13XGfZsmWYOHEiHnjgAZ1JO8PDw1FUVKQT4ICaS25FRUV1Xmr7/vvvMWXKFFhYWOhdK1FLIBP1GTBARNRACxYswOeff46MjAypS8HFixfh7e2NEydOoHv37lKX0yBbt27F66+/jtOnT2t7tprCtWvX0KlTJxw7dqzBYZSouePAbSJqVCtWrECvXr3Qpk0b7N+/H//6179umxOIGm7kyJFITk5GZmZmg8dk1UdaWhpWrFjBgEStGnuSiKhRRUZGYuPGjcjLy4OHhweeeOIJREVFwcRE+v8nawk9SURkOAxJRERERHXgwG0iIiKiOjAkEREREdWBIYmIiIioDgxJRERERHVgSCIiIiKqA0MSERERUR0YkoiIiIjqwJBEREREVIf/B2KUETJxkH3YAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.figure()\n", - "plt.plot(P_opt,C_opt)\n", - "plt.xlabel('Enginer power (kW)')\n", - "plt.ylabel('Carbon Dioxide (g/kWh)')\n", - "ax = plt.gca()\n", - "ax.invert_xaxis()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6617768e", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "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.16" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/book/pages/moo_example.ipynb b/book/pages/moo_example.ipynb new file mode 100644 index 0000000..439e016 --- /dev/null +++ b/book/pages/moo_example.ipynb @@ -0,0 +1,2057 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "f350b263", + "metadata": {}, + "source": [ + "# Engine power vs emissions\n", + "\n", + "Click {fa}`rocket` --> {guilabel}`Live Code` to activate live coding on this page!\n", + "\n", + "\n", + "\n", + "\n", + "## Problem\n", + "In this problem we're trying to optimize a diesel engine for maximum power and minimum CO2 emissions. Depending on the optimal engine speed, the power and CO2 emmisions change.\n", + "\n", + "The following data is available:\n", + "\n", + "| RPM | CO2 Emissions | Power |\n", + "|------|---------------|---------|\n", + "| 800 | 708. | 161.141 |\n", + "| 1000 | 696.889 | 263.243 |\n", + "| 1200 | 688.247 | 330.51 |\n", + "| 1400 | 682.897 | 381.561 |\n", + "| 1700 | 684.955 | 391.17 |\n", + "| 1800 | 697.3 | 370. |\n", + "\n", + "This data is interpolated to obtain a continuous relation:" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "0bb28c85", + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-04-30T14:40:41.427721\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.8.4, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "import scipy as sp\n", + "import matplotlib.pyplot as plt\n", + "%config InlineBackend.figure_formats = ['svg']\n", + "\n", + "RPM = np.array([800, 1000, 1200, 1400, 1700, 1800])\n", + "CO2 = np.array([708, 696.889, 688.247, 682.897, 684.955, 697.3 ])\n", + "POW = np.array([161.141, 263.243, 330.51 , 381.561, 391.17, 370 ])\n", + "\n", + "def CO2func(s):\n", + " return sp.interpolate.pchip_interpolate(RPM,CO2,s)\n", + "\n", + "def POWfunc(s):\n", + " return sp.interpolate.pchip_interpolate(RPM,POW,s)\n", + "\n", + "RPM_continuous = np.linspace(800,1800,100)\n", + "plt.figure()\n", + "plt.subplot(2,1,1)\n", + "plt.plot(RPM, CO2, 'x', label='Original Data')\n", + "plt.plot(RPM_continuous, CO2func(RPM_continuous), label='Interpolated Data')\n", + "plt.xlabel('RPM')\n", + "plt.ylabel('CO2 (g/kWh)')\n", + "ax = plt.gca()\n", + "ax.spines['right'].set_color('none')\n", + "ax.spines['top'].set_color('none')\n", + "plt.tight_layout()\n", + "plt.legend()\n", + "\n", + "plt.subplot(2,1,2)\n", + "plt.plot(RPM, POW, 'x', label='Original Data')\n", + "plt.plot(RPM_continuous, POWfunc(RPM_continuous), label='Interpolated Data')\n", + "plt.xlabel('RPM')\n", + "plt.ylabel('Power (kW)')\n", + "ax = plt.gca()\n", + "ax.spines['right'].set_color('none')\n", + "ax.spines['top'].set_color('none')\n", + "plt.tight_layout()\n", + "plt.legend();\n" + ] + }, + { + "cell_type": "markdown", + "id": "56fc737c", + "metadata": {}, + "source": [ + "## Model\n", + "\n", + "Let's define our model in three different ways, as defined in {eq}`multi_objective_optimization_weighted`, {eq}`multi_objective_optimization_goal` and {eq}`multi_objective_optimization_pareto`.\n", + "\n", + "We'll define the model as follows:\n", + "- Design variables: width, height and depth of a block\n", + "- Objective function: minimum volume of the block\n", + "- Inequality constraint functions: minimum surface area of each face of $0.8$ $\\text{m}^2$ and maximum weight of $3000$ $\\text{kg}$\n", + "- Equality constraint functions: none\n", + "- Bounds: positive dimensions\n", + "\n", + "### Design variables\n", + "Let's start with our design variables. In this case a logical choice could be the width, height and depth of our block\n", + "\n", + "```{math}\n", + ":label: nonlinear_constrained_optimization_x\n", + "x=\\left[ \\begin{matrix}\n", + " {{x}_{width}} \\\\\n", + " {{x}_{depth}} \\\\\n", + " {{x}_{height}} \\\\\n", + "\\end{matrix} \\right]=\\left[ \\begin{matrix}\n", + " {{x}_{1}} \\\\\n", + " {{x}_{2}} \\\\\n", + " {{x}_{3}} \\\\\n", + "\\end{matrix} \\right]\n", + "```\n", + "\n", + "### Objective function\n", + "Now we can define the objective function as the product of the dimension to represent $\\mathop {\\min }\\limits_x f\\left(x\\right) $ in {eq}`nonlinear_constrained_optimization`:\n", + "\n", + "```{math}\n", + ":label: nonlinear_constrained_optimization_f\n", + "{\\min }\\limits_x f\\left(x\\right) = x_1 \\cdot x_2 \\cdot x_3\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "cee945ed", + "metadata": {}, + "source": [ + "### Inequality constraints\n", + "\n", + "Let's continue with the inequality constraints, which should deal with the required positive dimensions, minimum surface area of each face of $0.8$ $\\text{m}^2$ and maximum weight of $3000$ $\\text{kg}$. These can be defined in the form ${{g}}\\left(x_{ij}\\right) \\le 0$ as:\n", + "\n", + "```{math}\n", + ":label: nonlinear_constrained_optimization_g\n", + "g_1\\left(x\\right) = -x_{1} \\cdot x_2 + 0.8 \\\\\n", + "g_2\\left(x\\right) = -x_{2} \\cdot x_3 + 0.8 \\\\\n", + "g_3\\left(x\\right) = -x_{1} \\cdot x_3 + 0.8 \\\\\n", + "g_4\\left(x\\right) = -x_{1} \\cdot x_2 \\cdot x_3 \\cdot 2500 + 3000 \\\\\n", + "```\n", + "\n", + "\n", + ":::{card} Test yourself\n", + "\n", + "\n", + "\n", + ":::" + ] + }, + { + "cell_type": "markdown", + "id": "86c8ca56", + "metadata": {}, + "source": [ + "### Bounds\n", + "\n", + "The dimensions of the block cannot be negative. Therefore, the bounds can be defined as:\n", + "\n", + "```{math}\n", + ":label: bounds_nonlinear\n", + "0<{{x}_{i}}\\text{ } i=1,2,3\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "242cdb5a", + "metadata": {}, + "source": [ + "### Find best solution manually\n", + "\n", + ":::{card} Test yourself\n", + "Try and adjust the values for $x_1$, $x_2$ and $x_3$. Can you find the optimal solution?\n", + "\n", + ":::" + ] + }, + { + "cell_type": "markdown", + "id": "2a609af6", + "metadata": {}, + "source": [ + "## Method\n", + "\n", + "Now let's solve this problem using an optimization method." + ] + }, + { + "cell_type": "markdown", + "id": "e567e5b5", + "metadata": {}, + "source": [ + "### Import libraries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d4f3fe4b", + "metadata": { + "tags": [ + "disable-execution-cell" + ] + }, + "outputs": [], + "source": [ + "import scipy as sp\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "2871c599", + "metadata": { + "tags": [ + "thebe-remove-input-init", + "auto-execute-page" + ] + }, + "outputs": [], + "source": [ + "import scipy as sp \n", + "import numpy as np" + ] + }, + { + "cell_type": "markdown", + "id": "c1e8ff92", + "metadata": {}, + "source": [ + "### Define variables\n", + "As before, we don't need to specify our variable $x$ itself as defined in {eq}`nonlinear_constrained_optimization_x`. However, this optimization method requires an initial guess. An arbitrary value is chosen here:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "a7a3e663", + "metadata": {}, + "outputs": [], + "source": [ + "x0 = np.array([5,0,1])" + ] + }, + { + "cell_type": "markdown", + "id": "1333c1bb", + "metadata": {}, + "source": [ + "### Define objective function\n", + "\n", + "The objective function was defined in {eq}`nonlinear_constrained_optimization_f`, which gives:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "c753c482", + "metadata": {}, + "outputs": [], + "source": [ + "def func(x):\n", + " vol = x[0]*x[1]*x[2]\n", + " return vol" + ] + }, + { + "cell_type": "markdown", + "id": "7d93884f", + "metadata": {}, + "source": [ + "### Define constrain functions" + ] + }, + { + "cell_type": "markdown", + "id": "b18490c9", + "metadata": {}, + "source": [ + "The constraint functions were defined in {eq}`nonlinear_constrained_optimization_g`. We had no equality constraints. Unlike before with {ref}`the method to solve linear constrained problem `, we need an object which defines the upper and lower bounds. As this problem has only an upper bound of $0$, the lower bound is set to $\\infty$ which is `np.inf` in python. Note that a single constraint object can include multiple constraints." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "fb2a2361", + "metadata": {}, + "outputs": [], + "source": [ + "def nonlinconfun(x):\n", + " c1 = 0.8 - x[0]*x[1]\n", + " c2 = 0.8 - x[0]*x[2]\n", + " c3 = 0.8 - x[1]*x[2]\n", + " c4 = 3000 - 2500 * x[0] * x[1] * x[2]\n", + " return np.array([c1,c2,c3,c4])\n", + "\n", + "cons = sp.optimize.NonlinearConstraint(nonlinconfun, np.array([-np.inf,-np.inf,-np.inf,-np.inf]), np.array([0,0,0,0]))" + ] + }, + { + "cell_type": "markdown", + "id": "0b45073a", + "metadata": {}, + "source": [ + "### Define bounds\n", + "The bounds were defined in {eq}`bounds_nonlinear` and result in:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "42656ee2", + "metadata": {}, + "outputs": [], + "source": [ + "bounds = [[0, None],\n", + " [0, None],\n", + " [0, None]]" + ] + }, + { + "cell_type": "markdown", + "id": "76ddef0f", + "metadata": {}, + "source": [ + "### Solve the problem" + ] + }, + { + "cell_type": "markdown", + "id": "18dba09c", + "metadata": {}, + "source": [ + "Now let's solve the problem. The `cons` object can be added directly, in the case of equality constraints as well you can define a list of constrainer objects as an input." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "d2d014c1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " message: Optimization terminated successfully\n", + " success: True\n", + " status: 0\n", + " fun: 1.2000000000024624\n", + " x: [ 1.353e+00 1.488e+00 5.962e-01]\n", + " nit: 10\n", + " jac: [ 8.871e-01 8.065e-01 2.013e+00]\n", + " nfev: 41\n", + " njev: 10\n" + ] + } + ], + "source": [ + "result = sp.optimize.minimize(fun = func,x0 = x0,bounds = bounds,constraints=cons)\n", + "print(result)" + ] + }, + { + "cell_type": "markdown", + "id": "702e8343", + "metadata": {}, + "source": [ + "## Exercise\n", + "\n", + ":::{card} Test yourself\n", + "Click {fa}`rocket` --> {guilabel}`Live Code` to activate live coding on this page.\n", + "\n", + ":::" + ] + }, + { + "cell_type": "markdown", + "id": "1c185997", + "metadata": {}, + "source": [ + "## Questions, discussions and comments\n", + "" + ] + } + ], + "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.11.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}