{ "cells": [ { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "cGu8YmZbcInL", "pycharm": {} }, "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": { "colab_type": "text", "id": "QXs9TPP4cInN", "pycharm": {} }, "source": [ "\n", "< [Economic Order Quantity](http://nbviewer.jupyter.org/github/jckantor/CBE40455/blob/master/notebooks/05.01-Economic-Order-Quantity.ipynb) | [Contents](toc.ipynb) | [Vehicle Routing](http://nbviewer.jupyter.org/github/jckantor/CBE40455/blob/master/notebooks/05.03-Vehicle-Routing.ipynb) >
"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "J2VR97nfcInN",
"pycharm": {},
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Assignment Problems"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "m_WJH85ccInO",
"pycharm": {}
},
"source": [
"This Jupyter notebook demonstrates models for various types of assignment problems using GLPK/MathProg. Run the following cell to perform the necessary installations on Google Colaboratory."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 153
},
"colab_type": "code",
"executionInfo": {
"elapsed": 5544,
"status": "ok",
"timestamp": 1557235985089,
"user": {
"displayName": "Jeffrey Kantor",
"photoUrl": "https://lh5.googleusercontent.com/-8zK5aAW5RMQ/AAAAAAAAAAI/AAAAAAAAKB0/kssUQyz8DTQ/s64/photo.jpg",
"userId": "09038942003589296665"
},
"user_tz": 240
},
"id": "2MCVgHNPcW1l",
"outputId": "03fe8961-6f58-4f01-cb0a-c0d036d89731"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Reading package lists...\n",
"Building dependency tree...\n",
"Reading state information...\n",
"glpk-utils is already the newest version (4.65-1).\n",
"The following package was automatically installed and is no longer required:\n",
" libnvidia-common-410\n",
"Use 'apt autoremove' to remove it.\n",
"0 upgraded, 0 newly installed, 0 to remove and 11 not upgraded.\n"
]
}
],
"source": [
"!pip install -q pyomo\n",
"!apt-get install glpk-utils -q\n",
"!pip install -q cvxpy"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "1sre1WppcInP",
"pycharm": {},
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Example Problem"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "rak60NvZcInQ",
"pycharm": {}
},
"source": [
"You work as a logistics manager for a toy manufacturer, and you currently have five delivery trucks on the road. Your trucks are in Austin, Boston, Chicago, Denver, Edmonton, and Fargo. You need them to drive to five other cities: Atlanta, Boise, Charlotte, Dallas, and Fresno. The table below shows the distance in miles between these cities.\n",
"\n",
"| From\\To | Atlanta | Boise | Charlotte | Dallas | Fresno |\n",
"| : -----: | :-----: | :------: | :-------: | :----: | :----: |\n",
"| Austin | 921 | 1627 | 1166 | 196 | 1594 |\n",
"| Boston | 1078 | 2661 | 837 | 1767 | 3107 |\n",
"| Chicago | 716 | 1693 | 756 | 925 | 2140 |\n",
"| Denver | 1400 | 815 | 1561 | 788 | 1142 |\n",
"| Edmonton | 3764 | 1718 | 3848 | 3310 | 2835 |\n",
"\n",
"Where should you send each of your trucks in order to minimize travel distance?"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "39mlo9TgcInR",
"pycharm": {},
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Combinatorial Complexity"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "Ampm5ASKcInS",
"pycharm": {}
},
"source": [
"How many ways are there to assign destinations to each truck?\n",
"\n",
"$N = 5 \\times 4 \\times 3 \\times 2 \\times 1 = 120$\n",
"\n",
"In general there are \n",
"\n",
"$N = n!$ \n",
"\n",
"ways to assign $n$ resources to $n$ tasks."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 283
},
"colab_type": "code",
"executionInfo": {
"elapsed": 5672,
"status": "ok",
"timestamp": 1557235985225,
"user": {
"displayName": "Jeffrey Kantor",
"photoUrl": "https://lh5.googleusercontent.com/-8zK5aAW5RMQ/AAAAAAAAAAI/AAAAAAAAKB0/kssUQyz8DTQ/s64/photo.jpg",
"userId": "09038942003589296665"
},
"user_tz": 240
},
"id": "M2kUCRP4cInT",
"outputId": "736232f6-2b79-458e-d5d3-76f8cdec3142",
"pycharm": {},
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
" "
]
}
],
"metadata": {
"colab": {
"collapsed_sections": [],
"name": "05.02-Assignment-Problems.ipynb",
"provenance": [],
"version": "0.3.2"
},
"kernelspec": {
"display_name": "Python [default]",
"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.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
\n",
" \n",
"
\n",
"\n",
" \n",
" \n",
" \n",
" \n",
" Atlanta \n",
" Boise \n",
" Charlotte \n",
" Dallas \n",
" Fresno \n",
" \n",
" \n",
" Austin \n",
" 921 \n",
" 1627 \n",
" 1166 \n",
" 196 \n",
" 1594 \n",
" \n",
" \n",
" Boston \n",
" 1078 \n",
" 2661 \n",
" 837 \n",
" 1767 \n",
" 3107 \n",
" \n",
" \n",
" Chicago \n",
" 716 \n",
" 1693 \n",
" 756 \n",
" 925 \n",
" 2140 \n",
" \n",
" \n",
" Denver \n",
" 1400 \n",
" 815 \n",
" 1561 \n",
" 788 \n",
" 1142 \n",
" \n",
" \n",
" \n",
"Edmonton \n",
" 3764 \n",
" 1718 \n",
" 3848 \n",
" 3310 \n",
" 2835 \n",
"