{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "*This notebook contains course material from [CBE40455](https://jckantor.github.io/CBE40455) by\n", "Jeffrey Kantor (jeff at nd.edu); the content is available [on Github](https://github.com/jckantor/CBE40455.git).\n", "The text is released under the [CC-BY-NC-ND-4.0 license](https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode),\n", "and code is released under the [MIT license](https://opensource.org/licenses/MIT).*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [Continuous Time Simulation in SimPy](http://nbviewer.jupyter.org/github/jckantor/CBE40455/blob/master/notebooks/02.09-Continuous-Time-Simulation-in-SimPy.ipynb) | [Contents](toc.ipynb) | [Linear Optimization](http://nbviewer.jupyter.org/github/jckantor/CBE40455/blob/master/notebooks/03.00-Linear-Optimization.ipynb) >

\"Open

\"Download\"" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "faGKi4efxKg9" }, "source": [ "# Decentralized Control in a Supply Chain" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": {}, "colab_type": "code", "id": "_5UGAEiKxKg-" }, "outputs": [], "source": [ "%matplotlib inline\n", "\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import control.matlab as control" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "k8kvcX1_xKhA" }, "source": [ "## Model" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "k8kvcX1_xKhA" }, "source": [ "### Inventory Model\n", "\n", "We model a single level in a heirarchical supply chain as an inventory, $Y(t)$, that is depleted by customer orders, $D(t)$, and replenished by supplier deliveries. Orders $U(t)$ are sent to the supplier at time $t$ for delivery at time $t+\\tau$. The inventory is then given by\n", "\n", "$$\\frac{dY}{dt} = U(t-\\tau) - D(t)$$\n", "\n", "In this model, $U(t)$ and $D(t)$ have units of flowrate (i.e, quantity per unit time), whereas $Y$ has units of quantity.\n", "\n", "We further assume the customer demand is characterized by a stationary but perhaps unknown mean value $\\bar{D}$, and the inventory is controlled to a desired target level $\\bar{R}$. " ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "k8kvcX1_xKhA" }, "source": [ "### Deviation Variables\n", "\n", "We introduce deviation variables for the actual and target inventories\n", "\n", "\\begin{align*}\n", "y(t) & = Y(t) - \\bar{Y} \\\\\n", "r(t) & = R(t) - \\bar{R}\n", "\\end{align*}\n", "\n", "and for the product flows\n", "\n", "\\begin{align*}\n", "d(t) & = D(t) - \\bar{D} \\\\\n", "u(t) & = U(t) - \\bar{U} \\\\\n", "\\end{align*}\n", "\n", "normally we expect $\\bar{Y} = \\bar{R}$ and $\\bar{U} = \\bar{D}$. The deviation variables can represent positive or negative deviations from nominal steady-state conditions." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "k8kvcX1_xKhA" }, "source": [ "### Inventory Model in Deviation Variables\n", "\n", "In deviation variables, the deviation of the inventory level from a nominal value $\\bar{Y}$ is given by\n", "\n", "$$\\frac{dy}{dt} = u(t-\\tau) - d(t)$$\n", "\n", "where $u$ and $d$ denote deviations from nominal conditions. After the Laplace transform (assuming zero initial conditions), the following transfer function model\n", "\n", "$$y(s) = \\frac{1}{s}e^{-\\tau s}u(s) - \\frac{1}{s}d(s)$$\n", "\n", "is obtained for the response of the inventory to downstream customer demand and orders sent to the upstream suppliers." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "cbMNeNAWxKhB" }, "source": [ "## Ordering Policies\n", "\n", "Here we consider the case of a single operator within a multi-level supply chain. The operator wishes to be part of a successful supply chain, but otherwise has only for the operator's own facility. We consider ordering policies for $u(s)$ that can be expressed as transfer functions operating on the available signals $y(s)$, $r(s)$, and $d(s)$. " ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "cbMNeNAWxKhB" }, "source": [ "### Feed-forward Ordering based on Customer Demand\n", "\n", "A feed-forward policy would be to filter customer demand to determine orders,\n", "\n", "$$u(s) = K_d(s) d(s)$$\n", "\n", "where the single transfer function $K_d(s)$ is to be designed." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "cbMNeNAWxKhB" }, "source": [ "### Ordering based on Feedback Control of Inventory\n", "\n", "Feedback control is given by\n", "\n", "$$u(s) = K_e(s)\\left[r(s) - y(s)\\right]$$\n", "\n", "where $K_e(s)$ is the feedback policy determined by the 'error' $e(s) = r(s) - y(s)$, or difference, between the inventory target and actual inventory levels." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "cbMNeNAWxKhB" }, "source": [ "### Ordering based on 2DOF Feedback Control of Inventory\n", "\n", "The feedback policy can be further parameterized as\n", "\n", "$$u(s) = K_r(s)r(s) - K_y(s)y(s)$$\n", "\n", "where separate transfer functions are used for setpoint and process feedback." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "cbMNeNAWxKhB" }, "source": [ "### A 3 DOF Feed-forward plus Feedback Ordering Policy\n", "\n", "As a final consideration, we can write the ordering policy as \n", "\n", "$$u(s) = = K_r(s)r(s) - K_y(s)y(s) + K_d(s)d(s)$$\n", "\n", "where the three degrees of freedom are the choices of $K_r(s)$, $K_y(s)$, and $K_d(s)$." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "6UPqj4nqxKhC" }, "source": [ "### Closed-Loop Model\n", "\n", "Solving for $u(s)$,\n", "\n", "$$u(s) = \\left[P(s) - K(s)G(s)]d(s) = $$" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": {}, "colab_type": "code", "id": "lIxWgjVTxKhD", "outputId": "5ae11d7a-06fb-47d2-e5b7-9456e9aad7c4" }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWQAAAF5CAYAAACoU1BlAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8VOXZ//HPlckeyAIhAZKwyb4oyOKucUcr7nWh2kdt\npfaxtra1fbTLr6u2T4u2+thWsW6tFnerUqxbjfsCCoqyb5ogqxAgBLLevz9mgpOQQCaZ5JyZ+b5f\nr3llzn5dczJXTu5zzz3mnENERLyX5HUAIiISpIIsIuITKsgiIj6hgiwi4hMqyCIiPqGCLCLiEyrI\nIlFgQX8zs0oze9PreKLFzJ43s694HUeiUEGOQWZ2mZktMrNqM9tgZn8xs1yPYnFmNtSjY//IzKpC\njz1m1hA2/XE3h1MKHAf0d84d2dmdmVly6LXdFZbTlk5Huf9j/trM7guf55w7xTn3YFceV76gghxj\nzOz7wP8CPwBygMOBgcALZpbqZWzdzTl3k3Ouh3OuB3AV8FbTtHNuTMv1zSy5C8MZCKxxzlVHuuEB\n4hoTllN+x8OTmOCc0yNGHkA2UAVc0GJ+D2AzcEVo+ufAY8DDwE7gfeCQsPX7A4+HtlkDfDts2c+B\nR4C/hbb9GJi0n5gcMLSV+UnAT4BPgE2h/eWELT8ztO9KoAwYFbZsLXADsBjYBtwLpB/gtbkMeL3F\nvORQfP8NrARWhubfDlQAO4B5wJFh2/wamA08EMr/I+DQsOU/Aj4LbbuU4JXxDGAP0BA6Pz8Ny/GD\nUI6vA2PD9lNB8I/qIqCmlXyaYh/UyrKvA2VtrRuK/Tbg2VAObwGDw9YfB7wIbAU2AD8EzgBqgbpQ\nDu+F1n0duCzsnP6/sHN6H5AdWjY0FMNXQ7ltBq73+j0Taw/PA9AjgpMFU4F6ILmVZfcDs0PPfx56\nY50PpADXESy8KaE31XuhN1YqMARYDZwatu0e4HQgAPwGeHs/MbVVkK8IFcEhBP9gPAH8PbRsOLAL\nODkU0w9D66aGlq8NFcISoBfwBvDrA7w2l9F2Qf43kAdkhOZfGtpvMvA/wDogLbTs18Bu4NRQ/r9v\n2i8wJlSM+oamBwNDQs9bFsnJwMbQz0Do9VgVlmNF6DwUN8XVRuyDWlnWnoK8BZgUen0fBh4ILcsJ\nxfUdII3gH/kpYbnf1+JY4QV5BrA8lHdP4Cng3tCypoJ8B5AOHArUAMO8ft/E0kNNFrElH9jinKtv\nZdn60PIm7znnHnPO1QG3EHyTHE6wQPRxzv3SOVfrnFsN3AVcFLbt6865uc65BuDvwCEdiPUrwC3O\nudXOuSqCV7wXhf49vxD4l3PuhVB8M4EMILzt9XbnXLlzbitwI3BxB2JocpNzbptzbjeAc+7vzrmt\nodfxdwSLUng7+CvOuefC8h8fml9P8HUcY2bJzrk1odevNTOAPzvn5jnnGpxz94TmTw5b51bnXEVT\nXG34MHSjsNLMbokg58ecc/NDr++DYTmcCXzqnLvVOVfjnNvhnHu3nfv8CjAzlPdOgv8tTDez8Dry\nc+fcHufc+wT/A+rI707C6so2NYm+LUB+qBi0LMr9QsublDc9cc41mlkFwaYKB/Q3s8qwdQPAa2HT\nG8KeVwPpbRxzf/oTvJps8gnB37fClstC8ZUDRa3FH1q3fwTHbil8X5jZDwlesfYj+Hpk0fyPWcv8\ns0JxLgu14f8SGGVmzwHfdc6Fr99kIPAVM/tu2LxU2s6xLQc759a2Y72WWubQI/S8hOCVeke0dk5T\ngT5NM1q8FuHHlXbQFXJseYvgv4Hnhs80sx7AacBLYbNLwpYnEfzX+DOCRWCNcy437NHTOXd6lGP9\njGBRajKA4BXmxpbLzMxC8a5rLf7Qtp91Ipa9Qxqa2fHA94DzgFyCTRlVgLVrR8494Jw7iuC/7U1N\nOq0pB37R4nXOdM490lpcEdoFZIZN941g23LgoDaWHSie1s5pLcH2YokCFeQY4pzbDvwC+D8zm2pm\nKWY2iOBNuAqC/143mWhm54aaCK4lWMjfBt4FdprZ/5hZhpkFzGysmU2m41LNLD3sESB4Y+y7ZjY4\n9AfjJuDh0FX2I8CXzOxEM0sBvh+KL7z/7tVmVmxmvYAfE2wHjYaeBP8wbCHYvvpzQlfAB2Jmo8zs\neDNLI9jOvBtobGP1uwjmMDnUR7mHmU0zs3Yd6wA+AA42s3FmlgH8LIJtnwYGmNm3zCzNzLLNbEpo\n2UZgUOgPZGtmA98zs0Fm1pNgU9Js51xbr4FESAU5xjjnfkew7W4mwTv97xC86jnROVcTtupTBNtq\ntxG8iXWuc64u1C56BsE2xTUEC9NfCd7s6aiP+aJA7QYuB+4h+Afi1dBx9gDXhHJYBlwC/F/o+NOA\nac652rB9/gN4nuANx1UEbzhFw1yCPQxWELx5uINg+3t7pBFsc95CsEkgj+Afi304594Gvgn8heA5\nWE4w505zzi0m+AeuDFhG8DVu77bbCd5MPY9gAV5OsP80BP/opQJbzay1duW7Quu8RvC87CR4c1Ci\nxJzTAPXxxsx+TrDnQ1QKQHczs7XA151zL3odi0h30hWyiIhPeFKQzWyImd1tZo95cXwRET+KWpOF\nmd1DsG1yk3NubNj8qcCtBO9I/9U599uwZY85586PSgAiIjEumlfI9xH8JNleobvtfyLYJWs0cLGZ\njY7iMUVE4kbUCrJz7lWCn40PN4Xg+AGrQ3fQHwLOitYxRUTiSVd/Uq+I5p9GqgAOM7PeBPswTjCz\nG5xzrXauN7MZBD+CSkZGxsSSkpLWVouqxsZGkpJi/16nX/JwwOZqR3W9Iy/NyElr1+cvmvFLLp2l\nPPwls7wc5xy7Bwzo8mMtX758i3Ouz4HW8+Sj0865zwkOl3ig9WYBswAmTZrk5s+f39WhUVZWRmlp\naZcfp6v5KY+6hkaufXgh//pwPd8+dQRXHx/Z8Ml+yqUzlIfPlJZSWVlJ7sKFXX4oM/vkwGt1fUFe\nR/OPwBbT/OOxB2Rm04BpQ4d6Mga6REFKIIlbLxxPSpLx++eWUVvfyLUnDaPtD4SJJKau/r9jHjAs\n9PHZVIIjij0dyQ6cc88452bk5HTmg2TiteRAEjdfMJ7zJxZz60srmPn8MvShJJHmonaFbGazCQ7W\nnR8aWexnzrm7zexbwHMEu73d45zr7q/WEZ8IJBm/O+9gUgLGn15eRV2D44bTRupKWbxRVsbCsjJK\nvY4jTNQKsnOu1fFqnXNzCY4f0CFqsogvSUnGjWePIyWQxKxXV1Nb38jPpo1WURYhBj46rSaL+JOU\nZPzizDFccdRg7ntzLT996iMaG9V8Id1s5kxKHo7WIILR4fsB6nWFHJ/MjJ+eMYqUZOPOV1ZT3+C4\n6ZxxJCXpSlm6yZw59K6sPPB63UhXyOIZM+P6qSO55oShPDSvnB889iENulKWBOb7K2SJb2bG908Z\nQXJSEn94cTn1jY3c/OVDSA74/lpBJOpUkMUXvnPSMJIDwX7K9Q2OP140nhQVZUkwvi/IakNOHFcf\nP5TUQBI3zl1CXUMjt08/lNRkFWVJHL7/bVcbcmK58tgh/HzaaJ5fvJFv/H0+e+oavA5J4lVZGQv/\n+Eevo2jG9wVZEs9lRw3mpnPGUbZ8M5ffO4899brRJ4nB900WkpimHzaAjNQkrnv0QzZvNY44qo6c\njBSvw5J4MnMmJatWgY8GSvL9FXLoq9Nnbd++3etQpJudM6GYP02fwJrtjUy/620+r6o58EYi7TVn\nDr3fesvrKJrxfUFWG3Jimzq2H985NI2Vm6q4aNbbbNyxx+uQRLqM7wuyyMF9krn/iil8VrmbC+58\ni4pt1V6HJNIlVJAlJhw+pDcPfP0wtu2q5YI73mL15iqvQxKJOhVkiRkTBuTx0IwjqKlv5II732bZ\nhp1ehyQSVb4vyLqpJ+FG98/m4W8cQSAJLpz1Fh9W+GtwGIkh6occOd3Uk5aGFvTg0W8cSc/0ZKbf\n9Q7z1rb8snOR2OT7gizSmgG9M3nkG0dQkJ3GV+9+l9dXbPE6JIk1PhwPWQVZYla/nAwe+cYRDOyd\nyRX3zeP5jzd4HZLEEvVDFomu/B5pPDTjcEb3z+aqB97jkfnlXock0mEqyBLzcjNTefDrh3HU0Hx+\n+NiH3PnKKq9DEukQ3xdk9bKQ9shKS+bu/5rMtEP685tnl3LT3CU4p0GJJLb4viCrl4W0V2pyErde\nOJ6vHjGQWa+u5gePfUh9Q6PXYYm0m0Z7k7jS9I3WvbJS+eOLK6isruX26YeSnhLwOjTxm7IyFpaV\nUep1HGF8f4UsEikz49qThvOrs8bw0tJNfPXud9m+u87rsEQOSAVZ4talRwzitosmsKB8Gxfe+RYb\ntmukOAmjfsgi3WvaIf2557LJlG+t5pw/v8GS9Tu8Dkn8Qv2QRbrfMcP68OhVR+IcfPmOt3h1+Wav\nQxJplQqyJITR/bN58uojKc7L4Ir75vHIPH2ARPzH9wVZ/ZAlWvrlZPDoVUdwxEG9+eHjH3Lz88vU\nV1l8xfcFWf2QJZp6pqdwz2WTuXBSCf/3n5V856GF7Klr8DosEUD9kCUBpQSS+O154xjQO5OZzy9j\nzZZd3HnpRPrnZngdmnQn9UMW8Qcz4+rjh3LXpZNYs2UXZ97+OvM1rrJ4TAVZEtpJowv559VH0iMt\nmYvvepvZ737qdUjSXdQPWcR/hhb05Kmrj+aIg/K54YlF/PjJRWpXTgTqhyziTzmZKdx72WS+cdwQ\nHnznU87985us2bLL67Akwaggi4QEkowbThvF3f81ic+27+aM217j6Q8+8zosSSAqyCItnDiqkLnf\nPoaR/bL59uwF3PDEIqpr670OSxKACrJIK/rnZvDQjMO56riDmP3up5x+62vqhSFdTgVZpA0pgSSu\nP20ks688nPpGx5fvfIub5i7RDb94UVbGwj/+0esomlFBFjmAIw7qzb+vPZaLpwxg1qur+dJtr/Hm\nqi1ehyVxyJOCbGZZZna/md1lZl/xIgaRSPRIS+amc8bxtyumUNfgmH7XO3x79gI27dAYyzErnvsh\nm9k9ZrbJzD5qMX+qmS0zs5Vmdn1o9rnAY865K4EzoxWDSFc7dngfnv/usXznxGH8++MNnHDzK9z5\nyio1Y8QiH/ZDjuZYFvcBtwN/a5phZgHgT8DJQAUwz8yeBoqBRaHVuvQ3ufS+0n3mnTH8DK478rpW\nl1dWVnJJ6iVtLj/Q9n5ZPolJvo4vkuWVlZXkrs31V3wnX8c5E4o4/K/H8p2XavnBK0mU5GWS3yON\naSNa374pD1/E34nlowKjKA2NAOHH+CJZfsbRK0lusc7+ti+7rGyf/UVT1Aqyc+5VMxvUYvYUYKVz\nbjWAmT0EnEWwOBcDC9nPVbqZzQBmABQWFlJWVhZxXJWVlfvMW7VqFWW1Za0ub2ho2O/yA23vl+Uj\n80ZSVlbm2/giWd7Q0NBsPT/F1ze9gexAEpt3O1ZtrqJi6y6yqlcwYc/LBJKs2fZNefgp/o4sr+lR\ns/e96Mf42rt8fGUlDrfPOvvbviM1KBIWzfFgQwV5jnNubGj6fGCqc+7roelLgcOA/yF4Nb0HeN05\n9+CB9j1p0iQ3f/78qMXalrKyMkpLS7v8OF0tXvKA2MjFOcdzH29k5vPLWLmpigG9MrnymMF8eVLJ\n3m+8joU82iNe8qA09N/XwoVdfigze885N+lA63ky/KZzbhdwuRfHFukKZsbUsX05ZXQhLyzZyB2v\nrOKnT33MH19cwYWTS7h4ygCvQ5QY0NUFeR1QEjZdHJrXbmY2DZg2dOjQaMYl0iWSkoxTxwQL87tr\ntnLXa2u445VV/OWVVYztHaC2zwZOGFlAckA9Tj3nw/GQu7ogzwOGmdlggoX4ImB6JDtwzj0DPDNp\n0qQruyA+kS5hZhw2pDeHDenNZ5W7eXheOX97fSUz/v4e+T3SOPOQ/px7aBFj+mdjZl6HKz4RtYJs\nZrOBUiDfzCqAnznn7jazbwHPAQHgHufcxxHuV1fIEtP652bw3ZOHc3BgHQ2Fo3ji/XU88PYn3PPG\nGoYW9OCcCUWcNb4/xXmZXoeaWGbOpGTVKvBRe3g0e1lc3Mb8ucDcTuxXV8gSFwJJxolj+nLKmL5U\nVtcyd9EGnlxQwe+fW8bvn1vGYYN7cc6EIr50cD96pqd4HW78mzOH3q30wvCSvlNPxAO5malMP2wA\n0w8bQPnWav65YB1PLljH9U8s4hfPLOb0cf24YFIxUwb3UpNGAvF9QVaThcS7kl6ZXHPiML51wlAW\nllfyyPwKnvngMx5/v4JBvTP5ymEDuWhKia6aE4Dvb/U6555xzs3IycnxOhSRLmVmTBiQx2/OHce7\nPz6Rm798CH16pnHj3CUc+Zv/cNPcJWzYrrEz4pnvr5BFElFmajLnTSzmvInFfFhRyaxXV/PX11Zz\n/5trueLowXyz9CCydcUcd3x/hWxm08xs1vbt270ORcQTBxfncvv0Qym77nhOH9ePv5St4rjfvcwT\n71cQzU/aJhyNhxw5NVmIBA3onckfLhzPnGuOZkifHnzvkQ/4+v3z2aghQOOG7wuyiDQ3tiiHR75x\nBD/50iheX7mF0259jbdXf+51WLEnnsdDFpHuE0gyvn7MEP717WPIzUzhkr++w+x3P/U6rNjiw/GQ\nfV+Q1YYs0rahBT3459VHcfSwfG54YhF3v77G65CkE3xfkNWGLLJ/2ekpzLp0EqeN7cuv5izmr6+t\n9jok6SDfF2QRObDU5CT+7+IJnDa2LzfOXcJzH2/wOiTpABVkkTiRHEjiDxeO5+DiXK59aCEfrVMz\nX6xRQRaJI+kpAe766kRyMlL49uwFVNfWex2Sf6kfcuR0U08kMgU90/nDheNZ8/kufv2vJV6HIxHw\nfUHWTT2RyB1xUG++fvRg/vHOp8xfu9XrcPxJ/ZBFpLt89+ThFOVm8OMnP6KhUR+x3of6IYtId8lM\nTeYnXxrFso07eeL9Cq/DkXZQQRaJY1PH9uWQ4hz+8MJy9tQ1eB2OHIAKskgcMzN+cOpIPtu+hycX\nRPSF7+IB3xdk9bIQ6ZyjhvZmbFE2d722mka1Jfua7wuyelmIdI6ZceUxQ1i9eRf/WbrJ63D8Q/2Q\nRcQLp4/rR2F2mkaE8zkVZJEEkBJI4txDi3l52SYNaN9E/ZBFxCtfnlhMo4Mn3tfNPUD9kEXEO0P6\n9GDiwDz+qd4WvqWCLJJATh/Xj2Ubd7Jmyy6vQ5FWqCCLJJBTxxQCaLxkn1JBFkkgxXmZjC3KVkH2\nKd8XZH0wRCS6ThndlwWfVrKlqsbrULylfsiR0wdDRKLr2OF9AHhz1eceRyIt+b4gi0h0jSvKoWd6\nMm+s2OJ1KN7yYT/kZK8DEJHuFUgyjjyoN6+v3IJzDjPzOiRvzJlD78pKr6NoRgVZJAEdPawPz328\nkbWfVzM4P2u/61bX1jP73XJWbNzJuOIcCjRAUZdRQRZJQEcM6Q3AvDVb91uQt+6qZfpdb7N0w05y\nM1N4aF45A7OTmDClhvwead0VbsJQG7JIAhqSn0VORgrvf7qtzXWcc3znoQWs3rKL+y6fzIKfnsys\nSyeyvqqRr90/n7qGxm6MODGoIIskoKQkY8KAXN77pO2CPHfRBl5bsYWffGkUpSMKMDNOGdOXKw9O\n44PySm55YXk3RpwYVJBFEtTEAXms2FTF9t11+yxzznHnq6sYkp/FVw4b2GzZ5L7JXDS5hDtfWcXy\njTu7K9zoUz9kEfGLQwfmAbCwfN+eBvM/2caHFdu5/OjBBJL27YXxP1NHkpWWzO/+vbTL40wkKsgi\nCeqQklySjFabLe5/cy05GSmcd2hRq9vmZaXyzdKDeHHJpv22Q/uaD/she1KQzWyImd1tZo95cXwR\ngR5pyYzom82CFgW1urael5ZsYtoh/chMbbsj1mVHDiI7PZm7X1vT1aF2jXgYD9nM7jGzTWb2UYv5\nU81smZmtNLPr97cP59xq59zXIj22iETXoQNyWfBpJQ1hfYvLlm1md10Dp4/rt99tM1OTmX7YQJ79\naD3lW6u7OtSE0JEr5PuAqeEzzCwA/Ak4DRgNXGxmo81snJnNafEo6HTUIhIVhw7Io6qmvtnNubmL\n1tM7K5Upg3odcPv/OnIgZsYDb3/SlWEmjIgLsnPuVWBri9lTgJWhK99a4CHgLOfcIufcGS0e+tpb\nEZ+YNCh4Y6+pHXhPXQP/WbqJU8b0JTlw4PLQLyeD40cU8MSCddSrX3KnReuTekVAedh0BXBYWyub\nWW/gRmCCmd3gnPtNG+vNAGYAFBYWUlZWFqVw21ZVVdUtx+lq8ZIHxE8ufszDOUd2Ksx9ZylFu9fw\n/sZ6qmsbKGrc1GasLfMYlV7PiztruP3x/zC+IHY+/Du+spKGhgZfnRNPXj3n3OfAVe1YbxYwC2DS\npEmutLS0iyODsrIyuuM4XS1e8oD4ycWveRy17j0+KK/kuOOO4+lHPyAnYxPfOOd4Utq4Qm6Zx1EN\njcxe8RLLavO4tnRiN0UdBQsX+u6cRKuXxTqgJGy6ODSv0zRAvUjXOnZ4Hz7bvocl63fy4uKNnDSq\nsM1i3JqUQBJnHNyf/yzdxK6a+i6MNP5FqyDPA4aZ2WAzSwUuAp6Oxo41QL1I1zpueB/M4OK73mbH\nnnpOH9c34n1MHduXmvpGXl4WQ7eI4qEfspnNBt4CRphZhZl9zTlXD3wLeA5YAjzinPs4GgHqClmk\na/XPzWDawf3ZvruOUf2yOX5E5B2hJg/qRX6PVJ79KIa+q8+H/ZAjbkN2zl3cxvy5wNxOR7Tvfp8B\nnpk0adKV0d63iAT9/MwxHD00n+NHFpDUykelDySQZJw6pi9PLljH7toGMlIDXRBl/NNHp0WEXlmp\nXDC5hD49Oz7G8Wlj+1Fd28AryzdHMbLE4vuCrCYLkdhw+JBe5GWm8NzHMdRs4TO+L8i6qScSG5ID\nSRw3vA+vLN9Mo77mqUN8X5BFJHaUjihg665aPlwXA//RajxkEYlnx4a60L2yTO3IHeH7gqw2ZJHY\n0SsrlYOLcylbHgP9keOhH3J3UxuySGwpHd6HheWVbNtV63Uo++fDfsi+L8giEltKR/TBOXh1hZot\nIqWCLCJRdXBxLnmZKWpH7gDfF2S1IYvElkCScezwPry6Qt3fIuX7gqw2ZJHYc9zwPmypquWjz3Qh\nFQnfF2QRiT1N3d/K/NxsoX7IIpII8nukcXBRDmWxNBynD/i+IKsNWSQ2HTeigIXllVRW+7T7m/oh\nR05tyCKxqXREHxodvLpii9ehtE79kEUkURwS6v6mZov2U0EWkS4RSDKOGdaHVzX6W7upIItIlzlp\ndCFbqmp5Z81Wr0OJCRF/hZOISHudNKqAzNQATy1cxxEH9d7vuo2NjiUbdrBq8y6qa+rJSktmcH4W\nQwt6kJ6SGF8JpYIsIl0mMzWZU8f0Ze6i9fzirDGkJe9bWLftquXeN9Ywe145m3fW7LM8IyXAUUPz\nOXN8f04b25eUQJT+sS8rY2FZGaXR2VtU+L4gm9k0YNrQoUO9DkVEOuDsCUU8uWAd//5oA2eNL2q2\n7PmPN/CjJxfx+a5aThxZwOnj+jG6fzY5GSls313H6s27eGf157yweCMvLtlIQc80rjxmCJceMTAu\nr5p9X5D1rdMise2YofkMK+jBbS+tYOrYvqQlB9ixp45fPL2Yx9+vYHS/bP52xWGM7p/dbLt+ORmM\n7JvN6eP68bNpY3hl+Wb++vpqbpy7hHvfWMP3ThnBeYcWYRb5t2QDwX7Iq1ZBaWnnk4wS3xdkEYlt\nSUnGj04fxeX3zeOafyzg0IF53P36GrbuquWaE4ZyzQnDSE3efzNEUpJx/MgCjh9ZwJsrt/Dbfy/l\nukc/4NH55fzm3HEM6dMj8sDmzKF3ZWUHs+oa6mUhIl3u+JEF/Oj0kby0dBO/fXYpg3tn8cQ3j+T7\np4w4YDFu6cih+Tx19VH873njWLJ+B1NvfY1Zr66Ki651ukIWkW4x49iDuHDSAHbW1FGUm9HxpgbA\nzLhw8gCOH1nAT//5ETfNXcprK7Zw85cPoSA7PYpRdy9dIYtIt8nJTKE4L7NTxThcQc907rhkIr85\ndxzz1m5l6q2v8fLS2P1koAqyiMQ0M+PiKQOYc83RFGanc8X987jtpRUx2YShgiwicWFoQU+e/O8j\nOXt8Ebe8sJxvPPAeO/fUtb2BxkOOnIbfFJH2Sk8JcMsFh/CzaaP5z9JNnPWnN1i1ucrrsNrN9wVZ\nw2+KSCTMjMuPGsyDXz+M7dV1nPvnN3l79ef7rqjxkEVEusfhQ3rzz6uPok/PNC69+x2eeL+i+Qoa\nD1lEpPuU9Mrk8auOZPKgXnzvkQ+45YXlOOffm30qyCIS13IyU7jv8il8eWIxt720gu8+vJCa+gav\nw2qVPhgiInEvNTmJ351/MIPys/j9c8tYv30PD/qwW5wKsogkBDPj6uOHUpyXwXWPfsDiz3bQL9Pr\nqJpTQRaRhHLW+CLye6QxPfm3nHdQEr/wOqAwakMWkYRz1NB8XvzecRw/IMXrUJpRQRaRhNT3rtt9\n1w9ZTRYikph8OB6yJwXZzM4GvgRkA3c75573Ig4RET+JuMnCzO4xs01m9lGL+VPNbJmZrTSz6/e3\nD+fcP51zVwJXARdGGoOISDzqyBXyfcDtwN+aZphZAPgTcDJQAcwzs6eBAPCbFttf4ZxrGrD0J6Ht\nREQSXsQF2Tn3qpkNajF7CrDSObcawMweAs5yzv0GOKPlPiw4OvVvgWedc+9HGoOISDyKVhtyEVAe\nNl0BHLaf9a8BTgJyzGyoc+6O1lYysxnAjNDkHjP7uJXVcoCWY3O2nBc+faDn+cCW/cS+P63F0t51\nIs2j5XTT82jksb8427M8GuckfF6snJN4/N3yUx5tLWvrdW9rWfPfLbPuyGVgu/bonIv4AQwCPgqb\nPh/4a9j0pcDtHdn3fo45q73zW84Lnz7Qc2B+tGPsijz2E3+n82hPLvtbHo1z0mJeTJyTePzd8lMe\n7cklkveI17m09ohWP+R1QEnYdHFoXjQ9E8H8lvOeifB5R7VnH9HKo+X0M22s01EH2s/+lkfjnHRX\nHvtbR7/3aequAAAXHklEQVRb/sqjrWX7i9Gvv1utslAVj0ioDXmOc25saDoZWA6cSLAQzwOmO+da\na2LwNTOb75yb5HUcnRUveUD85KI8/MdvuXSk29ts4C1ghJlVmNnXnHP1wLeA54AlwCOxWIxDZnkd\nQJTESx4QP7koD//xVS4dukIWEZHo01gWIiI+oYIsIuITKsgiIj6hghwBMxtlZneY2WNm9k2v4+ko\nMzvbzO4ys4fN7BSv4+koMxtiZneb2WNex9IRZpZlZveHzsVXvI6no2L9PDTxxfuio52iY+0B3ANs\nIuwDLaH5U4FlwErg+nbuKwl4IA7yyCM42l6s5/GY179fHcmL4AeopoWeP+x17J09P346D53Mw7v3\nhdcvWDeemGOBQ2n+CcMAsAoYAqQCHwCjgXHAnBaPgtA2ZwLPEuxnHbN5hLa7GTg0DvLwTSGIMK8b\ngPGhdf7hdewdzcOP56GTeXj2vkiYAepdFAZFCu3naeBpM/sX8I+ui7h10cjDD4M7Ret8+E0keREc\n86UYWIjPmg8jzGNx90bXfpHkYWZL8Ph94atfAg+0NihSUVsrm1mpmd1mZncCc7s6uAhElAdfDO50\nvpld1ZWBRSjS89HbzO4AJpjZDV0dXCe0ldcTwHlm9hei93HertRqHjF0Hpq0dT48f18kzBVyNDjn\nyoAyj8PoNOfcbcBtXsfRWc65zwl+yUFMcs7tAi73Oo7OivXz0MQP74tEv0LujkGRuoPy8Ld4yUt5\ndLFEL8jzgGFmNtjMUoGLgKc9jqkjlIe/xUteyqOreX0XtBvvts4G1gN1BNuMvhaafzrBkepWAT/2\nOk7lEVt5xGteysObhwYXEhHxiURvshAR8Q0VZBERn1BBFhHxCRVkERGfUEEWEfEJFWQREZ9QQRYR\n8QkVZBERn1BBFhHxCRVkERGfUEEWEfGJmBkPOT8/3w0aNKjLj7Nr1y6ysrK6/DhdLV7ygPjJRXn4\nzLJlNDQ0EBg9ussP9d57721xzvU50HoxU5AHDRrE/Pnzu/w4ZWVllJaWdvlxulq85AHxk4vy8JnS\nUiorK8nthrpiZp+0Zz01WYiI+IQKsoiIT8RMk4WISFSVlbGwrIxSr+MIoytkERGfUEEWkcQ0cyYl\nDz/sdRTNqMlCRBLTnDn0rqz0OopmdIUsIuITKsgiIj6hgiwi4hMqyCIiPqGbeiKSmNQPWURE2qKC\nLCKJSf2QRUR8Qv2QRUSkLSrIIiI+oYIsIuITKsgiIj6hm3oikpjUD1lERNqigiwiiUn9kEVEfEL9\nkEVEpC0qyCIiPqGCLCLiEyrIIiI+oZt6IpKY4rEfspmVmNnLZrbYzD42s++E5vcysxfMbEXoZ17Y\nNjeY2UozW2Zmp3Y2BhGReBCNJot64PvOudHA4cDVZjYauB54yTk3DHgpNE1o2UXAGGAq8GczC0Qh\nDhGR9vNhP+ROF2Tn3Hrn3Puh5zuBJUARcBZwf2i1+4GzQ8/PAh5yztU459YAK4EpnY1DRCQic+bQ\n+623vI6imaje1DOzQcAE4B2g0Dm3PrRoA1AYel4ElIdtVhGaJyKS0KJ2U8/MegCPA9c653aY2d5l\nzjlnZq4D+5wBzAAoLCykrKwsStG2raqqqluO09XiJQ+In1yUh7+Mr6ykoaHBV7lEpSCbWQrBYvyg\nc+6J0OyNZtbPObfezPoBm0Lz1wElYZsXh+btwzk3C5gFMGnSJFdaWhqNcPerrKyM7jhOV4uXPCB+\nclEePpObS2Vlpa9yiUYvCwPuBpY4524JW/Q08F+h5/8FPBU2/yIzSzOzwcAw4N3OxiEiEuuicYV8\nFHApsMjMFobm/Qj4LfCImX0N+AS4AMA597GZPQIsJthD42rnXEMU4hARaT8f9kPudEF2zr0OWBuL\nT2xjmxuBGzt7bBGReKKPTotIYvJhP2R9dFpEEpPGQxYRkbaoIIuI+IQKsoiIT6ggi4j4hG7qiUhi\n8mE/ZF0hi4j4hAqyiCQm9UMWEfEJH/ZDVkEWiQLnHJt31rBhxx62VddRWV3Ltl21bN9dT019A3UN\njaz5pIb/bP+ItOQk0lMCpKcEyE5PpiA7ncLsdPrnpNOnZxrhQ9d6YfXmKh57r4LsjBQunFRCXlZq\nlx5v2YadzFu7lfJt1dTVO5IMevdIo0/PNAb2zmRonx5dHoNfqCCLtNP26jrKt1VTvrU69HP33umK\nbbupqW9sdbvkJCMlkEQSDaRs+Yyaukb21DfgWhkhPDs9meGFPRnRtyeTB/Vi8uBeFOVmdHFmX1iy\nfgfn/eVN9tQ10Ojgr6+t4eYLDuG44X2ifqx312zlV3MWs2jddgBSA0mkJidR39jInrrmr2V+j1QO\n6tODYYU9GF7Yk2EFwdeoV5wVahVkkZBdNfWsq9wdLLhbqynftnvvz4pt1ezcU99s/ez0ZEp6ZTKs\noCcnjCygpFcmfbPT6ZWVSm5mKnmZKeRkpJAcCN6qCR9H2DlHbUMj26vr2LSzho079lC+tZoVm6pY\nsbGKpxd+xoPvfApAcV4GJ40q5NQxfZk8KG/v/qLNOcdP/vkRWWnJvPC946isruX7j3zA1+6bx/9d\nPIHTxvWL2rHueX0Nv5yzmKLcDH551hhOGFlAUW7G3v8OdtXUs2lnDWu37GLlpipWbqpixaadPLXw\ns2bnIb9HKsMLewaLdGEPRhT2ZFhhT3IyUqIWa3dSQZaE4Jxjx+56NuzYQ8W24BVtxbZq1lXuDj3f\nzdZdtc22SU9JoiQvk+K8DCYPyqMkL5OSXhkU52VS0iuzU296MyMtOUBBdoCC7HTGFuU0W97Q6Fi6\nYQfz1mzl9ZWfM/vdT7nvzbX0ykrl7PFFTD9sAEMLenT4+K1575NtvPfJNn599liKcjMoys3g0auO\n4LJ753HN7AXcl57C0cPyO32cB97+hF/OWczUMX35w4XjyUjd9zuOs9KSGZyWzOD8LI4fWbB3vnOO\njTtqWLZxJys27mTZhp0s31TFI/PLqa79YhTfPj3TGNgrkwG9MikO/Wx6FPRMIynJ22ahtqggS8yq\nrW9k++46tu+upbK6jsrqOj7fVcOmHTVs2lnD5p01bNq5h007g9O1LZoUUpOTKM4LFtixRTl7nxfn\nZVCSl0l+j1TP2nMDScaY/jmM6Z/DZUcNprq2nleWbWbOh+v5+9trueeNNRw2uBdfO3owJ48ujEqc\n/1q0ntTkJM6e8MVXXPZMT+Heyyfz5b+8xTcfeI9Hv3lEp47x0brt/PKZxZSO6MPt0ydEfLVvZvTN\nSadvTnqzZpTGRse6yt2s2LSTZRuqWLW5ivKt1byzZitPLlzXrHkoJWAUZqfT76KbOLJXNd/tVEbR\npYIsXaqxMfiveW1DI7X1jdSFftbWN1JTH5y/u7aBXTX1VNc2sKu2nuqa0M/Q/NXle/jHp/Opqqmn\nsrqO7buDN8121bb9vQY5GSkU9EyjIDuNyYN60adnWmg6nZK8DIryMsjP8u+VUkuZqcmcNq4fp43r\nx5aqGh6dX8GD73zCjL+/x6h+2Xz7hKGcOqZvh/NpbHQ8u2gDxw3vQ4+05mUhO1SUz/nzG1x+7zx+\nOKFjx6hvaOS6Rz+gV1Yqt1wwPqpNL0lJRkmv4H8uJ4wsbLaspr6Bzyr38OnWL9r7N+7Yw2eVu6N2\n/GhRQQ7z2orNvPBJHWvfWIODvX9Vm/64urA/s86BCy0JPm99PmHbhu/vi+f77gPn2txfa/NxzWN0\nDsoranitanGr+2hodDQ4R0ND8Gdj03SjozH0s6GRvc8bnaO+xbpfbBN8M9c1flFo9xbdhkbqGiL+\nbtu9MlICZKUFsIZGejdW0yMtmf656Yzql01uZgq5GSnkZqaQk5lKbkYKeZmp5GWl0KdnGmnJ+/4b\nHC/ye6TxzdKDuPKYwTy18DNuf3kl33zwfcb0z+Zn08YwZXCviPe5oLySDTv2cP24ka0u75+bwT2X\nTeaCO97ilvccJ5XW0TM9siabf7z7KUs37OSOSw7t1ptxackBBudnMTg/q/mCmTNZtXAVXHBSt8Vy\nICrIYR5/r4J/LqmFJYu9DgWzL76GxczCnsPeqWbrfDHfDBobGgh89unef2UtbP1Akn3xMCOp5fO9\n89j7PDnJSDIjNTmJQOj5Fz8hOZBEWugueUroZ2py0t4752ktppuepyQnkZWaTGZqgKy0ZLJSA2Sm\nJZOREiAQutoL3gw7thte9diSHEjivInFnD2hiKc/WMfv/r2MC+58iy8d3I8bThtJcV5mu/f17KL1\npAaSOGFUQZvrjOmfw58vmcjl977Lfz/4PvdcNpmUdl7lbttVy83PL+fIg3pz6pi+7Y6rS6kfsr/9\n6uyxnNirkqOPOgrYt/h9Ma/peeuFMrw5r+X8trZtmhctcfPNwHJAgSTjnAnFTB3TjztfXcUdr6zi\npSUbueaEYVx5zBBSk/dfNJ1zPPvRBo4Zlk/2Aa56jxveh8vGpHLPR1u4/vFF/P78g9vVTPL755dR\nVVPPz6aN8byftZ+pIIfpmZ5Cz1RLmE7oEl8yUgNce9JwvjyphF89s5jfP7eMJ96v4FdnjeXIoW33\njnjvk22sq9zN904e3q7jHFucQs/Cgdz60gpSAsZN54zbb1FeWF7J7Hc/5bIjBzGib8+I80okGstC\nJM4U5WZwx6UTufeyydQ1OKb/9R2ufWgBm3buaXX9h+aVk5kaYOrY9jclXHvSML51/FAemlfOdY99\nsE8PlibVtfVc//iH9OmR1u6Cn8h0hSwSp44fWcARB/Xmz2WruKNsFS8t2cR1p47gksMH7m2fX725\nin8uWMdXDhtAVlr7y4GZ8f1ThpOanMQtLyxn7ZZd3HLBeAaF3ThraHT84NEPWbZxJ/dcNjnim4CJ\nSAVZJI6lpwT43snDOWdCEf/vqY/42dMf88j8ci45fCC9s1L57b+XkpWWzNUnDI1432bGt08cxpA+\nWdzw+CJO/eOrnHtocah/sOPeN9byzpqt3HDaSI4f0fbNQs/4cDxkFWSRBDA4P4u/XTGFfy1az2+f\nXcoNTywCgh89nnXpRAp6pnd432cc3J/Jg3px8/PLeHJBBbPfDX7kOy8zhd+dfzAXTCqJSg6JQAVZ\nJEGYGWcc3J8vjevHyk1V7NhTx+h+Oa1+dDlShdnp/O78Q/h/08awdssu6hoaGd0/29/9wWfOpGTV\nKvBRbyQVZJEEY2YMK+ya3g490pL3GZfDt3zYD1m9LEREfEIFWUTEJ1SQRUR8QgVZRMQndFNPRBKT\nD/sh6wpZRMQnPCvIZjbVzJaZ2Uozu96rOEQkQc2cScnDD3sdRTOeNFmYWQD4E3AyUAHMM7OnnXPe\nD0QsIolB/ZD3mgKsdM6tds7VAg8BZ3kUi4iIL3hVkIuA8rDpitA8EZGE5eteFmY2A5gBUFhYSFlZ\nWZcfs6qqqluO09XiJQ+In1yUh7+Mr6ykoaHBV7l4VZDXAeFDQBWH5jXjnJsFzAKYNGmS646vJIqX\nrz6KlzwgfnJRHj6Tm0tlZaWvcvGqIM8DhpnZYIKF+CJgukexiEgi8mE/ZE8KsnOu3sy+BTwHBIB7\nnHMfexGLiIhfeNaG7JybC8z16vgikuA0HrKIiE+oH7KIiLRFBVlExCdUkEVEfEIFWUTEJ3RTT0QS\nkw/7IesKWUTEJ1SQRSQxaTxkERGfUD9kERFpiwqyiIhPqCCLiPiECrKIiE/opp6IJCb1QxYRkbao\nIItIYlI/ZBERn1A/ZBERaYsKsoiIT6ggi4j4hAqyiIhP6KaeiCQm9UMWEZG2qCCLSGJSP2QREZ9Q\nP2QREWmLCrKIiE+oIIuI+IQKsoiIT+imnogkJvVDFhGRtsT9FXLpfaX7zDtj+Blcd+R1rS6vrKzk\nktRL2lx+oO39snwSk3wdXyTLKysryV2b69v42ru8KQ+/xtfe5aMCoygNXVf6Mb52L585k/dfu4Wf\nrx3e7u3LLivbZ3/R1KkrZDP7vZktNbMPzexJM8sNW3aDma00s2VmdmrY/Ilmtii07DYzs87EICLS\nIXPmcOzHO7yOojnnXIcfwClAcuj5/wL/G3o+GvgASAMGA6uAQGjZu8DhgAHPAqe151gTJ0503eHl\nl1/uluN0tXjJw7n4yUV5+Mxxx7lthxzSLYcC5rt21LlOXSE75553ztWHJt8GikPPzwIecs7VOOfW\nACuBKWbWD8h2zr0dCvJvwNmdiUFEJF5E86beFQSveAGKgPKwZRWheUWh5y3ni4gkvAPe1DOzF4G+\nrSz6sXPuqdA6PwbqgQejGZyZzQBmABQWFlJWVhbN3beqqqqqW47T1eIlD4ifXJSHv4yvrKShocFf\nubSnXWN/D+Ay4C0gM2zeDcANYdPPAUcA/YClYfMvBu5sz3HUhhyZeMnDufjJRXn4T3flQne0IZvZ\nVOCHwJnOueqwRU8DF5lZmpkNBoYB7zrn1gM7zOzwUO+KrwJPdSYGEZF40dl+yLcT7EnxQqj32tvO\nuauccx+b2SPAYoJNGVc75xpC2/w3cB+QQbDN+dl99ioi0tVmzqRk1SooLfU6kr06VZCdc0P3s+xG\n4MZW5s8HxnbmuCIinabxkEVEpC0qyCIiPqGCLCLiEyrIIiI+EfejvYmItErjIYuISFtUkEUkMc2c\nScnDD3sdRTNqshCRxKR+yCIi0hYVZBERn1BBFhHxCRVkERGf0E09EUlM6ocsIiJtUUEWkcSkfsgi\nIj6hfsgiItIWFWQREZ9QQRYR8QkVZBERn9BNPRFJTOqHLCIibVFBFpHEpH7IIiI+oX7IIiLSFhVk\nERGfUEEWEfEJFWQREZ8w55zXMbSLmW0HVrSyKAfYfoB54dMHep4PbOlgmK3F0t51Is2j5XTT82jk\nsb8427M8GuckfF6snJN4/N3yUx5tLWvrdW9rmRe/WwOdc30OuEfnXEw8gFntnd9yXvj0gZ4D86Md\nY1fksZ/4O51He3LZ3/JonJMW82LinMTj75af8mhPLpG8R7zOpbVHLDVZPBPB/JbznonweUe1Zx/R\nyqPl9DNtrNNRB9rP/pZH45x0Vx77W0e/W/7Ko61l+4vRr79brYqZJovuYmbznXOTvI6js+IlD4if\nXJSH//gtl1i6Qu4us7wOIEriJQ+In1yUh//4KhddIYuI+ISukEVEfEIFWUTEJ1SQRUR8QgU5AmY2\nyszuMLPHzOybXsfTUWZ2tpndZWYPm9kpXsfTUWY2xMzuNrPHvI6lI8wsy8zuD52Lr3gdT0fF+nlo\n4ov3RUc7RcfaA7gH2AR81GL+VGAZsBK4vp37SgIeiIM88oC74yCPx7z+/epIXsClwLTQ84e9jr2z\n58dP56GTeXj3vvD6BevGE3MscGj4iQECwCpgCJAKfACMBsYBc1o8CkLbnAk8C0yP5TxC290MHBoH\nefimEESY1w3A+NA6//A69o7m4cfz0Mk8PHtfJMwA9c65V81sUIvZU4CVzrnVAGb2EHCWc+43wBlt\n7Odp4Gkz+xfwj66LuHXRyMPMDPgt8Kxz7v2ujbh10ToffhNJXkAFUAwsxGfNhxHmsbh7o2u/SPIw\nsyV4/L7w1S+BB4qA8rDpitC8VplZqZndZmZ3AnO7OrgIRJQHcA1wEnC+mV3VlYFFKNLz0dvM7gAm\nmNkNXR1cJ7SV1xPAeWb2F6L3cd6u1GoeMXQemrR1Pjx/XyTMFXI0OOfKgDKPw+g059xtwG1ex9FZ\nzrnPAT/9QYmIc24XcLnXcXRWrJ+HJn54XyT6FfI6oCRsujg0L9YoD3+Ll7yURxdL9II8DxhmZoPN\nLBW4CHja45g6Qnn4W7zkpTy6mtd3QbvxbutsYD1QR7DN6Guh+acDywnedf2x13Eqj9jKI17zUh7e\nPDS4kIiITyR6k4WIiG+oIIuI+IQKsoiIT6ggi4j4hAqyiIhPqCCLiPiECrKIiE+oIIuI+IQKsoiI\nT/x/ZDbCEpaVQAcAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "Kd = .5\n", "[num,den] = control.pade(1,5)\n", "D = Kd*control.tf(num,den)\n", "I = control.tf([1],[1,0])\n", "\n", "Hyd = I*(D-1)\n", "\n", "def myBode(H):\n", " w = np.logspace(-3,2,401)\n", " mag,phase,omega = control.bode(H,w,deg=True,Plot=False);\n", " \n", " wc = np.interp(-180.0,np.flipud(phase),np.flipud(omega))\n", " gc = np.interp(wc,omega,mag)\n", "\n", " plt.figure(figsize=(12,6))\n", " plt.subplot(2,2,1)\n", " plt.loglog(omega,mag)\n", " plt.ylim(.01,10)\n", " plt.loglog([wc,wc],plt.ylim(),'r--')\n", " plt.loglog(plt.xlim(),[1,1],'g--')\n", " plt.grid()\n", " plt.title('Open Loop Transfer Function')\n", " \n", " plt.subplot(2,2,3)\n", " plt.semilogx(omega,phase)\n", " plt.ylim(-360,360)\n", " plt.semilogx(plt.xlim(),[-180,-180],'g--')\n", " plt.semilogx([wc,wc],plt.ylim(),'r--')\n", " plt.grid()\n", "\n", " \n", "myBode(Hyd)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": {}, "colab_type": "code", "id": "wfaljXsFxKhH", "outputId": "eacd91ac-8ebf-480b-9a39-8b2b9f23ddef" }, "outputs": [ { "data": { "image/png": "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\nEREREckySqIlfgsWhBcRERGRLKMkWkREREQkRkqiRURERERipCRaRERERCRGSqJFRERERGKkeaIl\nfponWkRERLKUrkSLiIiIiMRISbTET/NEi4iISJZSEi3x0zzRIiIikqWURIuIiIiIxEhJtIiIiIhI\njJREi4iIiIjESEm0iIiIiEiMNE+0xE/zRIuIiEiW0pVoEREREZEYKYmW+GmeaBEREclSSqIlfpon\nWkRERLKUkmgRERERkRgpiRYRERERiZGSaBERERGRGCmJFhERERGJkeaJlvhpnmgRERHJUglfiTbG\njDTGvGKMWWmMWWGM+WakfIgx5p/GmDWR27Kofb5njFlrjFltjDk30TaIiEj/qd8WEUlcMoZzBIBb\nrLVTgZOBG40xU4HvAv+y1k4E/hW5T6TuKuBY4DzgN8YYdxLaIU7TPNEimUr9tohIghJOoq2126y1\nSyPre4FVQDVwCfBQZLOHgEsj65cAj1lru6y164G1wOxE2yFpoHmiRTKS+m0RkcQl9YuFxpgxwAxg\nIVBlrd0WqdoOVEXWq4HNUbs1RMpERMRh6rdFROKTtC8WGmMKgb8CN1trW40x++ustdYYY+N4zBuA\nGwCqqqqoc+CLbG1tbY4cZzA4obkZgPo+4qV4JpfimVzZHs9k99vJ6LOz/TVxmuLtLMXbWamOd1KS\naGOMl3BH/Ii19slI8Q5jzHBr7TZjzHBgZ6R8CzAyaveaSNlhrLX3AvcCzJo1y9bW1iajuX2qq6vD\nieMMCqWlAH3GS/FMLsUzubI5nqnot5PRZ2fza5IOirezFG9npTreyZidwwAPAKustf8dVfUM8LnI\n+ueAp6PKrzLG5BhjxgITgUWJtkNERPpH/baISOKScSX6NOCzwHJjTH2k7FbgP4EnjDFfBDYCVwBY\na1cYY54AVhL+hviN1tpgEtohTtNHUiKZSv22iEiCEk6irbWvA6aX6rN62ed24PZEjy0iIrFTvy0i\nkjj97LfET/NEi4iISJZSEi3x0zzRIiIikqWURIuIiIiIxEhJtIiIiIhIjJREi4iIiIjESEm0iIiI\niEiMkvaz35KFNE+0iIiIZCldiRYRERERiZGSaImf5okWERGRLKUkWuKneaJFREQkSymJFhERERGJ\nkZJoEREREZEYKYkWEREREYmRkmgRERERkRhpnmiJn+aJFhERkSylK9EiIiIiIjFSEi3x0zzRIiIi\n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\n", "text/plain": [ "" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "from ipywidgets import interact\n", "\n", "w = np.logspace(-1,2,401)\n", "\n", "def sim(torder=0, kp=.1, alpha = 0):\n", "\n", " num,den = control.pade(torder,5)\n", " p = control.tf(num,den)\n", " g = control.tf([1],[1,0])\n", " k = control.tf([kp],[1])\n", " mag,phase,omega = control.bode(g*p*k,w,deg=True,Hz=True, Plot=False);\n", " magc, phasec, omegac = control.bode(g*k/(1+g*p*k),w,deg=True,Hz=True, Plot=False);\n", " maga, phasea, omegaa = control.bode(alpha + (1-alpha)*g*k/(1+g*p*k),w,deg=True,Hz=True, Plot=False);\n", " \n", " wc = np.interp(-180.0,np.flipud(phase),np.flipud(omega))\n", " gc = np.interp(wc,omega,mag)\n", "\n", " \n", " plt.figure(figsize=(12,6))\n", " plt.subplot(2,2,1)\n", " plt.loglog(omega,mag)\n", " plt.ylim(.01,10)\n", " plt.loglog([wc,wc],plt.ylim(),'r--')\n", " plt.loglog(plt.xlim(),[1,1],'g--')\n", " plt.grid()\n", " plt.title('Open Loop Transfer Function')\n", " \n", " plt.subplot(2,2,3)\n", " plt.semilogx(omega,phase)\n", " plt.ylim(-360,360)\n", " plt.semilogx(plt.xlim(),[-180,-180],'g--')\n", " plt.semilogx([wc,wc],plt.ylim(),'r--')\n", " plt.grid()\n", " \n", " plt.subplot(2,2,2)\n", " plt.loglog(omegac,magc)\n", " plt.loglog(omegaa,maga)\n", " plt.ylim(.01,10)\n", " plt.grid()\n", " plt.title('Closed Loop Transfer Function')\n", " \n", " plt.subplot(2,2,4)\n", " plt.semilogx(omegac,phasec)\n", " plt.semilogx(omegaa,phasea)\n", " plt.ylim(-360,360)\n", " plt.grid()\n", "\n", "interact(sim, torder=(0,8,.02), kp=(.1,5,.05), alpha = (-1,1,.01))" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": {}, "colab_type": "code", "id": "JVBYYHKTxKhK" }, "outputs": [], "source": [ "cont" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [Continuous Time Simulation in SimPy](http://nbviewer.jupyter.org/github/jckantor/CBE40455/blob/master/notebooks/02.09-Continuous-Time-Simulation-in-SimPy.ipynb) | [Contents](toc.ipynb) | [Linear Optimization](http://nbviewer.jupyter.org/github/jckantor/CBE40455/blob/master/notebooks/03.00-Linear-Optimization.ipynb) >

\"Open

\"Download\"" ] } ], "metadata": { "colab": { "collapsed_sections": [], "name": "04.08-Decentralized-Control-in-a-Supply-Chain.ipynb", "provenance": [], "version": "0.3.2" }, "kernelspec": { "display_name": "Python 3", "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.7.3" } }, "nbformat": 4, "nbformat_minor": 2 }