Skip to content

Instantly share code, notes, and snippets.

@benmoran
Created April 28, 2014 21:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save benmoran/4fdbbc2c399e0e93e76c to your computer and use it in GitHub Desktop.
Save benmoran/4fdbbc2c399e0e93e76c to your computer and use it in GitHub Desktop.
PuLP Simple LP
{
"metadata": {
"name": ""
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Import PuLP modeler functions\n",
"from pulp import *"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"x = LpVariable('x', -10, 10)\n",
"y = LpVariable('y', -10, 10)\n",
"prob = LpProblem(\"Toy Problem\", LpMinimize)\n",
"prob += 3*x - y\n",
"prob.solve()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"latex": [
"$$1$$"
],
"metadata": {},
"output_type": "pyout",
"png": "iVBORw0KGgoAAAANSUhEUgAAAAgAAAAPBAMAAAArJJMAAAAAJFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAADHJj5lAAAAC3RSTlMAzRAiu5mrdu/dZmiL4QAAAAAJcEhZcwAA\nDsQAAA7EAZUrDhsAAAAjSURBVAgdY2BgEGJgYDDZxMCgEgYkGNhJJVgzdmYB9TEwAACPpQrvlUCH\ncAAAAABJRU5ErkJggg==\n",
"prompt_number": 2,
"text": [
"1"
]
}
],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"prob"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 3,
"text": [
"Toy Problem:\n",
"MINIMIZE\n",
"3*x + -1*y + 0\n",
"VARIABLES\n",
"-10 <= x <= 10 Continuous\n",
"-10 <= y <= 10 Continuous\n"
]
}
],
"prompt_number": 3
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"(x.value(), y.value())"
],
"language": "python",
"metadata": {},
"outputs": [
{
"latex": [
"$$\\begin{pmatrix}-10.0, & 10.0\\end{pmatrix}$$"
],
"metadata": {},
"output_type": "pyout",
"png": "iVBORw0KGgoAAAANSUhEUgAAAIIAAAAaBAMAAACJGJngAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMkS7zRCZdiKJ71Rm\nq90icBAQAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABrUlEQVQ4EaVTsUoDQRSci0m8JEcM/oCWNmJA\nsDW9KFeIoIV3gmIlpFKwUfADks42f6C9zdWCELG0EEFtJIJiUEnj28tu9t3eFmfcZvbNzM7uvtsD\nMI3xR1MsderjB2BerM37/0goRbR4nwWItI3znZhRyOR4N8UP8Rlw+9riLlPCCrZPBaVQy7Doh0Ap\nHFkKSw8+vA5KDaIUjlTApreA8iXznPiY6KIijqWQqUBar0aY4Y0kx1QXuQEtU2gmKF5isY5rbqGE\nIETuiziFXBZnULzEyQ52uYUcrTacH+IUclkkKF5iro9Fbkk7uBr3wUhw3rFKPV57o/FUix1BW95C\nYiJC3CKpux944RZyTIWoxJ2UyGVxC0N3B+IMepCjWocnvqZCLdIsrdMZzARqbrFBZoVmguIlOt+4\n4xbaA6/YqhU+h4hAhOmR0kHf4ljrOLjoRdg8ugV6GGKV/TWw6OLxL/A3ydLkdC5NJRh6k+XZBGMW\nkUkYdb6JYtvgEmUhSpTpIvDhdNK0Zjw9tc9uiL63SxnZR/KtZ/RabZ7oQSW0atnIs9h2lc1sde1Z\n2T+Sv6fmmd4nJtevAAAAAElFTkSuQmCC\n",
"prompt_number": 4,
"text": [
"(-10.0, 10.0)"
]
}
],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from pylab import *"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 5
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def obj(x,y):\n",
" return 3*x - y\n",
"def add_constraint(cx, cy, c):\n",
" # cx.x + cy.y = c\n",
" # x = c - cy/cx . y\n",
" # y = c - cx/cy . x\n",
" if cy != 0:\n",
" plot([LO, HI], [c - LO*cx/cy, c - HI*cx/cy])\n",
" else:\n",
" plot([c - LO*cy/cx, c - HI*cy/cx], [LO, HI] )\n"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"LO = -11\n",
"HI = 11\n",
"xx = yy = np.linspace(LO, HI)\n",
"XX,YY = np.meshgrid(xx,yy)\n",
"contourf(XX,YY,obj(XX,YY), 100)\n",
"xlim(LO, HI)\n",
"ylim(LO, HI)\n",
"xlabel('x')\n",
"ylabel('y')\n",
"add_constraint(1,0, 10)\n",
"add_constraint(1,0, -10)\n",
"add_constraint(0,1, -10)\n",
"add_constraint(0,1, 10)\n",
"plot(x.value(), y.value(), markersize=30, marker='*')\n",
"colorbar()\n"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 7,
"text": [
"<matplotlib.colorbar.Colorbar instance at 0x537a488>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nAAAASUVORK5CYII=\n",
"text": [
"<matplotlib.figure.Figure at 0x4f37c90>"
]
}
],
"prompt_number": 7
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"prob += (x+0.8*y >= 3), \"extra constraint\"\n",
"prob += (x-0.8*y <= -3), \"c2\""
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 8
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#prob += (x-0.8*y == 3), \"c3\""
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 9
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"prob.solve()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"latex": [
"$$1$$"
],
"metadata": {},
"output_type": "pyout",
"png": "iVBORw0KGgoAAAANSUhEUgAAAAgAAAAPBAMAAAArJJMAAAAAJFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAADHJj5lAAAAC3RSTlMAzRAiu5mrdu/dZmiL4QAAAAAJcEhZcwAA\nDsQAAA7EAZUrDhsAAAAjSURBVAgdY2BgEGJgYDDZxMCgEgYkGNhJJVgzdmYB9TEwAACPpQrvlUCH\ncAAAAABJRU5ErkJggg==\n",
"prompt_number": 10,
"text": [
"1"
]
}
],
"prompt_number": 10
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"XX,YY = np.meshgrid(xx,yy)\n",
"contourf(XX,YY,obj(XX,YY), 100)\n",
"xlim(LO, HI)\n",
"ylim(LO, HI)\n",
"xlabel('x')\n",
"ylabel('y')\n",
"add_constraint(1,0.8,3)\n",
"add_constraint(1,-0.8,-3)\n",
"\n",
"add_constraint(1,0,10)\n",
"add_constraint(1,0,-10)\n",
"add_constraint(0,1,-10)\n",
"add_constraint(0,1,10)\n",
"plot(x.value(), y.value(), markersize=30, marker='*')\n",
"colorbar()\n"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 11,
"text": [
"<matplotlib.colorbar.Colorbar instance at 0x58bdcf8>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nArZAIBCohP8HaRrBPeJYncgAAAAASUVORK5CYII=\n",
"text": [
"<matplotlib.figure.Figure at 0x5369590>"
]
}
],
"prompt_number": 11
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"prob"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 12,
"text": [
"Toy Problem:\n",
"MINIMIZE\n",
"3*x + -1*y + 0\n",
"SUBJECT TO\n",
"extra_constraint: x + 0.8 y >= 3\n",
"\n",
"c2: x - 0.8 y <= -3\n",
"\n",
"VARIABLES\n",
"-10 <= x <= 10 Continuous\n",
"-10 <= y <= 10 Continuous\n"
]
}
],
"prompt_number": 12
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"x.value(), y.value()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"latex": [
"$$\\begin{pmatrix}-5.0, & 10.0\\end{pmatrix}$$"
],
"metadata": {},
"output_type": "pyout",
"png": "iVBORw0KGgoAAAANSUhEUgAAAHgAAAAaBAMAAACOdoWwAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMkS7zRCZdiKJ71Rm\nq90icBAQAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAB+klEQVQ4EZ1STWsTURQ9k87ESTKNoX+gXbop\nDQju1HRdhFmUQrswo1hKF9JsrCKIBcFtsyh0VYzQRXdm30WzFosRxY0LEbUUSgWl9YNS2nPfx8xE\nEjS5iznn3HfPu/e9eQBGMFDUxOWUB/JiXGxuOJg516JvIfG695zborzF5VKS1Ux6zKzfUkLjV8A/\nTsryZ2c1UW7T20+yivnXaZ7CzRVRGpeBXCRSh7vxQJGXwJrNafSufAwRNJCrUBtcBfLNpGzY0KvA\nDht1xOMQQ20UZE6DxRZGU1XWfApMpPZUm9B8sY3MCYXBbBkcMY7hV+qivJ801+KsJjRXI2R+URm8\n0MCdVNFQ6P+g9P8Ao/VUXijNq3U4XLKYOcblzqJrlP9pdr7jBqunv0lMyjZLK/zN3L7r2HUztkZO\nuScWE++AZ2PkPPNOtwuLUFAXptE/UZ2teZOdQ4rPwGvBdPDMxTIC+VUG2VnGthEBX4Q/RMc9qmWa\neb3ZCoVB5zfeqiX9eYpgC9UKik3vuWA6aMYB5krekUaAt80ucfiL7zlcG976oxKKqUcP3H1x2MLs\n/TfAITTKK534+3DxVpdi1p3wheXHui8BrV4LJu/WkK33qPH+Za6GcBo9zEGPfJzeJfsQqz7JJ9ZP\n9+mx5YGctxBZ2R8+UeXb/Zls9bwlA+I5cIOGZLo/XbkAAAAASUVORK5CYII=\n",
"prompt_number": 28,
"text": [
"(-5.0, 10.0)"
]
}
],
"prompt_number": 28
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment