# Import PuLP modeler functions from pulp import * x = LpVariable('x', -10, 10) y = LpVariable('y', -10, 10) prob = LpProblem("Toy Problem", LpMinimize) prob += 3*x - y prob.solve() prob (x.value(), y.value()) from pylab import * def obj(x,y): return 3*x - y def add_constraint(cx, cy, c): # cx.x + cy.y = c # x = c - cy/cx . y # y = c - cx/cy . x if cy != 0: plot([LO, HI], [c - LO*cx/cy, c - HI*cx/cy]) else: plot([c - LO*cy/cx, c - HI*cy/cx], [LO, HI] ) LO = -11 HI = 11 xx = yy = np.linspace(LO, HI) XX,YY = np.meshgrid(xx,yy) contourf(XX,YY,obj(XX,YY), 100) xlim(LO, HI) ylim(LO, HI) xlabel('x') ylabel('y') add_constraint(1,0, 10) add_constraint(1,0, -10) add_constraint(0,1, -10) add_constraint(0,1, 10) plot(x.value(), y.value(), markersize=30, marker='*') colorbar() prob += (x+0.8*y >= 3), "extra constraint" prob += (x-0.8*y <= -3), "c2" #prob += (x-0.8*y == 3), "c3" prob.solve() XX,YY = np.meshgrid(xx,yy) contourf(XX,YY,obj(XX,YY), 100) xlim(LO, HI) ylim(LO, HI) xlabel('x') ylabel('y') add_constraint(1,0.8,3) add_constraint(1,-0.8,-3) add_constraint(1,0,10) add_constraint(1,0,-10) add_constraint(0,1,-10) add_constraint(0,1,10) plot(x.value(), y.value(), markersize=30, marker='*') colorbar() prob x.value(), y.value()