{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"###### The latest version of this IPython notebook is available at [http://github.com/jckantor/ESTM60203](http://github.com/jckantor/ESTM60203) for noncommercial use under terms of the [Creative Commons Attribution Noncommericial ShareAlike License (CC BY-NC-SA 4.0)](http://creativecommons.org/licenses/by-nc-sa/4.0/)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"J.C. Kantor (Kantor.1@nd.edu)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Production Models with Constraints"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This notebook demonstrates the use of linear programming to maximize profit for a simple model of a multiproduct production facility. The notebook uses MathProg/GLPK to represent the model and calculate solutions."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Initializations"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"from pylab import *"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Example: Production Plan for a Single Product Plant"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Suppose you are thinking about starting up a business to produce Product X. You have determined there is a market for X of up to 40 units per week at a price of \\$270 each. The production of each unit requires \\$100 of raw materials, 1 hour of type A labor, and 2 hours of type B labor. You have an unlimited amount of raw material available to you, but only 80 hours per week of labor A at a cost of \\$50/hour, and 100 hours per week of labor B at a cost of \\$40 per hour. Ignoring all other expenses, what is the maximum weekly profit?\n",
"\n",
"To get started on this problem, we sketch a flow diagram illustrating the flow of raw materials and labor through the production plant."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The essential decision we need to make is how many units or Product X to produce each week. That's our *decision variable* which we denote as $x$. The weekly revenues are then\n",
"\n",
"$$ \\mbox{Revenue} = \\$270 x $$\n",
"\n",
"The costs include the value of the raw materials and each form of labor. If we produce x units a week, then the total cost is\n",
"\n",
"$$ \\mbox{Cost} = \\underbrace{\\$100 x}_{\\mbox{Raw Material}} \n",
" + \\underbrace{\\$50 x}_{\\mbox{Labor A}} + \\underbrace{2\\times\\$40 x}_{\\mbox{Labor B}} = \\$230 x$$\n",
" \n",
"We see immediately that the gross profit is just\n",
"\n",
"$$\\begin{eqnarray*}\\mbox{Profit} & = & \\mbox{Revenue} - \\mbox{Cost} \\\\\n",
"& = & \\$270x - \\$230x \\\\\n",
"& = & \\$40 x\n",
"\\end{eqnarray*}$$\n",
"\n",
"which means there is a profit earned on each unit of X produced, so let's produce as many as possible. \n",
"\n",
"There are three constraints that limit how many units can be produced. There is market demand for no more than 40 units per week. Producing $x = 40$ units per week will require 40 hours per week of Labor A, and 80 hours per week of Labor B. Checking those constraints we see that we have enough labor of each type, so the maximum profit will be\n",
"\n",
"$$\\max \\mbox{Profit} = $40 \\mbox{ per unit} \\times 40 \\mbox{ units per week} = \\$1600 \\mbox{ per week}$$\n",
"\n",
"What we conclude is that market demand is the 'most constraining constraint.' Once we've made that deduction, the rest is a straightforward problem that can be solved by inspection. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"### MathProg Model"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"While this problem can be solved by inspection, next we show a `MathProg` model that generates a solution to the problem. The first line is an IPython 'cell magic' that allows us to use the `glpsol` command to read and run a `MathProg` model. The remainder of the cell is the actual model."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"%%script glpsol -m /dev/stdin -o /dev/stdout -y display.txt --out output\n",
"\n",
"# Declare decision variables\n",
"var x >= 0;\n",
"\n",
"# Declare the objective\n",
"maximize Profit: 270*x - 2*40*x - 50*x - 100*x;\n",
" \n",
"# Declare problem constraints\n",
"subject to Demand: x <= 40;\n",
"subject to LaborA: x <= 80;\n",
"subject to LaborB: 2*x <= 100;\n",
"\n",
"# Compute a solution\n",
"solve;\n",
"\n",
"# Display solution values\n",
"printf \"Profit = $%7.2f per week\\n\", Profit;\n",
"printf \"x = %7.2f units per week\\n\", x;\n",
"\n",
"end;\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This model uses the `printf` statement to display the value of the solution to the model output. The cell magic captures that portion of the model output to a file `display.txt`. That file is prrinted to this notebook with the following command that opens, reads, and prints the contents of the file."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Profit = $1600.00 per week\n",
"x = 40.00 units per week\n",
"\n"
]
}
],
"source": [
"print(open('display.txt').read())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The complete output is displayed as follows."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"GLPSOL: GLPK LP/MIP Solver, v4.52\n",
"Parameter(s) specified in the command line:\n",
" -m /dev/stdin -o /dev/stdout -y display.txt\n",
"Reading model section from /dev/stdin...\n",
"20 lines were read\n",
"Generating Profit...\n",
"Generating Demand...\n",
"Generating LaborA...\n",
"Generating LaborB...\n",
"Model has been successfully generated\n",
"GLPK Simplex Optimizer, v4.52\n",
"4 rows, 1 column, 4 non-zeros\n",
"Preprocessing...\n",
"~ 0: obj = 1.600000000e+03 infeas = 0.000e+00\n",
"OPTIMAL SOLUTION FOUND BY LP PREPROCESSOR\n",
"Time used: 0.0 secs\n",
"Memory used: 0.1 Mb (94198 bytes)\n",
"Model has been successfully processed\n",
"Writing basic solution to `/dev/stdout'...\n",
"Problem: stdin\n",
"Rows: 4\n",
"Columns: 1\n",
"Non-zeros: 4\n",
"Status: OPTIMAL\n",
"Objective: Profit = 1600 (MAXimum)\n",
"\n",
" No. Row name St Activity Lower bound Upper bound Marginal\n",
"------ ------------ -- ------------- ------------- ------------- -------------\n",
" 1 Profit B 1600 \n",
" 2 Demand NU 40 40 40 \n",
" 3 LaborA B 40 80 \n",
" 4 LaborB B 80 100 \n",
"\n",
" No. Column name St Activity Lower bound Upper bound Marginal\n",
"------ ------------ -- ------------- ------------- ------------- -------------\n",
" 1 x B 40 0 \n",
"\n",
"Karush-Kuhn-Tucker optimality conditions:\n",
"\n",
"KKT.PE: max.abs.err = 0.00e+00 on row 0\n",
" max.rel.err = 0.00e+00 on row 0\n",
" High quality\n",
"\n",
"KKT.PB: max.abs.err = 0.00e+00 on row 0\n",
" max.rel.err = 0.00e+00 on row 0\n",
" High quality\n",
"\n",
"KKT.DE: max.abs.err = 0.00e+00 on column 0\n",
" max.rel.err = 0.00e+00 on column 0\n",
" High quality\n",
"\n",
"KKT.DB: max.abs.err = 0.00e+00 on row 0\n",
" max.rel.err = 0.00e+00 on row 0\n",
" High quality\n",
"\n",
"End of output\n",
"\n"
]
}
],
"source": [
"print output"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercises"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Open a web browswer to the `MathProg` page http://www3.nd.edu/~jeff/mathprog/mathprog.html. Cut and paste the above model into the edit window of the `MathProg` web page, and clear on the `Solve` button to execute the model. Navigate thought the various tabs to see what's going on. Then change some of the model parameters to try some 'what-if' questions:\n",
"\n",
"1. Suppose the demand could be increased to 50 units per month. What would be the increased profits? What if the demand increased to 60 units per month? How much would you be willing to pay for your marketing department for the increased demand?\n",
"\n",
"2. Increase the cost of LaborB. At what point is it no longer financially viable to run the plant?\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Production Plan: Product Y"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Your marketing department has developed plans for a new product called Y. The product sells at a price of \\$210/each, and they expect that you can sell all that you can make. It's also cheaper to make, requiring only \\$90 in raw materials, 1 hour of Labor type A at \\$50 per hour, and 1 hour of Labor B at \\$40 per hour. What is the potential weekly profit?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"%%script glpsol -m /dev/stdin -o /dev/stdout -y display.txt --out output\n",
"\n",
"# Declare decision variables\n",
"var y >= 0;\n",
"\n",
"# Declare the objective\n",
"maximize Profit: 210*y - 40*y - 50*y - 90*y;\n",
" \n",
"# Declare problem constraints\n",
"subject to LaborA: y <= 80;\n",
"subject to LaborB: y <= 100;\n",
"\n",
"# Compute a solution\n",
"solve;\n",
"\n",
"# Display solution values\n",
"printf \"Profit = $%7.2f per week\\n\", Profit;\n",
"printf \"y = %7.2f units per week\\n\", y;\n",
"\n",
"end;\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Looking at the model output"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Profit = $2400.00 per week\n",
"y = 80.00 units per week\n",
"\n"
]
}
],
"source": [
"print(open('display.txt').read())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Compared to product X, we can manufacture and sell up 80 units per week for a total profit of \\$2,400. This is very welcome news. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercises"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Again, cut and paste the model for the production of Y into the MathProg web solver. Then attempt to answer these questions:\n",
"\n",
"1. What is the limiting resource? That is, which of the two types of labor limits the capacity of your plant to produce more units of Y?\n",
"\n",
"2. What rate would you be willing to pay for the additional labor necessary to increase the production of Y?"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Production Plan: Mixed Product Strategy"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So far we have learned that we can make \\$1,600 per week by manufacturing product X, and $2,400 per week manufacturing product Y. Is it possible to do even better?\n",
"\n",
"To answer this question, we consider the possibilty of manufacturing both products in the same plant. The marketing department assures us that product Y will not affect the sales of product X. So the same constraints hold as before, but now we have two decision variables, $x$ and $y$."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"%%script glpsol -m /dev/stdin -o /dev/stdout -y display.txt --out output\n",
"\n",
"# Declare decision variables\n",
"var x >= 0;\n",
"var y >= 0;\n",
"\n",
"# Declare the objective\n",
"maximize Profit: (270*x - 2*x*40 - 50*x - 100*x) \n",
" + (210*y - 40*y - 50*y - 90*y);\n",
" \n",
"# Declare problem constraints\n",
"subject to Demand: x <= 40;\n",
"subject to LaborA: x + y <= 80;\n",
"subject to LaborB: 2*x + y <= 100;\n",
"\n",
"# Compute a solution\n",
"solve;\n",
"\n",
"# Display solution values\n",
"printf \"Profit = $%7.2f per week\\n\", Profit;\n",
"printf \"x = %7.2f units per week\\n\", x;\n",
"printf \"y = %7.2f units per week\\n\", y;\n",
"\n",
"end;\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's see how we do"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Profit = $2600.00 per week\n",
"x = 20.00 units per week\n",
"y = 60.00 units per week\n",
"\n"
]
}
],
"source": [
"print(open('display.txt').read())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The mixed product strategy earns more profit than either of the single product srategies. Does this surprise you? Before going further, try to explain why it is possible for a mixed product strategy to earn more profit than either of the possible single product strategies."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## What are the active constraints?"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"image/png": "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\ngg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"figure(figsize=(6,6))\n",
"subplot(111, aspect='equal')\n",
"axis([0,100,0,100])\n",
"xlabel('Production Qty X')\n",
"ylabel('Production Qty Y')\n",
"\n",
"# Labor A constraint\n",
"x = array([0,80])\n",
"y = 80 - x\n",
"plot(x,y,'r',lw=2)\n",
"fill_between([0,80,100],[80,0,0],[100,100,100],color='r',alpha=0.15)\n",
"\n",
"# Labor B constraint\n",
"x = array([0,50])\n",
"y = 100 - 2*x\n",
"plot(x,y,'b',lw=2)\n",
"fill_between([0,50,100],[100,0,0],[100,100,100],color='b',alpha=0.15)\n",
"\n",
"# Demand constraint\n",
"plot([40,40],[0,100],'g',lw=2)\n",
"fill_between([40,100],[0,0],[100,100],color='g',alpha=0.15)\n",
"\n",
"legend(['Labor A Constraint','Labor B Constraint','Demand Constraint'])\n",
"\n",
"# Contours of constant profit\n",
"x = array([0,100])\n",
"for p in linspace(0,3600,10):\n",
" y = (p - 40*x)/30\n",
" plot(x,y,'y--')\n",
"\n",
"# Optimum\n",
"plot(20,60,'r.',ms=20)\n",
"annotate('Mixed Product Strategy', xy=(20,60), xytext=(50,70),\n",
" arrowprops=dict(shrink=.1,width=1,headwidth=5))\n",
"\n",
"plot(0,80,'b.',ms=20)\n",
"annotate('Y Only', xy=(0,80), xytext=(20,90),\n",
" arrowprops=dict(shrink=0.1,width=1,headwidth=5))\n",
"\n",
"plot(40,0,'b.',ms=20)\n",
"annotate('X Only', xy=(40,0), xytext=(70,20),\n",
" arrowprops=dict(shrink=0.1,width=1,headwidth=5))\n",
"\n",
"text(4,23,'Increasing Profit')\n",
"annotate('', xy=(20,15), xytext=(0,0),\n",
" arrowprops=dict(width=0.5,headwidth=5))\n",
"\n",
"savefig('img/LPprob01.png',bbox_inches='tight')"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## What is the incremental value of labor?"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"%%script glpsol -m /dev/stdin -o /dev/stdout -y display.txt --out output\n",
"\n",
"# Declare decision variables\n",
"var x >= 0;\n",
"var y >= 0;\n",
"\n",
"# Declare the objective\n",
"maximize Profit: (270*x - 2*x*40 - 50*x - 100*x) \n",
" + (210*y - 40*y - 50*y - 90*y);\n",
" \n",
"# Declare problem constraints\n",
"subject to Demand: x <= 40;\n",
"subject to LaborA: x + y <= 80;\n",
"subject to LaborB: 2*x + y <= 100;\n",
"\n",
"# Compute a solution\n",
"solve;\n",
"\n",
"# Display solution values\n",
"printf \"Profit = $%7.2f per week\\n\\n\", Profit;\n",
"printf \"x = %7.2f units per week\\n\", x;\n",
"printf \"y = %7.2f units per week\\n\\n\", y;\n",
"\n",
"printf \"Demand = %7.2f units %7.2f\\n\", Demand, Demand.dual;\n",
"printf \"LaborA = %7.2f hours %7.2f\\n\", LaborA, LaborA.dual;\n",
"printf \"LaborB = %7.2f hours %7.2f\\n\", LaborB, LaborB.dual;\n",
"end;\n"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Profit = $2600.00 per week\n",
"\n",
"x = 20.00 units per week\n",
"y = 60.00 units per week\n",
"\n",
"Demand = 20.00 units 0.00\n",
"LaborA = 80.00 hours 20.00\n",
"LaborB = 100.00 hours 10.00\n",
"\n"
]
}
],
"source": [
"print(open('display.txt').read())"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Theory of Constraints"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* For $n$ decisions you should expect to find $n$ 'active' constraints.\n",
"* Each inactive constraint has an associated 'slack.' The associated resources have no incremental value.\n",
"* Each active constraint has an associated 'shadow price'. This is additional value of additional resources."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Exercises"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"1. Copy and paste these models into the [MathProg](http://www3.nd.edu/~jeff/mathprog/) solver. Verify the calculations and conclusions shown above."
]
}
],
"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.5.3"
}
},
"nbformat": 4,
"nbformat_minor": 0
}