{ "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", "< [Queuing Systems](http://nbviewer.jupyter.org/github/jckantor/CBE40455/blob/master/notebooks/02.02-Queuing-Systems.ipynb) | [Contents](toc.ipynb) | [Model Development in SimPy](http://nbviewer.jupyter.org/github/jckantor/CBE40455/blob/master/notebooks/02.04-Discrete-Event-Simulation-of-a-Batch-Process.ipynb) >

\"Open

\"Download\"" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "oCNYc5jXG13h" }, "source": [ "# Emergency Room Simulation\n", "\n", "This notebook is the result of an in-class exercise in the simulation and analysis of a simple queuing model for a hospital emergency room." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "g0ZiPiksHcGS" }, "source": [ "## Initializations\n", "\n", "Install the Simpy library and import necessary libraries." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 54 }, "colab_type": "code", "executionInfo": { "elapsed": 3218, "status": "ok", "timestamp": 1567168601233, "user": { "displayName": "Jeffrey Kantor", "photoUrl": "https://lh3.googleusercontent.com/a-/AAuE7mAnl92hB5egoXgR-yAmEJN-i3LA_Jwcr3-0236SZg=s64", "userId": "09038942003589296665" }, "user_tz": 240 }, "id": "4y6q_A4C-aok", "outputId": "1f799ebf-9e68-4408-cc9a-c9ad812b6918" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: simpy in /usr/local/lib/python3.6/dist-packages (3.0.11)\n" ] } ], "source": [ "!pip install simpy" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": {}, "colab_type": "code", "id": "bHMK1SXo-jJ5" }, "outputs": [], "source": [ "%matplotlib inline\n", "\n", "import matplotlib.pyplot as plt # for plotting\n", "import numpy as np # for numerical calculations\n", "import pandas as pd # for analysis of simulation data\n", "import random # for generating pseudo-random numbers\n", "import simpy # for discrete event simulation" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "udr7Z2a-HshL" }, "source": [ "## Poisson processes\n", "\n", "We assume $n$, the average number of patients arriving in a period of $\\tau$ minutes, is given by $\\lambda \\tau$ where $\\lambda$ represents the average rate of arrival in units of patients per minute. If the events are statistically independent and identically distributed in time, this probability is uniformly distributed in time, then this is known as a [Poisson Process](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-262-discrete-stochastic-processes-spring-2011/course-notes/MIT6_262S11_chap02.pdf).\n", "\n", "One of the key properties of a Poisson process is that the period of time between arrival events, $t$, is a random number distributed according to the exponential distribution\n", "\n", "$$p(t|\\lambda) = \\lambda e^{-\\lambda t}$$\n", "\n", "The mean value of this distribution is $\\frac{1}{\\lambda}$. The variance is also $\\frac{1}{\\lambda}$ so that the standard deviation is $\\frac{1}{\\sqrt{\\lambda}}$.\n", "\n", "The standard Python libraries include functions for generating psuedo-random numbers from statistical distributions. In the case we use `random.expovariate(lambda)` to psuedo-random numbers drawn from an exponential distribution. The following cell shows how this is done, and creates a histogram demonstrating the results." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 300 }, "colab_type": "code", "executionInfo": { "elapsed": 944, "status": "ok", "timestamp": 1567168604939, "user": { "displayName": "Jeffrey Kantor", "photoUrl": "https://lh3.googleusercontent.com/a-/AAuE7mAnl92hB5egoXgR-yAmEJN-i3LA_Jwcr3-0236SZg=s64", "userId": "09038942003589296665" }, "user_tz": 240 }, "id": "EevKAZvAQMIE", "outputId": "7bb6d8b5-83a1-42a6-9123-4a0465fe0f24" }, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, 'probability density function')" ] }, "execution_count": 9, "metadata": { "tags": [] }, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "

" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "# specify rate\n", "rate = 0.5\n", "\n", "# compute a list of pseudo-random numbers from an exponential distribution\n", "x = [random.expovariate(rate) for n in range(0, 10000)]\n", "\n", "# plot histogram\n", "plt.hist(x, bins=int(np.sqrt(len(x))), density=True)\n", "\n", "# compare to theoretical distribution\n", "t = np.linspace(0, max(x))\n", "plt.plot(t, rate*np.exp(-rate*t), lw=3)\n", "plt.legend(['exponential distribution', 'histogram'])\n", "plt.xlabel('interarrival time t')\n", "plt.ylabel('probability density function')" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "A-sEKk1stcKZ" }, "source": [ "## Modeling patient arrivals as a Poisson process" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "R1VMODh323wj" }, "source": [ "### Version 1. Basic simulation\n", "\n", "The following cell is a first attempt at a simulation of the patient arrival process. The python generator assigns a patient ID to every new arrival and reports the arrival time." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 238 }, "colab_type": "code", "executionInfo": { "elapsed": 473, "status": "ok", "timestamp": 1567168607106, "user": { "displayName": "Jeffrey Kantor", "photoUrl": "https://lh3.googleusercontent.com/a-/AAuE7mAnl92hB5egoXgR-yAmEJN-i3LA_Jwcr3-0236SZg=s64", "userId": "09038942003589296665" }, "user_tz": 240 }, "id": "nQn8WfVktkEn", "outputId": "73ea1a02-4c2c-441a-ddbe-a976d5eb8c0a" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Patient 1 arrived at 1.6054742413576122 minutes\n", "Patient 2 arrived at 2.9862975304596584 minutes\n", "Patient 3 arrived at 6.226685767685777 minutes\n", "Patient 4 arrived at 8.886436229333643 minutes\n", "Patient 5 arrived at 9.105078716440664 minutes\n", "Patient 6 arrived at 10.907985660102916 minutes\n", "Patient 7 arrived at 12.38868161237205 minutes\n", "Patient 8 arrived at 13.583531753095926 minutes\n", "Patient 9 arrived at 16.920435092650337 minutes\n", "Patient 10 arrived at 18.681054931254344 minutes\n", "Patient 11 arrived at 19.79653435459627 minutes\n", "Patient 12 arrived at 24.339149139274646 minutes\n", "Patient 13 arrived at 28.161555082144186 minutes\n" ] } ], "source": [ "env = simpy.Environment()\n", "\n", "# define a python generator describing the arrival of a new patient\n", "def patient_arrival(env, rate):\n", " n = 0\n", " while True:\n", " yield env.timeout(random.expovariate(rate))\n", " n = n + 1\n", " print('Patient', n, 'arrived at', env.now, 'minutes')\n", "\n", "# perform a simulation with simpy\n", "env.process(patient_arrival(env, 0.5))\n", "env.run(until=30)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "aGYW5NNG3Hca" }, "source": [ "### Version 2. Adding an event log\n", "\n", "A characteristic feature of event-based simulation is the logging of relevant events. Here we use a list to record events as the occur. The record for each event consists of a list of data comprising the patient ID, the time of the event, and type of event." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 323 }, "colab_type": "code", "executionInfo": { "elapsed": 302, "status": "ok", "timestamp": 1567168609063, "user": { "displayName": "Jeffrey Kantor", "photoUrl": "https://lh3.googleusercontent.com/a-/AAuE7mAnl92hB5egoXgR-yAmEJN-i3LA_Jwcr3-0236SZg=s64", "userId": "09038942003589296665" }, "user_tz": 240 }, "id": "fNGLor4k3o9S", "outputId": "410b0e30-9614-437c-dfd2-87d4ab9a1a7b" }, "outputs": [ { "data": { "text/plain": [ "[[1, 0.08255875642546838, 'Arrival'],\n", " [2, 2.154020951510568, 'Arrival'],\n", " [3, 3.690213096751676, 'Arrival'],\n", " [4, 3.7292525534379526, 'Arrival'],\n", " [5, 5.5288177111371555, 'Arrival'],\n", " [6, 5.964165672571363, 'Arrival'],\n", " [7, 6.017082273205615, 'Arrival'],\n", " [8, 11.11180870530135, 'Arrival'],\n", " [9, 12.79936039051638, 'Arrival'],\n", " [10, 13.92130464011105, 'Arrival'],\n", " [11, 15.156231476563278, 'Arrival'],\n", " [12, 17.149943407249417, 'Arrival'],\n", " [13, 20.156346210823116, 'Arrival'],\n", " [14, 25.13846969588947, 'Arrival'],\n", " [15, 26.988843043672063, 'Arrival'],\n", " [16, 28.28680275211266, 'Arrival'],\n", " [17, 28.65926687881398, 'Arrival'],\n", " [18, 29.299928937955222, 'Arrival']]" ] }, "execution_count": 11, "metadata": { "tags": [] }, "output_type": "execute_result" } ], "source": [ "env = simpy.Environment()\n", "\n", "log = []\n", "\n", "# define a python generator describing the arrival of a new patient\n", "def patient_arrival(env, rate):\n", " n = 0\n", " while True:\n", " yield env.timeout(random.expovariate(rate))\n", " n = n + 1\n", " log.append([n, env.now, 'Arrival'])\n", "\n", "# perform a simulation with simpy\n", "env.process(patient_arrival(env, 0.5))\n", "env.run(until=30)\n", "\n", "log" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "wLj6V-VsA6Aq" }, "source": [ "### Version 3. Converting the log to a Pandas DataFrame\n", "\n", "The next version of our simulation uses the Pandas library to create relevant analytics." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 452 }, "colab_type": "code", "executionInfo": { "elapsed": 373, "status": "ok", "timestamp": 1567168610931, "user": { "displayName": "Jeffrey Kantor", "photoUrl": "https://lh3.googleusercontent.com/a-/AAuE7mAnl92hB5egoXgR-yAmEJN-i3LA_Jwcr3-0236SZg=s64", "userId": "09038942003589296665" }, "user_tz": 240 }, "id": "sZhLg48WBA0-", "outputId": "0ce4489c-11b9-4b3e-d325-f893f020a2e0" }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TimeEvent
Patient ID
10.147039Arrival
20.373035Arrival
31.462077Arrival
43.231856Arrival
53.288754Arrival
64.702892Arrival
711.170035Arrival
818.117774Arrival
918.810539Arrival
1020.414122Arrival
1128.920332Arrival
1229.998723Arrival
\n", "
" ], "text/plain": [ " Time Event\n", "Patient ID \n", "1 0.147039 Arrival\n", "2 0.373035 Arrival\n", "3 1.462077 Arrival\n", "4 3.231856 Arrival\n", "5 3.288754 Arrival\n", "6 4.702892 Arrival\n", "7 11.170035 Arrival\n", "8 18.117774 Arrival\n", "9 18.810539 Arrival\n", "10 20.414122 Arrival\n", "11 28.920332 Arrival\n", "12 29.998723 Arrival" ] }, "execution_count": 12, "metadata": { "tags": [] }, "output_type": "execute_result" } ], "source": [ "env = simpy.Environment()\n", "\n", "log = []\n", "\n", "# define a python generator describing the arrival of a new patient\n", "def patient_arrival(env, rate):\n", " n = 0\n", " while True:\n", " yield env.timeout(random.expovariate(rate))\n", " n = n + 1\n", " log.append([n, env.now, 'Arrival'])\n", "\n", "# perform a simulation with simpy\n", "env.process(patient_arrival(env, 0.5))\n", "env.run(until=30)\n", "\n", "# converting the log to a Pandas DataFrame\n", "df = pd.DataFrame(log, columns=['Patient ID', 'Time', 'Event']).set_index('Patient ID')\n", "df" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "7VnQH6rkB_FR" }, "source": [ "### Version 4. Plotting the DataFrame\n", "\n", "Now that we have an analytical tool to summarize the event log, let's use the tool to perform longer simulationsn and show the result graphically." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 300 }, "colab_type": "code", "executionInfo": { "elapsed": 556, "status": "ok", "timestamp": 1567168613623, "user": { "displayName": "Jeffrey Kantor", "photoUrl": "https://lh3.googleusercontent.com/a-/AAuE7mAnl92hB5egoXgR-yAmEJN-i3LA_Jwcr3-0236SZg=s64", "userId": "09038942003589296665" }, "user_tz": 240 }, "id": "o6ij_IGpB2LB", "outputId": "b2bd47ed-23d2-446a-d34b-f93ee77880d0" }, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, 'Arrival Time')" ] }, "execution_count": 13, "metadata": { "tags": [] }, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAEKCAYAAAAFJbKyAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3Xl8FeW9x/HPj0BYw74vYd9FAYO4\nIgp1wQW3KmqtW4tWbbW9t669Wqu22tvai7XVUrWKVXGrggUX6gIisgXZ1wCBJCxJgISQACHJ7/5x\nBo3IkkDOlnzfr9d5ZeaZOWd+0QNfnmdmnjF3R0REpKJqRbsAERGJLwoOERGpFAWHiIhUioJDREQq\nRcEhIiKVouAQEZFKUXCIiEilKDhERKRSFBwiIlIptaNdQDi0bNnSu3TpEu0yRETiSmpqaq67tzrS\nftUyOLp06cL8+fOjXYaISFwxsw0V2U9DVSIiUikKDhERqRQFh4iIVIqCQ0REKkXBISIilaLgEBGR\nSlFwiIhIpVTL+zhERKRiSsucL9duY33urgq/R8EhIlJDfboqm4cmLWPj9qJKvU9DVSIiNdRjU1ZQ\nVFzCE5cPYPZ9Iyr8vrAFh5m9YGbZZrb0INv+y8zczFoG62ZmT5lZmpktNrPB5fa93szWBK/rw1Wv\niEhNMWttLuP+s4a07F3cfHo3rhqSTNsm9Sr8/nAOVb0IPA1MKN9oZp2Ac4CN5ZrPB3oGr6HAM8BQ\nM2sOPASkAA6kmtlkd98RxrpFRKqtqUs2c9srCwBIbt6Ai05oV+nPCFtwuPsMM+tykE1/Au4GJpVr\nGw1McHcHZptZUzNrBwwHprn7dgAzmwacB7wWrrpFRKqzF2elk9y8Ae/efhrNGtTBzCr9GRE9x2Fm\no4Esd190wKYOQEa59cyg7VDtB/vssWY238zm5+TkVGHVIiLxb/mmnVz21y+Yu347Vw3pRPOGiUcV\nGhDBq6rMrAFwP6Fhqirn7uOB8QApKSkejmOIiMSbHYXFTFqYxfgZ68gu2Mt/fa8Xt57Z/Zg+M5KX\n43YHugKLgpTrCCwws5OALKBTuX07Bm1ZhIaryrd/FoFaRUTilrszd/12FmbkMeHLDWTl7aZH60a8\nc10KAzo2OebPj1hwuPsSoPX+dTNLB1LcPdfMJgN3mNlEQifH8919s5l9CPzWzJoFbzsHuC9SNYuI\nxJst+Xv47dQVTF60CYB2Terx9x+m8L1+barsGGELDjN7jVBvoaWZZQIPufvzh9h9KjAKSAOKgBsB\n3H27mT0CzAv2+83+E+UiIhKSll3AvxZksb2wmKlLNrNrbwk3ntaFO0f0pGmDxCo/noUuZKpeUlJS\nXI+OFZGa4A8fruL5mevZva+UFg0T6dMuiYcv7k+P1kmV/iwzS3X3lCPtpylHRETi1NqcXTz9aRon\nd2vOo5cMoEfrRhE5roJDRCQO5e7ay18+ScMMnrxyIO2b1o/YsRUcIiJxwt35Im0bn67K5oUv1uMO\nV5+UHNHQAAWHiEjMKytzPl6Zze/eX8G6nEIArkzpyFVDkhnUqWnE61FwiIjEsPTcQsa+PJ/VW3fR\no3UjHr64P+f0b0O7JpHtZZSn4BARiVH5Rfu49rk5FBWX8Psrjuei49tTPzEh2mUpOEREYtGz09fy\n+PsrqZNgvHHLKQxKbnbkN0WIgkNEJIbsLSnlb9PX8dTHaxic3JR7z+8bU6EBCg4RkZixKCOPX7+3\njK825nFajxaMGzOIlo3qRrus71BwiIjEgFfnbOT+d5bQvGEif756EBed0D7aJR2SgkNEJMqe+3wd\nv526gjN7teLpawaRVK9OtEs6LAWHiEiUzF2/nT9/soaZabkM7dqcp66O/dAABYeISMRtyd/D05+u\n4Y35mTRrUIefnNmdO87uQYPE+PgrOT6qFBGpBkpKy1i9dRfXPDebvKJ9XDa4A/ed35dWSbF3Avxw\nFBwiIhGwKW83t7ycypKsfOokGM9fn8KIvlX3cKVIUnCIiITBnn2lfL4mlyWZeWzZuYf3l26hcG8J\nt57ZnStO7BixKdDDQcEhIlKF3J3sgr1cPX4263ILqWXQKqkuPVo34lcX9OXEzs2jXeIxU3CIiFSR\nPftK+fnrC3l/6RZqGTwwqi8/PLUzdWtHf36pqlQrXB9sZi+YWbaZLS3X9r9mttLMFpvZO2bWtNy2\n+8wszcxWmdm55drPC9rSzOzecNUrInIsiopL+NFL83l/6RZ+cHIyk+84nR8P61btQgPC2+N4EXga\nmFCubRpwn7uXmNkTwH3APWbWDxgD9AfaA/8xs17Be/4CfA/IBOaZ2WR3Xx7GukVEKmzW2lwem7KC\nZZt2AvDE5QO4akhylKsKr7AFh7vPMLMuB7R9VG51NnBFsDwamOjue4H1ZpYGnBRsS3P3dQBmNjHY\nV8EhIlH34hfr+fV7y2nRMJE7zurB8N6tSOkS/+cwjiSa5zhuAl4PljsQCpL9MoM2gIwD2oeGvzQR\nkYPb//jWCV+mM23FVoZ2bc64MYNo26RetEuLmKgEh5k9AJQAr1ThZ44FxgIkJ1fvbqKIRF5+0T7+\nOWcD01flMDd9Oy0aJvKTM7vz07N7xsTDlSIp4sFhZjcAFwIj3N2D5iygU7ndOgZtHKb9W9x9PDAe\nICUlxQ+2j4hIZe0tKeXXk5czeWEWhcWl9GmbxK8u6MsPT+lCYu2wXV8U0yIaHGZ2HnA3cKa7F5Xb\nNBl41cyeJHRyvCcwFzCgp5l1JRQYY4BrIlmziNRcadkFjJ+xjjfmZzJ6YHtuGdadfu0bR7usqAtb\ncJjZa8BwoKWZZQIPEbqKqi4wzcwAZrv7re6+zMzeIHTSuwS43d1Lg8+5A/gQSABecPdl4apZRARg\nd3EpP5owjy/StmEGY4Z04vHLj492WTHDvhktqj5SUlJ8/vz50S5DROLUHz9axZ8/SePu83pzxeCO\ntG5cM058m1mqu6ccaT/dOS4iEpi2fCsvzlrPrLXbuOD4dtw2vEe0S4pJCg4RqfGKikuYuSaX219d\nQLsm9bn1zO7cNrx7tMuKWQoOEamx3J1Za7fxk3+msnNPCR2b1WfyHafRtEFitEuLaQoOEamR9uwr\n5X8/XMXzM9fTOqkuT1x+PKf2aEmT+rH/6NZoU3CISI1TUlrGpX+dxYrNOzmjZ0v+fPUg9TIqQcEh\nIjXO2wsyWbF5J49echxXn5RMQi2LdklxRcEhIjVGSWkZ4z9fx5+mrWZgp6ZcOzSZ4J4yqQQFh4hU\ne6kbtpO6YQevzc1gfW4howa05dFLBig0jpKCQ0SqpWnLt/La3I1k7djNqq0FAAzo0IRnfzCYc/u3\nVWgcAwWHiFQr7s7Lszfw4KRltG1cj15tk7hqSCe+168NHZvVV2BUAQWHiFQbKzbv5M6JX7F66y5O\n6NiEcWMG0aVlw2iXVe0oOESkWtizr5RHpywnPbeI+0f14cdndFPvIkwUHCIS13J37eWdBVk8P3M9\nW3bu4a6RPRk7TNOFhJOCQ0Ti1p59pVzxzCzStxXRt11jHh7dn3P6tYl2WdWegkNE4s6+0jLeW7SJ\nifMySN9WxLgxAxk9sEO0y6oxFBwiElfW5xbyhw9XMWXJZjo0rc+vLuir0IgwBYeIxLyS0jJenJXO\nlCWb+WpjHgA3ntaFBy/spxPgUaDgEJGYVVJaxr8Xb+YPH60ic8duerVpxN3n9eas3q3p0zZJoREl\nCg4RiTnuzow1uTzwzhIyd+ymT9sknvthCiN14jsm1ArXB5vZC2aWbWZLy7U1N7NpZrYm+NksaDcz\ne8rM0sxssZkNLvee64P915jZ9eGqV0Riw+qtBVzy11lc/8Jcatcy/v7DFKb+7AyFRgwJZ4/jReBp\nYEK5tnuBj939cTO7N1i/Bzgf6Bm8hgLPAEPNrDnwEJACOJBqZpPdfUcY6xaRKPhg6WZe+CKdueu3\n07RBHX4zuj+jT+hAkwZ6sFKsCVtwuPsMM+tyQPNoYHiw/BLwGaHgGA1McHcHZptZUzNrF+w7zd23\nA5jZNOA84LVw1S0ikbU0K5//fnMRK7cU0LlFA+45rw9XpnSkRaO60S5NDiHS5zjauPvmYHkLsL/v\n2QHIKLdfZtB2qPbvMLOxwFiA5OTkKixZRMLpsSkryC7Yyy/P7c0tw7pROyFsI+hSRaL2fyjoXXgV\nft54d09x95RWrVpV1ceKSJgs37STO15dwJfrtnH7WT24/aweCo04Eekex1Yza+fum4OhqOygPQvo\nVG6/jkFbFt8Mbe1v/ywCdYpImGzO382Dk5YxbflW6iQY1wxN5tqhGiWIJ5EOjsnA9cDjwc9J5drv\nMLOJhE6O5wfh8iHw2/1XXwHnAPdFuGYROUbuzsy0XF6YuZ4Za3Kpk2DcMqwbPzqjG62SdC4j3oQt\nOMzsNUK9hZZmlkno6qjHgTfM7GZgA3BlsPtUYBSQBhQBNwK4+3YzewSYF+z3m/0nykUkPizKyOPR\nKcuZl76Dlo0Sue7kztx4Whc6t9BzMuKVhU41VC8pKSk+f/78aJchUuOlbtjBFc/OonYt42dn9+TH\nw7pRr05CtMuSQzCzVHdPOdJ+unNcRKpcem4hz81cx9QlW2iYWJvPfjmclrq8ttpQcIhIldmUt5tf\nvbuUGatzqJ1gjOjbhptO66LQqGYUHCJSJXbtLeGWl1NZkpXPTad1ZeywbrRtUi/aZUkYKDhE5Jjl\nFRXz5LTVLMnK5+7zenPb8B7RLknCqMLBYWYN3L0onMWISHzJ3bWXCbPS+etnaykpcy4b1EGhUQMc\nMTjM7FTgOaARkGxmJwC3uPtt4S5ORGLT8k07+d37K/hy7TZKypxhvVpx46ldOKNny2iXJhFQkR7H\nn4BzCd2kh7svMrNhYa1KRGLWG/MzuOftxTSpX4cfD+vGOf3acELHptSqpYcq1RQVGqpy94wDnrRV\nGp5yRCTWlJU5a7J3sXxzPtNX5fDuwk30b9+Yl28eSvOGidEuT6KgIsGREQxXuZnVAe4EVoS3LBGJ\nBYsz87hz4kLW5xYC0DAxgatSOvHri/tTP1E38tVUFQmOW4FxhKYzzwI+Am4PZ1EiEj1lZc70NTl8\nvjqXt1IzcOChi/pxcrcW9GqTRIKGpGq8IwaHu+cC10agFhGJorTsAp74YBWpG3awvbCYxNq1OLNX\nK+4f1ZeuLTWvlHyjIldVdQV+CnQpv7+7Xxy+skQkUrIL9vD41JW8uzCL+nUSOH9AO87o2ZJz+rXV\ncJQcVEWGqt4FngfeA8rCW46IRFLh3hK+/+yXbM7fw6WDOnLP+b1pnaS7veXwKhIce9z9qbBXIiIR\nU1rmPDZlBW/Mz2DX3hIeu/Q4rh3aOdplSZyoSHCMM7OHCJ0U37u/0d0XhK0qEQkLd+eTldn8bfo6\n5qZv54Lj23HpwA6c1ad1tEuTOFKR4BgAXAeczTdDVR6si0iccHcenLSMl2dvoHnDRP77nF7cflYP\nDrhHS+SIKhIc3we6uXtxuIsRkfD540ereXn2Bn5wcjL3nd+XhnU1x6kcnVoV2Gcp0DTchYhI+Ly/\nZDNPf5rGmCGdeGT0cQoNOSYV+fY0BVaa2Ty+fY7jqC/HNbOfAz8iNOS1hNAzxtsBE4EWQCpwnbsX\nm1ldYAJwIrANuMrd04/22CI1SUlpGa/O3ciDk5bRpnFdfn1xfw1NyTGrSHA8VJUHNLMOwM+Afu6+\n28zeAMYAo4A/uftEM3sWuBl4Jvi5w917mNkY4AngqqqsSaQ6WrYpn1+8vohVWwsY2rU5T141UM/7\nlipRkTvHp4fpuPXNbB/QANhM6GT7NcH2l4BfEwqO0cEywFvA02Zm7u5hqEukWpixOoebX5qHYfzP\nhf247uTOJNauyMi0yJEdMjjMbKa7n25mBYSGlL7eBLi7Nz6aA7p7lpn9AdgI7CZ0mW8qkOfuJcFu\nmYTmxiL4mRG8t8TM8gkNZ+UezfFFqrtnp6/lyY9W07ZJPV6+aShdNF2IVLHD9TjOAnD3pKo8oJk1\nI9SL6ArkAW8C51XB544FxgIkJycf68eJxKVFGXk8/v5KzunXhkcuOY42jXUXuFS9w/Vd54TpmCOB\n9e6e4+77gH8BpwFNzWx/kHUkNBMvwc9OAMH2JoROkn+Lu4939xR3T2nVqlWYSheJTZk7inhh5nru\neXsxdWvX4o9XnqDQkLA5XI8jXJdebARONrMGhIaqRgDzgU+BKwhdWXU9MCnYf3Kw/mWw/ROd35Ca\nLitvN+8v2czqrQUsyshn1dYCAHq3SeK3lw4gqV6dKFco1dnhgqOVmf3iUBvd/cmjOaC7zzGzt4AF\nQAnwFTAemAJMNLNHg7bng7c8D7xsZmnAdkJXYInUSFvy9zBjdQ7/+9Eqcgr20rJRXfq2S+KKEzsy\nsl8bTX8uEXG44EgAGhGGnoe7P8R3L/NdB5x0kH33ELp7XaTG+mTlVp79bB3zNmzHHbq3asjff5jC\nwE66N1ci73DBsdndfxOxSkTkoHJ37eX2V76iVVJd7hrRi7P6tKJfu8bUTtDltRId0TjHISIVsDgz\nj6825vHR8i3sLSnlHzcOoXurRtEuS+SwwTEiYlWIyLf8fcY6Hpu6AoAm9etw54heCg2JGYcMDnff\nHslCRATyiop5b9Em/vDRKs7s1YonLj+eNo3ran4piSmaIlMkRjw5bTXjZ6xlz74yUjo348krT6BF\no7rRLkvkOxQcIlG2o7CYpz5Zwz++SOfEzs146KJ+DOjQRL0MiVmHm6vqwDmqvt7EMcxVJSIhOQV7\nmb46h0enLGfn7n1cfVIyD17Yj/qJmsFWYtvhznFU6RxVIgJFxSV8uGwLizLyeWN+BkXFpRzXoTF/\nHHsKvdvqj5zEhwoPVZlZa+DryW/cfWNYKhKppuas28b97yxhbU4hDRIT6N02iTtH9OS0Hi2po3sy\nJI4cMTjM7GLgj0B7IBvoDKwA+oe3NJH4l12wh5lrcvl0VQ7vLdpEUt3a/OOGIQzv3UrnMCRuVaTH\n8QhwMvAfdx9kZmcBPwhvWSLxa3thMZ+vyWHu+u28NncjZQ4NEhO45cxu3DKsO80bJka7RJFjUpHg\n2Ofu28yslpnVcvdPzez/wl6ZSBzZs6+UV+Zs5LNV2SzMyKNgTwmJtWtxycAO3HxGV/q0bUxCLfUw\npHqoSHDkmVkjYAbwipllA4XhLUsk9pWUlrFqawHvL9nCvxdvIn1bEb3bJDGiT2uuGpLM4M5NqVtb\nV0hJ9VOR4BhN6LkZPweuJfQgJU1+KDWWu5NdsJebXpzHsk07Sahl9GqTxCOXHMd1J3eOdnkiYVeR\n4LgFeN3ds4CXwlyPSMwqLXMem7KCN1MzKNhTghk8dFE/RvZtQ6fmDaJdnkjEVCQ4koCPzGw78Drw\nprtvDW9ZIrHD3VmwcQe/fGsx63IKOa9/W07s3Iz+HRpzaveW0S5PJOKOGBzu/jDwsJkdD1wFTDez\nTHcfGfbqRKIsdcMO7nl7MWnZu2idVJe/XDOYUQPa6lJaqdEqM1dVNrAF2Aa0Dk85IrFjXvp27pq4\nkM35u7nnvD5cNaSTLqUVoWI3AN4GXAm0At4Efuzuy8NdmEi0bN25h7vfWsz01Tm0bVyPN289hRM7\nN492WSIxoyI9jk7AXe6+sKoOamZNgeeA4whNpHgTsIrQOZQuQDpwpbvvsNCYwDhgFFAE3ODuC6qq\nFpH9/rN8Ky/OSmd9biFZebu5a2RPxg7rRoNETSItUt4hJ8gxs/2z3/4vsNHMmpd/HeNxxwEfuHsf\n4ARCU5jcC3zs7j2Bj4N1gPOBnsFrLPDMMR5b5Dt2FBbz0ORlrNpaQM82jXjq6kHcNbKXQkPkIA73\np+JV4EIglVCvoPzZQAe6Hc0BzawJMAy4AcDdi4FiMxsNDA92ewn4DLiH0H0kE9zdgdlm1tTM2rn7\n5qM5vkh5G7YVMmnhJv45ewN5Rft48cYhnNpDV0qJHM7hplW/MBgmOrOKZ8LtCuQA/zCzEwgF051A\nm3JhsAVoEyx3ADLKvT8zaFNwyFHL2F7EL95YyLz0HQAc16Exz18/hAEdm0S5MpHYd9h+uLu7mU0B\nBlTxMQcDP3X3OWY2jm+Gpcof92APkTokMxtLaCiL5OTkqqpVqpEN2wr514Is1uUWMmN1DgV79nHn\niJ5cNrgDnVs0jHZ5InGjIgO4C8xsiLvPq6JjZgKZ7j4nWH+LUHBs3T8EZWbtCF3+C5BF6AT9fh2D\ntm9x9/HAeICUlJRKhY5Ufxu3FXHRn2dSsLeETs0aMKxXK249sxv926uHIVJZFQmOocC1ZraB0OSG\n+x8de/zRHNDdt5hZhpn1dvdVwAhgefC6Hng8+DkpeMtk4A4zmxjUkq/zG1JRZWXOi7PS+fvn6wD4\n5L+G07Wlehcix6IiwXFuGI77U0Iz7SYC64AbCV3h9YaZ3QxsIHTvCMBUQpfiphG6HPfGMNQj1Yy7\nk7ljN+98lcWT01YzpEsz7j2/r0JDpAocNjjMLAH4MLhstsoE94SkHGTTiIPs68DtVXl8qb7W5ezi\nkX8v56uMPPKK9gGhE99v3HKKpgkRqSJHOjleamarzCxZzxiXWLYpbze/eW85M9bkULuWMWpAOwZ0\nbEK7JvUY0qW5QkOkClVkqKoZsMzM5lLuAU7ufnHYqhI5AndnTfYuZqXlsjAjjylLNlPLjMsGd2DM\nkGRO6NQ02iWKVFsVCY7/CXsVIpXwz9kb+P0HK9m5pwSAVkl1ueiE9vx8ZC89F0MkAioyrfr08utm\ndjpwNTD94O8QCZ99pWX8/oOVtG1Sjwcu6MrJ3VroHgyRCKvQRDxmNgi4Bvg+sB54O5xFiRzKxLkb\n2bmnhD9d1YcRfdsc+Q0iUuUOGRxm1otQz+JqIJfQzLXm7mdFqDaRr7k7/5yzkUemrODMXq04q7ce\nCSMSLYfrcawEPgcudPc0ADP7eUSqEilnc/5u7n5rMZ+vyeWMni158soTqFVLV0mJRMvhguMyYAzw\nqZl9AEzk2zPkioTVyi07+cfMdCYtyqK4pIybTuvKAxf0JUGhIRJVh5sd913gXTNrSGhq87uA1mb2\nDPCOu38UoRqlBlqalc+1z82huKSM/u2b8Nilx9GnbeMjv1FEwq4iV1UVEno2x6tm1ozQCfJ7AAWH\nhM3D7y0joZbx4V3DSG6hS2xFYskhnwB4MO6+w93Hu/t3pgYRqQruztupmcxL38EVJ3ZUaIjEID0X\nU2JCcUkZn6zM5m8z1vLVxjzMYKQutxWJSQoOiZqyMictZxcz1+Ty8uwNrM8tpEXDRO4a2ZPbz+pB\nnYRKdYhFJEIUHBIVhXtLuPWfqXy+JheA/u0b87frTuTsPq0VGCIxTsEhEbevtIwx42ezJCufG07t\nwiWDOnBCxyaawVYkTig4JOKe+ngNS7LyeezS47jmpGQFhkicUXBI2O3ZV8onK7N5+csNrM3ZRXbB\nXi4Z2F6hIRKnFBwSVvm793HTi/NI3bCDxvVqM7JvGzo1b8DtZ/VQaIjEKQWHhEVadgHvfJXFK3M2\nkle0j7vP6821QzvTpH6daJcmIscoasERPM98PpDl7heaWVdC82G1AFKB69y92MzqAhOAE4FtwFXu\nnh6lsqUC3v0qi3v/tZg9+8o4q3crfjaiJ4OSm0W7LBGpItHscdwJrAD2T0D0BPAnd59oZs8CNwPP\nBD93uHsPMxsT7HdVNAqWQ9u1t4TX52WQumE7U5dsoX/7xjz7gxP1RD6RaigqF8ybWUfgAuC5YN2A\ns4G3gl1eAi4JlkcH6wTbR5gGx2PKjNU5nPTYf3jk38uZn76DywZ34OWbhyo0RKqpaPU4/g+4G0gK\n1lsAee5eEqxnAh2C5Q5ABoC7l5hZfrB/bvkPNLOxwFiA5OTksBYvIXv2lbJm6y4ef38ljerW5h83\nDGFotxbRLktEwiziwWFmFwLZ7p5qZsOr6nPdfTwwHiAlJcWr6nPl4FZu2cmN/5jH5vw9ADxx+QCF\nhkgNEY0ex2nAxWY2CqhH6BzHOKCpmdUOeh0dgaxg/yygE5BpZrWBJoROkksUuDufrMzmJ/9cQFK9\n2owbM5C+7RrTq03Skd8sItVCxIPD3e8D7gMIehz/7e7XmtmbwBWErqy6HpgUvGVysP5lsP0Td1eP\nIgrmrt/OPW8vZn1uIV1bNuSlG0/StOciNVAs3cdxDzDRzB4FvgKeD9qfB142szRgO6HH2UqE7C4u\n5YUv1vPirHR2FBbTpH4dHhndn4sHdtA9GSI1VFSDw90/Az4LltcBJx1knz2EnjooETZl8WbufmsR\nhcWlDOzUlEsHdWDMkE50a9Uo2qWJSBTFUo9DYoC7M3XJFl74Yj2pG3YwsFNT7jmvD6d014lvEQlR\ncMjX1mwt4KHJy5i1dhs9Wjfi5yN7cePpXWhcT0NSIvINBYewPreQx6Ys57NVOTRITOCR0f25Zmhn\nEmrpPksR+S4FRw1WVuZMWpTFY1NWsru4hGuGJnPniJ60aFQ32qWJSAxTcNRgv/9wFc9OX0uftkn8\n8coh9G/fJNoliUgcUHDUQEXFJUz4cgPPTl/LZYM68Ifvn0AtDUuJSAUpOGqYqUs288A7S9hRtI9T\nurXg8cuPV2iISKUoOGoAd+fzNbks37yTcf9ZQ4/WjXj88h6c2asVibWjMkGyiMQxBUc1tq+0jA+W\nbuHZ6WtZtmknAN1aNeSv1w7WlOcictQUHNXUksx87n57MSs276RT8/r8/vLjOfe4tjSuV1vP+haR\nY6LgqEZSN+zg7QWZzF2/nbTsXbROqsu4MQM5t39b6tVJiHZ5IlJNKDiqid9/sJK/fraWxIRaDO3W\nnCtTOnLVkGRNRCgiVU7BUQ18uXYbz0xfyzn92vC7ywboBj4RCStdUhPn3J1fvLGQhom1efSS4xQa\nIhJ2Co44VlbmPDhpGZvz9/DgRf1o3bhetEsSkRpAQ1VxanthMT+eMJ/UDTs4uVtzRg1oF+2SRKSG\nUHDEmYztRbwyZyOvzNlAcUkZ/3NhP354SmfqJKjzKCKRoeCII6/O2civ31tGcUkZw3u34qdn9+TE\nzs2iXZaI1DARDw4z6wRMANoADox393Fm1hx4HegCpANXuvsOC92tNg4YBRQBN7j7gkjXHS1lZc60\nFVv5cNkW/rUgi77tGvPoJcf+VaU9AAAMWUlEQVQpMEQkaqLR4ygB/svdF5hZEpBqZtOAG4CP3f1x\nM7sXuBe4Bzgf6Bm8hgLPBD+rtcK9JXy4bAvPfLaWNdm7SEyoxdUndeKR0cdRW8NSIhJFEQ8Od98M\nbA6WC8xsBdABGA0MD3Z7CfiMUHCMBia4uwOzzaypmbULPqda2ltSygVPfU76tiJ6t0li3JiBXHh8\nez2RT0RiQlTPcZhZF2AQMAdoUy4MthAayoJQqGSUe1tm0FZtg+O5z9eTvq2I+0f14Uend9O05yIS\nU6IWHGbWCHgbuMvdd5afeM/d3cy8kp83FhgLkJycXJWlRsTu4lKen7mOD5ZtYWnWTgYnN+XHZ3TT\nhIQiEnOiEhxmVodQaLzi7v8KmrfuH4Iys3ZAdtCeBXQq9/aOQdu3uPt4YDxASkpKpUInmnbtLWHm\nmlz+Z9JScgr2Mii5KXeN7MmNp3ZVaIhITIrGVVUGPA+scPcny22aDFwPPB78nFSu/Q4zm0jopHh+\ndTi/UVrm/Oy1r/hw2RZKypwGiQlMuOkkhvVqFe3SREQOKxo9jtOA64AlZrYwaLufUGC8YWY3AxuA\nK4NtUwldiptG6HLcGyNbbtUrK3N+O3UFU5Zs5tJBHbhkUAf6tkuidZKmDBGR2BeNq6pmAocagxlx\nkP0duD2sRUVQaZlz1+sLeW/RJq4ZmsxjlxynISkRiSu6czwCtu7cw5LMfBZn5TNn3TbmrN/OL8/t\nze1n9Yh2aSIilabgCJPdxaV8uS6XcR+nsSgjD4BaBj1aN+LOET25bXj3KFcoInJ0FBxVrKzM+eVb\ni3lv8SaKS8polVSX+0f1YXByM/q1b0yDRP0nF5H4pr/FqsjanF1s3FbE8zPXMzMtl8sGd2D0wA4M\n7dpcz/sWkWpFwXGMdhQWc9srC/hy3TYAEmvX4oZTu/CrC/pqTikRqZYUHEdpcWYe9/1rCcs27SSh\nlvHAqL4MTG5K77ZJNK5XJ9rliYiEjYKjEmatzWXG6lw+X5PDsk07aVK/DrcN787pPVtyaveW0S5P\nRCQiFBwVsGdfKbe8nMr01TnUSTD6tG3Mgxf244qUjupdiEiNo+A4gk9XZjPhy3Smr87h1jO7c9fI\nnjrZLSI1moLjEIqKS3h48nJen59By0aJ3Da8O788t7fu8haRGk/BcRC5u/Zy9fjZpOXs4vazuvPz\nkb10hZSISEDBcYCcgr384o2FpG8r5KUbNVutiMiBFBzlrNpSwG2vpLI2p5BHLjlOoSEichAKDkLz\nSj02dTmvzc0gwYw/Xz2Ii05oH+2yRERiUo0OjrIyZ176dp74YCULNuZxwfHt+M3F/WnRqG60SxMR\niVk1Njg25e3mrtcXMnf9durVqcW95/fh1jM1Y62IyJHUuODYunMPN780j6VZO6lfJ4FHRvfnwuPb\n06xhYrRLExGJCzUqOJZm5XPji/PYtmsvPz27B1emdKJT8wbRLktEJK7UiOBwdx5+bzkvzkonqV5t\nXvnRyZzSvUW0yxIRiUtxExxmdh4wDkgAnnP3x4/0niWZ+bwyZwMfLtvCjqJ9fP/EjjxwQV+aNtCw\nlIjI0YqL4DCzBOAvwPeATGCemU129+WHes+arQVc8tcvKC1zLhvUgcGdm3FlSicSa+sOcBGRYxEX\nwQGcBKS5+zoAM5sIjAYOGhyrthZwzv/NoEGdBP79szPo2rJhBEsVEane4iU4OgAZ5dYzgaHldzCz\nscBYgMbtu3H78B5cMqi9QkNEpIrFS3AckbuPB8YDpKSk+H+f2zvKFYmIVE/xMuCfBXQqt94xaBMR\nkQiLl+CYB/Q0s65mlgiMASZHuSYRkRopLoaq3L3EzO4APiR0Oe4L7r4symWJiNRIcREcAO4+FZga\n7TpERGq6eBmqEhGRGKHgEBGRSlFwiIhIpSg4RESkUszdo11DlTOzAmBVtOs4Ci2B3GgXcRTitW6I\n39pVd2TVlLo7u3urI+0UN1dVVdIqd0+JdhGVZWbzVXdkxWvtqjuyVPe3aahKREQqRcEhIiKVUl2D\nY3y0CzhKqjvy4rV21R1ZqrucanlyXEREwqe69jhERCRMqlVwmNl5ZrbKzNLM7N5o13MgM3vBzLLN\nbGm5tuZmNs3M1gQ/mwXtZmZPBb/LYjMbHMW6O5nZp2a23MyWmdmd8VC7mdUzs7lmtiio++GgvauZ\nzQnqez2YcRkzqxuspwXbu0Sj7nL1J5jZV2b273ip28zSzWyJmS00s/lBW0x/T4JamprZW2a20sxW\nmNkpcVJ37+C/9f7XTjO7K+y1u3u1eBGaNXct0A1IBBYB/aJd1wE1DgMGA0vLtf0euDdYvhd4Ilge\nBbwPGHAyMCeKdbcDBgfLScBqoF+s1x4cv1GwXAeYE9TzBjAmaH8W+EmwfBvwbLA8Bng9yt+XXwCv\nAv8O1mO+biAdaHlAW0x/T4JaXgJ+FCwnAk3joe4DfocEYAvQOdy1R/2XrcL/aKcAH5Zbvw+4L9p1\nHaTOLgcExyqgXbDcjtA9KAB/A64+2H7RfgGTgO/FU+1AA2ABoUcO5wK1D/zeEJq2/5RguXawn0Wp\n3o7Ax8DZwL+DP+jxUPfBgiOmvydAE2D9gf/NYr3ug/we5wBfRKL26jRUdbDnkneIUi2V0cbdNwfL\nW4A2wXJM/j7BMMggQv96j/nag+GehUA2MI1QrzTP3UsOUtvXdQfb84EWka34a/8H3A2UBestiI+6\nHfjIzFLNbGzQFuvfk65ADvCPYGjwOTNrSOzXfaAxwGvBclhrr07BEfc89E+AmL3MzcwaAW8Dd7n7\nzvLbYrV2dy9194GE/gV/EtAnyiUdkZldCGS7e2q0azkKp7v7YOB84HYzG1Z+Y4x+T2oTGkJ+xt0H\nAYWEhne+FqN1fy0433Ux8OaB28JRe3UKjnh9LvlWM2sHEPzMDtpj6vcxszqEQuMVd/9X0BwXtQO4\nex7wKaEhnqZmtn+6nfK1fV13sL0JsC3CpQKcBlxsZunARELDVeOI/bpx96zgZzbwDqGwjvXvSSaQ\n6e5zgvW3CAVJrNdd3vnAAnffGqyHtfbqFBzx+lzyycD1wfL1hM4f7G//YXAVxMlAfrmuZ0SZmQHP\nAyvc/clym2K6djNrZWZNg+X6hM7LrCAUIFcEux1Y9/7f5wrgk+BfaxHl7ve5e0d370Loe/yJu19L\njNdtZg3NLGn/MqEx96XE+PfE3bcAGWbWO2gaASwnxus+wNV8M0wF4a492id0qvjk0ChCV/ysBR6I\ndj0Hqe81YDOwj9C/cm4mNBb9MbAG+A/QPNjXgL8Ev8sSICWKdZ9OqKu7GFgYvEbFeu3A8cBXQd1L\ngQeD9m7AXCCNUNe+btBeL1hPC7Z3i4HvzHC+uaoqpusO6lsUvJbt/zMY69+ToJaBwPzgu/Iu0Cwe\n6g7qaUioh9mkXFtYa9ed4yIiUinVaahKREQiQMEhIiKVouAQEZFKUXCIiEilKDhERKRSFBwiBzCz\n0mCm0aVm9qaZNTjC/vcfsD7rGI59g5m1P8S2F83simD5MwvNBL04mNH16f33rIiEm4JD5Lt2u/tA\ndz8OKAZuPcL+3woOdz/1GI59A3DQ4DiIa939eEL3q+zlm5u8RMJKwSFyeJ8DPQDM7N1g8r5l+yfw\nM7PHgfpBD+WVoG3X/jeb2S/NbF7QM9j/PJAuFnrmw9+Dz/rIzOoHvYkU4JXg8+pXpEB3LyY0IWKy\nmZ1Qlb+8yMEoOEQOIZj36XxCd9gC3OTuJxL6y/1nZtbC3e/lmx7KtQe8/xygJ6H5mgYCJ5ab9K8n\n8Bd37w/kAZe7+1uE7l6+Nvi83RWt1d1LCd2xHfOTOEr8q33kXURqnPrBVOwQ6nE8Hyz/zMwuDZY7\nEfrL/3CTCZ4TvL4K1hsF79kIrHf3/cdIJfSclmNlVfAZIkek4BD5rt0emor9a2Y2HBhJ6IFJRWb2\nGaE5og7HgN+5+98O+KwuhM5J7FcKVGhY6pAHMksABhCaxFEkrDRUJVIxTYAdQWj0IfTYzf32BdPO\nH+hD4KbgOSaYWQcza32E4xQQejxvhQXH/h2Q4e6LK/NekaOhHodIxXwA3GpmKwg9bnN2uW3jgcVm\ntqD8eQ53/8jM+gJfhmamZxfwA0I9jEN5EXjWzHYT6t0c7jzHK2a2F6hLaAbU0ZX/tUQqT7PjiohI\npWioSkREKkXBISIilaLgEBGRSlFwiIhIpSg4RESkUhQcIiJSKQoOERGpFAWHiIhUyv8DwqGYV6Tg\nZSsAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "env = simpy.Environment()\n", "\n", "log = []\n", "\n", "# define a python generator describing the arrival of a new patient\n", "def patient_arrival(env, rate):\n", " n = 0\n", " while True:\n", " yield env.timeout(random.expovariate(rate))\n", " n = n + 1\n", " log.append([n, env.now, 'Arrival'])\n", "\n", "# perform a simulation with simpy\n", "env.process(patient_arrival(env, 0.5))\n", "env.run(until=1440)\n", "\n", "# converting the log to a Pandas DataFrame and plotting the results\n", "df = pd.DataFrame(log, columns=['Patient ID', 'Time', 'Event']).set_index('Patient ID')\n", "ax = df['Time'].plot()\n", "ax.set_ylabel('Arrival Time')" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "j8m-oxbdD44X" }, "source": [ "## Version 5. Modeling the emergency room queue and service providers\n", "\n", "The next step in this simulation is to model the emergency room queue and hospital service providers. For the emergency room queue we use the [simpy.Stores](https://simpy.readthedocs.io/en/latest/topical_guides/resources.html#stores) object. A Stores object has a `.put()` method the adds a Python object to the queue, and `.get()` method to remove Python objects from the queue. The queue operates in FIFO mode (first-in, first-out) and, by default, with infinite capacity.\n", "\n", "We model the actual service as taking a fixed period." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 518 }, "colab_type": "code", "executionInfo": { "elapsed": 720, "status": "ok", "timestamp": 1567170997070, "user": { "displayName": "Jeffrey Kantor", "photoUrl": "https://lh3.googleusercontent.com/a-/AAuE7mAnl92hB5egoXgR-yAmEJN-i3LA_Jwcr3-0236SZg=s64", "userId": "09038942003589296665" }, "user_tz": 240 }, "id": "xYC-XT_EELiI", "outputId": "e7a34682-ca24-4674-ef7c-e49b5be4342b" }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EventArrivalService FinishedService Start
Patient ID
11.66395311.6639531.663953
24.34906621.66395311.663953
35.72380031.66395321.663953
414.94354741.66395331.663953
515.82323551.66395341.663953
\n", "
" ], "text/plain": [ "Event Arrival Service Finished Service Start\n", "Patient ID \n", "1 1.663953 11.663953 1.663953\n", "2 4.349066 21.663953 11.663953\n", "3 5.723800 31.663953 21.663953\n", "4 14.943547 41.663953 31.663953\n", "5 15.823235 51.663953 41.663953" ] }, "metadata": { "tags": [] }, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 18, "metadata": { "tags": [] }, "output_type": "execute_result" }, { "data": { "image/png": "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\nrkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "env = simpy.Environment()\n", "emergency_room_queue = simpy.Store(env)\n", "\n", "log = []\n", "\n", "# define a python generator describing the arrival of a new patient\n", "def patient_arrival(env, rate):\n", " n = 0\n", " while True:\n", " yield env.timeout(random.expovariate(rate))\n", " n = n + 1\n", " yield emergency_room_queue.put(n)\n", " log.append([n, env.now, 'Arrival'])\n", " \n", "def patient_service(env, tservice):\n", " while True:\n", " n = yield emergency_room_queue.get()\n", " log.append([n, env.now, 'Service Start'])\n", " yield env.timeout(tservice)\n", " log.append([n, env.now, 'Service Finished'])\n", "\n", "# perform a simulation with simpy\n", "env.process(patient_arrival(env, 0.5))\n", "env.process(patient_service(env, 10))\n", "env.run(until=1440)\n", "\n", "# converting the log to a Pandas DataFrame and plotting the results\n", "df = pd.DataFrame(log, columns=['Patient ID', 'Time', 'Event']).set_index('Patient ID')\n", "df = df.pivot(columns='Event', values='Time')\n", "display(df.head())\n", "df.plot()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "Ondy9t21rH01" }, "source": [ "## Version 6. How many service providers are required?\n", "\n", "From the plot above, it is clear that one service provider who takes ten minutes to treat each patient cannot keep up when patients are arriving, on average, every two minutes. We need more service providers. Let's add six and see what happens." ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 518 }, "colab_type": "code", "executionInfo": { "elapsed": 736, "status": "ok", "timestamp": 1567178707156, "user": { "displayName": "Jeffrey Kantor", "photoUrl": "https://lh3.googleusercontent.com/a-/AAuE7mAnl92hB5egoXgR-yAmEJN-i3LA_Jwcr3-0236SZg=s64", "userId": "09038942003589296665" }, "user_tz": 240 }, "id": "W21uIdKkvLJU", "outputId": "048cb899-91d0-44c0-a641-eb71c69ad18e" }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EventArrivalService FinishedService Start
Patient ID
10.92698110.9269810.926981
22.46948612.4694862.469486
37.71350917.7135097.713509
410.03933020.03933010.039330
510.30316520.30316510.303165
\n", "
" ], "text/plain": [ "Event Arrival Service Finished Service Start\n", "Patient ID \n", "1 0.926981 10.926981 0.926981\n", "2 2.469486 12.469486 2.469486\n", "3 7.713509 17.713509 7.713509\n", "4 10.039330 20.039330 10.039330\n", "5 10.303165 20.303165 10.303165" ] }, "metadata": { "tags": [] }, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 44, "metadata": { "tags": [] }, "output_type": "execute_result" }, { "data": { "image/png": "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\nAfyfDfdlKgAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "env = simpy.Environment()\n", "emergency_room_queue = simpy.Store(env)\n", "\n", "log = []\n", "\n", "# define a python generator describing the arrival of a new patient\n", "def patient_arrival(env, rate):\n", " n = 0\n", " while True:\n", " yield env.timeout(random.expovariate(rate))\n", " n = n + 1\n", " yield emergency_room_queue.put(n)\n", " log.append([n, env.now, 'Arrival'])\n", " \n", "def patient_service(env, tservice):\n", " while True:\n", " n = yield emergency_room_queue.get()\n", " log.append([n, env.now, 'Service Start'])\n", " yield env.timeout(tservice)\n", " log.append([n, env.now, 'Service Finished'])\n", "\n", "# perform a simulation with simpy\n", "env.process(patient_arrival(env, 0.5))\n", "\n", "env.process(patient_service(env, 10))\n", "env.process(patient_service(env, 10))\n", "env.process(patient_service(env, 10))\n", "env.process(patient_service(env, 10))\n", "env.process(patient_service(env, 10))\n", "env.process(patient_service(env, 10))\n", "\n", "env.run(until=1440)\n", "\n", "# converting the log to a Pandas DataFrame and plotting the results\n", "df = pd.DataFrame(log, columns=['Patient ID', 'Time', 'Event']).set_index('Patient ID')\n", "df = df.pivot(columns='Event', values='Time')\n", "display(df.head())\n", "df.plot()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "q-A9bwD1vVen" }, "source": [ "### Calculating and plotting wait times\n", "\n", "With six service providers we now see that patient queue doen't grow indefinitely. Let's look at this in a little more detail by taking a look at how long patients wait for before receiving service." ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 235 }, "colab_type": "code", "executionInfo": { "elapsed": 338, "status": "ok", "timestamp": 1567178710885, "user": { "displayName": "Jeffrey Kantor", "photoUrl": "https://lh3.googleusercontent.com/a-/AAuE7mAnl92hB5egoXgR-yAmEJN-i3LA_Jwcr3-0236SZg=s64", "userId": "09038942003589296665" }, "user_tz": 240 }, "id": "1d_wttU7UqiD", "outputId": "fe48afbe-1a73-4fdd-9123-abe2ee2ee3bf" }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EventArrivalService FinishedService Start
Patient ID
10.92698110.9269810.926981
22.46948612.4694862.469486
37.71350917.7135097.713509
410.03933020.03933010.039330
510.30316520.30316510.303165
\n", "
" ], "text/plain": [ "Event Arrival Service Finished Service Start\n", "Patient ID \n", "1 0.926981 10.926981 0.926981\n", "2 2.469486 12.469486 2.469486\n", "3 7.713509 17.713509 7.713509\n", "4 10.039330 20.039330 10.039330\n", "5 10.303165 20.303165 10.303165" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "display(df.head())" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 312 }, "colab_type": "code", "executionInfo": { "elapsed": 736, "status": "ok", "timestamp": 1567178712117, "user": { "displayName": "Jeffrey Kantor", "photoUrl": "https://lh3.googleusercontent.com/a-/AAuE7mAnl92hB5egoXgR-yAmEJN-i3LA_Jwcr3-0236SZg=s64", "userId": "09038942003589296665" }, "user_tz": 240 }, "id": "BjrXzYTgwBMf", "outputId": "158b1a93-7894-4b9c-f3cd-536e9167336a" }, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Average Waiting Time = 4.192847877217444 minutes')" ] }, "execution_count": 46, "metadata": { "tags": [] }, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "df['Wait Time'] = df['Service Start'] - df['Arrival']\n", "ax = df['Wait Time'].plot()\n", "plt.title('Average Waiting Time = ' + str(df['Wait Time'].mean()) + ' minutes')" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "mrPi-MYxIzIy" }, "source": [ "### Histogram of wait times\n", "\n", "A histogram of wait times provides important insights into the quality of the services being provided by the hospital." ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 286 }, "colab_type": "code", "executionInfo": { "elapsed": 543, "status": "ok", "timestamp": 1567178714054, "user": { "displayName": "Jeffrey Kantor", "photoUrl": "https://lh3.googleusercontent.com/a-/AAuE7mAnl92hB5egoXgR-yAmEJN-i3LA_Jwcr3-0236SZg=s64", "userId": "09038942003589296665" }, "user_tz": 240 }, "id": "JIOhqs7VHkFR", "outputId": "ce2af5c3-43da-4569-8a8d-a1270c607b23" }, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, 'Count')" ] }, "execution_count": 47, "metadata": { "tags": [] }, "output_type": "execute_result" }, { "data": { "image/png": "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\nRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "ax = df['Wait Time'].hist(bins=30)\n", "ax.set_ylabel('Count')" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "ys2epbnVJWgE" }, "source": [ "## Exercise: Further model development\n", "\n", "Copy and paste Version 6 of the model into following code cell. Then modify the model to incorporate the following features. Insert additional code cells as needed to complete this exercise.\n", "\n", "a. The model developed above assumes all emergency room services take the same amount of time. Obviously this is a poor assumption. Change the model so that the (i) the service time is uniformly random number between 5 and 15 minutes, and (ii) after the service to the patient is finished, there is an additional timeout of 5 minutes to allow for medical record keeping and transition to the next patient.\n", "\n", "b. Change the data logging so that each time a patient is added or removed from the queue both the time and the length of the resulting queue are logged. You will want to use the Python expression `len(emergency_room_queue.items)` to determine the number of items in the queue.\n", "\n", "c. Determine the minimum number of service providers needed to keep the length of the queue finite. Given that number of service providers, determine the average wait time before a patient receives service, and the average length of the emergency room queue. Plot time histories and histograms for both performance indicators.\n", "\n", "d. Using the data from (c.), determine if Little's law is satisfied for this simulation." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": {}, "colab_type": "code", "id": "0MmL0QrgBqma" }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [Queuing Systems](http://nbviewer.jupyter.org/github/jckantor/CBE40455/blob/master/notebooks/02.02-Queuing-Systems.ipynb) | [Contents](toc.ipynb) | [Model Development in SimPy](http://nbviewer.jupyter.org/github/jckantor/CBE40455/blob/master/notebooks/02.04-Discrete-Event-Simulation-of-a-Batch-Process.ipynb) >

\"Open

\"Download\"" ] } ], "metadata": { "colab": { "collapsed_sections": [], "name": "Emergency_Room_Simulation.ipynb", "provenance": [], "toc_visible": true, "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.4" } }, "nbformat": 4, "nbformat_minor": 4 }