def test_model(): # create solver instance s = Model() # add some variables x = s.addVar("x", vtype = 'C', obj = 1.0) y = s.addVar("y", vtype = 'C', obj = 2.0) assert x.getObj() == 1.0 assert y.getObj() == 2.0 s.setObjective(4.0 * y + 10.5, clear = False) assert x.getObj() == 1.0 assert y.getObj() == 4.0 assert s.getObjoffset() == 10.5 # add some constraint c = s.addCons(x + 2 * y >= 1.0) assert c.isLinear() s.chgLhs(c, 5.0) s.chgRhs(c, 6.0) assert s.getLhs(c) == 5.0 assert s.getRhs(c) == 6.0 # solve problem s.optimize() solution = s.getBestSol() # print solution assert (s.getVal(x) == s.getSolVal(solution, x)) assert (s.getVal(y) == s.getSolVal(solution, y)) assert round(s.getVal(x)) == 5.0 assert round(s.getVal(y)) == 0.0 assert s.getSlack(c, solution) == 0.0 assert s.getSlack(c, solution, 'lhs') == 0.0 assert s.getSlack(c, solution, 'rhs') == 1.0 assert s.getActivity(c, solution) == 5.0 s.writeProblem('model') s.writeProblem('model.lp') s.freeProb() s = Model() x = s.addVar("x", vtype = 'C', obj = 1.0) y = s.addVar("y", vtype = 'C', obj = 2.0) c = s.addCons(x + 2 * y <= 1.0) s.setMaximize() s.delCons(c) s.optimize() assert s.getStatus() == 'unbounded'
def test_model(): # create solver instance s = Model() # add some variables x = s.addVar("x", vtype='C', obj=1.0) y = s.addVar("y", vtype='C', obj=2.0) assert x.getObj() == 1.0 assert y.getObj() == 2.0 s.setObjective(4.0 * y + 10.5, clear=False) assert x.getObj() == 1.0 assert y.getObj() == 4.0 assert s.getObjoffset() == 10.5 # add some constraint c = s.addCons(x + 2 * y >= 1.0) s.chgLhs(c, 5.0) s.chgRhs(c, 6.0) assert s.getLhs(c) == 5.0 assert s.getRhs(c) == 6.0 badsolution = s.createSol() s.setSolVal(badsolution, x, 2.0) s.setSolVal(badsolution, y, 2.0) assert s.getSlack(c, badsolution) == 0.0 assert s.getSlack(c, badsolution, 'lhs') == 1.0 assert s.getSlack(c, badsolution, 'rhs') == 0.0 assert s.getActivity(c, badsolution) == 6.0 s.freeSol(badsolution) # solve problem s.optimize() solution = s.getBestSol() # print solution assert (s.getVal(x) == s.getSolVal(solution, x)) assert (s.getVal(y) == s.getSolVal(solution, y)) assert round(s.getVal(x)) == 5.0 assert round(s.getVal(y)) == 0.0 assert s.getSlack(c, solution) == 0.0 assert s.getSlack(c, solution, 'lhs') == 0.0 assert s.getSlack(c, solution, 'rhs') == 1.0 assert s.getActivity(c, solution) == 5.0 s.freeProb() s = Model() x = s.addVar("x", vtype='C', obj=1.0) y = s.addVar("y", vtype='C', obj=2.0) c = s.addCons(x + 2 * y <= 1.0) s.setMaximize() s.delCons(c) s.optimize() assert s.getStatus() == 'unbounded'
def test_lp(): # create solver instance s = Model() # add some variables x = s.addVar("x", vtype='C', obj=1.0) y = s.addVar("y", vtype='C', obj=2.0) assert x.getObj() == 1.0 assert y.getObj() == 2.0 s.setObjective(4.0 * y, clear=False) assert x.getObj() == 1.0 assert y.getObj() == 4.0 # add some constraint c = s.addCons(x + 2 * y >= 1.0) s.chgLhs(c, 5.0) s.chgRhs(c, 5.0) # solve problem s.optimize() solution = s.getBestSol() # print solution assert (s.getVal(x) == s.getSolVal(solution, x)) assert (s.getVal(y) == s.getSolVal(solution, y)) assert round(s.getVal(x)) == 5.0 assert round(s.getVal(y)) == 0.0 s.freeProb() s = Model() x = s.addVar("x", vtype='C', obj=1.0) y = s.addVar("y", vtype='C', obj=2.0) c = s.addCons(x + 2 * y <= 1.0) s.setMaximize() s.delCons(c) s.optimize() assert s.getStatus() == 'unbounded'
def contains_scip(self,x): """Uses pyscipopt... found to be much slower than cvxopt.""" from pyscipopt import Model,quicksum if not hasattr(self,'model'): model = Model("Vpolytope") M = 1000 zs = [] z0 = model.addVar(vtype="C", name="z0", lb=-M, ub=M) zs.append(z0) for i in xrange(self.vertices.shape[1]): zi = model.addVar(vtype="C", name="z"+str(i+1), lb=-M, ub=M) zs.append(zi) # Set up inequality constraints for i in xrange(self.vertices.shape[0]): model.addCons(quicksum(zi*xi for (zi,xi) in zip(zs[1:],self.vertices[i])) <= 0,name="v"+str(i)) #set up bound bnd = model.addCons(quicksum(zi*xi for (zi,xi) in zip(zs[1:],x))-z0 <= 1, name='bound') model.data = zs,bnd #TODO: need to upgrade pyscipopt #self.model = model else: model = self.model zs,bnd = model.data z0 = zs[0] model.chgLhs(bnd,quicksum(zi*xi for (zi,xi) in zip(zs[1:],x))-z0) # Set up objective model.setObjective(quicksum(zi*xi for (zi,xi) in zip(zs[1:],x))-z0, 'maximize') t0 = time.time() #print "Beginning SCIP optimization..." model.hideOutput() model.optimize() t1 = time.time() #print "SOLVE TIME",t1-t0 #print "STATUS:",model.getStatus() if model.getStatus() != 'optimal': return True #print "Optimal value :",model.getObjVal() if model.getObjVal() < 1e-6*math.sqrt(self.vertices.shape[1]): return True return False
def test_model(): # create solver instance s = Model() # test parameter methods pric = s.getParam('lp/pricing') s.setParam('lp/pricing', 'q') assert 'q' == s.getParam('lp/pricing') s.setParam('lp/pricing', pric) s.setParam('visual/vbcfilename', 'vbcfile') assert 'vbcfile' == s.getParam('visual/vbcfilename') assert 'lp/pricing' in s.getParams() s.setParams({'visual/vbcfilename': '-'}) assert '-' == s.getParam('visual/vbcfilename') # add some variables x = s.addVar("x", vtype='C', obj=1.0) y = s.addVar("y", vtype='C', obj=2.0) assert x.getObj() == 1.0 assert y.getObj() == 2.0 s.setObjective(4.0 * y + 10.5, clear=False) assert x.getObj() == 1.0 assert y.getObj() == 4.0 assert s.getObjoffset() == 10.5 # add some constraint c = s.addCons(x + 2 * y >= 1.0) assert c.isLinear() s.chgLhs(c, 5.0) s.chgRhs(c, 6.0) assert s.getLhs(c) == 5.0 assert s.getRhs(c) == 6.0 # solve problem s.optimize() solution = s.getBestSol() # print solution assert (s.getVal(x) == s.getSolVal(solution, x)) assert (s.getVal(y) == s.getSolVal(solution, y)) assert round(s.getVal(x)) == 5.0 assert round(s.getVal(y)) == 0.0 assert s.getSlack(c, solution) == 0.0 assert s.getSlack(c, solution, 'lhs') == 0.0 assert s.getSlack(c, solution, 'rhs') == 1.0 assert s.getActivity(c, solution) == 5.0 # check expression evaluations expr = x * x + 2 * x * y + y * y expr2 = x + 1 assert s.getVal(expr) == s.getSolVal(solution, expr) assert s.getVal(expr2) == s.getSolVal(solution, expr2) assert round(s.getVal(expr)) == 25.0 assert round(s.getVal(expr2)) == 6.0 s.writeProblem('model') s.writeProblem('model.lp') s.freeProb() s = Model() x = s.addVar("x", vtype='C', obj=1.0) y = s.addVar("y", vtype='C', obj=2.0) c = s.addCons(x + 2 * y <= 1.0) s.setMaximize() s.delCons(c) s.optimize() assert s.getStatus() == 'unbounded'