{ "cells": [ { "cell_type": "markdown", "metadata": { "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": { "pycharm": {} }, "source": [ "\n", "< [Linear Optimization](http://nbviewer.jupyter.org/github/jckantor/CBE40455/blob/master/notebooks/03.00-Linear-Optimization.ipynb) | [Contents](toc.ipynb) | [Transportation Networks](http://nbviewer.jupyter.org/github/jckantor/CBE40455/blob/master/notebooks/03.02-Transportation-Networks.ipynb) >

\"Open

\"Download\"" ] }, { "cell_type": "markdown", "metadata": { "pycharm": {}, "slideshow": { "slide_type": "slide" } }, "source": [ "# Production Models with Constraints" ] }, { "cell_type": "markdown", "metadata": { "pycharm": {} }, "source": [ "This notebook demonstrates the use of linear programming to maximize profit for a simple model of a multiproduct production facility. The notebook uses [Pyomo](http://www.pyomo.org/) to represent the model with the [glpk](https://en.wikibooks.org/wiki/GLPK) solver to calculate solutions." ] }, { "cell_type": "markdown", "metadata": { "pycharm": {} }, "source": [ "## Initializations\n", "\n", "To use this notebook you will need to install pyomo and glpk. If you're using the Anaconda distribution, the easiest method to install is to execute the following conda commands in a terminal window.\n", "\n", " conda install -c conda-forge pyomo\n", " conda install -c conda-forge glpk" ] }, { "cell_type": "markdown", "metadata": { "pycharm": {}, "slideshow": { "slide_type": "slide" } }, "source": [ "## Example: Production Plan for a Single Product Plant" ] }, { "cell_type": "markdown", "metadata": { "pycharm": {} }, "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 USD 270 each. The production of each unit requires USD 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 USD 50/hour, and 100 hours per week of labor B at a cost of USD 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.\n", "\n", "![LP_ProductX](https://github.com/jckantor/CBE40455/blob/master/notebooks/figures/LP_ProductX.png?raw=true)\n", "\n", "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": { "pycharm": {}, "slideshow": { "slide_type": "fragment" } }, "source": [ "### Pyomo Model" ] }, { "cell_type": "markdown", "metadata": { "pycharm": {} }, "source": [ "While this problem can be solved by inspection, here we show a Pyomo model that generates a solution to the problem." ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "pycharm": {} }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "# ==========================================================\n", "# = Solver Results =\n", "# ==========================================================\n", "# ----------------------------------------------------------\n", "# Problem Information\n", "# ----------------------------------------------------------\n", "Problem: \n", "- Name: unknown\n", " Lower bound: 1600.0\n", " Upper bound: 1600.0\n", " Number of objectives: 1\n", " Number of constraints: 4\n", " Number of variables: 2\n", " Number of nonzeros: 4\n", " Sense: maximize\n", "# ----------------------------------------------------------\n", "# Solver Information\n", "# ----------------------------------------------------------\n", "Solver: \n", "- Status: ok\n", " Termination condition: optimal\n", " Statistics: \n", " Branch and bound: \n", " Number of bounded subproblems: 0\n", " Number of created subproblems: 0\n", " Error rc: 0\n", " Time: 0.010907888412475586\n", "# ----------------------------------------------------------\n", "# Solution Information\n", "# ----------------------------------------------------------\n", "Solution: \n", "- number of solutions: 0\n", " number of solutions displayed: 0\n" ] } ], "source": [ "from pyomo.environ import *\n", "model = ConcreteModel()\n", "\n", "# declare decision variables\n", "model.x = Var(domain=NonNegativeReals)\n", "\n", "# declare objective\n", "model.profit = Objective(\n", " expr = 40*model.x,\n", " sense = maximize)\n", "\n", "# declare constraints\n", "model.demand = Constraint(expr = model.x <= 40)\n", "model.laborA = Constraint(expr = model.x <= 80)\n", "model.laborB = Constraint(expr = 2*model.x <= 100)\n", "\n", "# solve\n", "SolverFactory('glpk').solve(model).write()" ] }, { "cell_type": "markdown", "metadata": { "pycharm": {} }, "source": [ "The results of the solution step show the solver has converged to an optimal solution. Next we display the particular components of the model of interest to us." ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "pycharm": {} }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Profit = 1600.0 per week\n", "X = 40.0 units per week\n" ] } ], "source": [ "print(\"Profit = \", model.profit(), \" per week\")\n", "print(\"X = \", model.x(), \" units per week\")" ] }, { "cell_type": "markdown", "metadata": { "pycharm": {} }, "source": [ "### Exercises" ] }, { "cell_type": "markdown", "metadata": { "pycharm": {} }, "source": [ "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?" ] }, { "cell_type": "markdown", "metadata": { "pycharm": {}, "slideshow": { "slide_type": "slide" } }, "source": [ "## Production Plan: Product Y" ] }, { "cell_type": "markdown", "metadata": { "pycharm": {} }, "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 USD 90 in raw materials, 1 hour of Labor type A at USD 50 per hour, and 1 hour of Labor B at USD 40 per hour. What is the potential weekly profit?\n", "\n", "![LP_ProductY](https://github.com/jckantor/CBE40455/blob/master/notebooks/figures/LP_ProductY.png?raw=true)" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "pycharm": {} }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "# ==========================================================\n", "# = Solver Results =\n", "# ==========================================================\n", "# ----------------------------------------------------------\n", "# Problem Information\n", "# ----------------------------------------------------------\n", "Problem: \n", "- Name: unknown\n", " Lower bound: 2400.0\n", " Upper bound: 2400.0\n", " Number of objectives: 1\n", " Number of constraints: 3\n", " Number of variables: 2\n", " Number of nonzeros: 3\n", " Sense: maximize\n", "# ----------------------------------------------------------\n", "# Solver Information\n", "# ----------------------------------------------------------\n", "Solver: \n", "- Status: ok\n", " Termination condition: optimal\n", " Statistics: \n", " Branch and bound: \n", " Number of bounded subproblems: 0\n", " Number of created subproblems: 0\n", " Error rc: 0\n", " Time: 0.01148080825805664\n", "# ----------------------------------------------------------\n", "# Solution Information\n", "# ----------------------------------------------------------\n", "Solution: \n", "- number of solutions: 0\n", " number of solutions displayed: 0\n" ] } ], "source": [ "from pyomo.environ import *\n", "model = ConcreteModel()\n", "\n", "# declare decision variables\n", "model.y = Var(domain=NonNegativeReals)\n", "\n", "# declare objective\n", "model.profit = Objective(\n", " expr = 30*model.y,\n", " sense = maximize)\n", "\n", "# declare constraints\n", "model.laborA = Constraint(expr = model.y <= 80)\n", "model.laborB = Constraint(expr = model.y <= 100)\n", "\n", "# solve\n", "SolverFactory('glpk').solve(model).write()" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "pycharm": {} }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Profit = 2400.0\n", "Units of Y = 80.0\n" ] } ], "source": [ "print(\"Profit = \", model.profit())\n", "print(\"Units of Y = \", model.y())" ] }, { "cell_type": "markdown", "metadata": { "pycharm": {} }, "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": { "pycharm": {} }, "source": [ "### Exercises" ] }, { "cell_type": "markdown", "metadata": { "pycharm": {} }, "source": [ "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": { "pycharm": {}, "slideshow": { "slide_type": "slide" } }, "source": [ "## Production Plan: Mixed Product Strategy" ] }, { "cell_type": "markdown", "metadata": { "pycharm": {} }, "source": [ "So far we have learned that we can make USD 1,600 per week by manufacturing product X, and USD 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$.\n", "\n", "![LP_ProductXY](https://github.com/jckantor/CBE40455/blob/master/notebooks/figures/LP_ProductXY.png?raw=true)" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "pycharm": {} }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "# ==========================================================\n", "# = Solver Results =\n", "# ==========================================================\n", "# ----------------------------------------------------------\n", "# Problem Information\n", "# ----------------------------------------------------------\n", "Problem: \n", "- Name: unknown\n", " Lower bound: 2600.0\n", " Upper bound: 2600.0\n", " Number of objectives: 1\n", " Number of constraints: 4\n", " Number of variables: 3\n", " Number of nonzeros: 6\n", " Sense: maximize\n", "# ----------------------------------------------------------\n", "# Solver Information\n", "# ----------------------------------------------------------\n", "Solver: \n", "- Status: ok\n", " Termination condition: optimal\n", " Statistics: \n", " Branch and bound: \n", " Number of bounded subproblems: 0\n", " Number of created subproblems: 0\n", " Error rc: 0\n", " Time: 0.012108087539672852\n", "# ----------------------------------------------------------\n", "# Solution Information\n", "# ----------------------------------------------------------\n", "Solution: \n", "- number of solutions: 0\n", " number of solutions displayed: 0\n" ] } ], "source": [ "from pyomo.environ import *\n", "model = ConcreteModel()\n", "\n", "# declare decision variables\n", "model.x = Var(domain=NonNegativeReals)\n", "model.y = Var(domain=NonNegativeReals)\n", "\n", "# declare objective\n", "model.profit = Objective(\n", " expr = 40*model.x + 30*model.y,\n", " sense = maximize)\n", "\n", "# declare constraints\n", "model.demand = Constraint(expr = model.x <= 40)\n", "model.laborA = Constraint(expr = model.x + model.y <= 80)\n", "model.laborB = Constraint(expr = 2*model.x + model.y <= 100)\n", "\n", "# solve\n", "SolverFactory('glpk').solve(model).write()" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "pycharm": {}, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Profit = 2600.0\n", "Units of X = 20.0\n", "Units of Y = 60.0\n" ] } ], "source": [ "# display solution\n", "print(\"Profit = \", model.profit())\n", "print(\"Units of X = \", model.x())\n", "print(\"Units of Y = \", model.y())" ] }, { "cell_type": "markdown", "metadata": { "pycharm": {} }, "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": { "pycharm": {}, "slideshow": { "slide_type": "slide" } }, "source": [ "## What are the active constraints?" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "pycharm": {}, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "image/png": "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\nIzVHdGKOPQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "from pylab import *\n", "\n", "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": { "pycharm": {}, "slideshow": { "slide_type": "slide" } }, "source": [ "## What is the incremental value of labor?" ] }, { "cell_type": "code", "execution_count": 91, "metadata": { "pycharm": {}, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "# ==========================================================\n", "# = Solver Results =\n", "# ==========================================================\n", "# ----------------------------------------------------------\n", "# Problem Information\n", "# ----------------------------------------------------------\n", "Problem: \n", "- Name: unknown\n", " Lower bound: 2600.0\n", " Upper bound: 2600.0\n", " Number of objectives: 1\n", " Number of constraints: 4\n", " Number of variables: 3\n", " Number of nonzeros: 6\n", " Sense: maximize\n", "# ----------------------------------------------------------\n", "# Solver Information\n", "# ----------------------------------------------------------\n", "Solver: \n", "- Status: ok\n", " Termination condition: optimal\n", " Statistics: \n", " Branch and bound: \n", " Number of bounded subproblems: 0\n", " Number of created subproblems: 0\n", " Error rc: 0\n", " Time: 0.011699914932250977\n", "# ----------------------------------------------------------\n", "# Solution Information\n", "# ----------------------------------------------------------\n", "Solution: \n", "- number of solutions: 0\n", " number of solutions displayed: 0\n" ] } ], "source": [ "from pyomo.environ import *\n", "model = ConcreteModel()\n", "\n", "# for access to dual solution for constraints\n", "model.dual = Suffix(direction=Suffix.IMPORT)\n", "\n", "# declare decision variables\n", "model.x = Var(domain=NonNegativeReals)\n", "model.y = Var(domain=NonNegativeReals)\n", "\n", "# declare objective\n", "model.profit = Objective(\n", " expr = 40*model.x + 30*model.y,\n", " sense = maximize)\n", "\n", "# declare constraints\n", "model.demand = Constraint(expr = model.x <= 40)\n", "model.laborA = Constraint(expr = model.x + model.y <= 80)\n", "model.laborB = Constraint(expr = 2*model.x + model.y <= 100)\n", "\n", "# solve\n", "SolverFactory('glpk').solve(model).write()" ] }, { "cell_type": "markdown", "metadata": { "pycharm": {} }, "source": [ "Analysis of the constraints." ] }, { "cell_type": "code", "execution_count": 92, "metadata": { "pycharm": {} }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Constraint value lslack uslack dual\n", "demand 20.00 -inf 20.00 0.00\n", "laborA 80.00 -inf 0.00 20.00\n", "laborB 100.00 -inf 0.00 10.00\n" ] } ], "source": [ "str = \" {0:7.2f} {1:7.2f} {2:7.2f} {3:7.2f}\"\n", "\n", "print(\"Constraint value lslack uslack dual\")\n", "for c in [model.demand,model.laborA,model.laborB]:\n", " print(c, str.format(c(), c.lslack(), c.uslack(), model.dual[c]))" ] }, { "cell_type": "markdown", "metadata": { "pycharm": {}, "slideshow": { "slide_type": "slide" } }, "source": [ "## Theory of Constraints" ] }, { "cell_type": "markdown", "metadata": { "pycharm": {}, "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": { "pycharm": {} }, "source": [ "\n", "< [Linear Optimization](http://nbviewer.jupyter.org/github/jckantor/CBE40455/blob/master/notebooks/03.00-Linear-Optimization.ipynb) | [Contents](toc.ipynb) | [Transportation Networks](http://nbviewer.jupyter.org/github/jckantor/CBE40455/blob/master/notebooks/03.02-Transportation-Networks.ipynb) >

\"Open

\"Download\"" ] } ], "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.3" } }, "nbformat": 4, "nbformat_minor": 2 }