{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "*This notebook contains material from [CBE40455-2020](https://jckantor.github.io/CBE40455-2020);\n", "content is available [on Github](https://github.com/jckantor/CBE40455-2020.git).*\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [3.6 Simulating Queuing Systems](https://jckantor.github.io/CBE40455-2020/03.06-Queuing-Systems-and-Poisson-Processes.html) | [Contents](toc.html) | [3.8 Modeling and Simulation of a Grocery Store Checkout Operation](https://jckantor.github.io/CBE40455-2020/03.08-Modeling-and-Simulation-of-a-Grocery-Store-Checkout-Operation.html) >
"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 1,
"link": "[3.7 Simulating Queuing Systems](https://jckantor.github.io/CBE40455-2020/03.07-Simulating-Queuing-Systems.html#3.7-Simulating-Queuing-Systems)",
"section": "3.7 Simulating Queuing Systems"
}
},
"source": [
"# 3.7 Simulating Queuing Systems"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 2,
"link": "[3.7.1 Kendall notation for queues](https://jckantor.github.io/CBE40455-2020/03.07-Simulating-Queuing-Systems.html#3.7.1-Kendall-notation-for-queues)",
"section": "3.7.1 Kendall notation for queues"
}
},
"source": [
"## 3.7.1 Kendall notation for queues\n",
"\n",
"Kendall notation is a standardized methods to describe and classify queues. The notation consists of three factors written as A/S/c where where A describes the arrival process, S the service process, and c is the number of servers attending the queue.\n",
"\n",
"* $A/S/c$\n",
" * $A$: statistical nature of the arrival process \n",
" * $S$: Statistical nature of the service process \n",
" * $c$: Number of servers at the queue node\n",
" \n",
"* Typical Statistics\n",
" * D: Deterministic (average arrival rate $\\lambda$)\n",
" * M: Markov or memoryless (average arrival rate $r$)\n",
" * G: General or arbitrary distribution (mean $\\mu$ and standard deviation $\\simga$ or variance $\\sigma^2$)\n",
" \n",
"Example: M/D/1\n",
"\n",
"\n",
"\n",
"Example: M/M/8\n",
"\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 2,
"link": "[3.7.2 SimPy Stores: A generic tool for simulating queues.](https://jckantor.github.io/CBE40455-2020/03.07-Simulating-Queuing-Systems.html#3.7.2-SimPy-Stores:-A-generic-tool-for-simulating-queues.)",
"section": "3.7.2 SimPy Stores: A generic tool for simulating queues."
}
},
"source": [
"## 3.7.2 SimPy Stores: A generic tool for simulating queues.\n",
"\n",
"SimPy [shared resources](https://simpy.readthedocs.io/en/latest/topical_guides/resources.html#) provide several means to implement queues in simulations. In particular, the shared resource type [Stores](https://simpy.readthedocs.io/en/latest/topical_guides/resources.html#res-type-store) is easy to use and well-suited to this purpose. The essential features are:\n",
"\n",
"* `store = simpy.Store(env, capacity=4)` creates a new store object with a capacity of 4. Omitting capacity creates an a infinitely long queue.\n",
"* `yield store.put(x)` puts a Python object `x` on the queue. If the store is currently full, then generator instance waits until space is available.\n",
"* `x = yield store.get()` retrieves a Python object from the store. The default is to recover objects on a first-in-first-out discipline. Other disciplines can be implemented using the `FilterStore` or `PriortyStore` objects.\n",
"* `store.items` returns a list of all items currently available in the store. "
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 2,
"link": "[3.7.3 Example: An Order Processing Queue](https://jckantor.github.io/CBE40455-2020/03.07-Simulating-Queuing-Systems.html#3.7.3-Example:-An-Order-Processing-Queue)",
"section": "3.7.3 Example: An Order Processing Queue"
}
},
"source": [
"## 3.7.3 Example: An Order Processing Queue\n",
"\n",
"A chemical storeroom processes orders for a large research campus. At peak loads it is expected to receive an average of one order every 12 minutes. The time required to process each order is a fixed 10 minutes. \n",
"\n",
"1. Describe the process using the Kendall notation.\n",
"\n",
"2. Create a simulation of the order queue that operates for 8 hours. Determine the average time between the arrival and completion of an order, and determine the average queue length. "
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"nbpages": {
"level": 2,
"link": "[3.7.3 Example: An Order Processing Queue](https://jckantor.github.io/CBE40455-2020/03.07-Simulating-Queuing-Systems.html#3.7.3-Example:-An-Order-Processing-Queue)",
"section": "3.7.3 Example: An Order Processing Queue"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
}
],
"metadata": {
"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
}