def test_unpack_results(self): """Test unpack results method. """ with self.assertRaises(Exception) as cm: Problem(Minimize(exp(self.a))).unpack_results("blah", None) self.assertEqual(str(cm.exception), "Unknown solver.") prob = Problem(Minimize(exp(self.a)), [self.a == 0]) args = prob.get_problem_data(s.SCS) results_dict = scs.solve(*args) prob = Problem(Minimize(exp(self.a)), [self.a == 0]) prob.unpack_results(s.SCS, results_dict) self.assertAlmostEqual(self.a.value, 0, places=4) self.assertAlmostEqual(prob.value, 1, places=3) self.assertAlmostEqual(prob.status, s.OPTIMAL) prob = Problem(Minimize(norm(self.x)), [self.x == 0]) args = prob.get_problem_data(s.ECOS) results_dict = ecos.solve(*args) prob = Problem(Minimize(norm(self.x)), [self.x == 0]) prob.unpack_results(s.ECOS, results_dict) self.assertItemsAlmostEqual(self.x.value, [0, 0]) self.assertAlmostEqual(prob.value, 0) self.assertAlmostEqual(prob.status, s.OPTIMAL) prob = Problem(Minimize(norm(self.x)), [self.x == 0]) args = prob.get_problem_data(s.CVXOPT) results_dict = cvxopt.solvers.conelp(*args) prob = Problem(Minimize(norm(self.x)), [self.x == 0]) prob.unpack_results(s.CVXOPT, results_dict) self.assertItemsAlmostEqual(self.x.value, [0, 0]) self.assertAlmostEqual(prob.value, 0) self.assertAlmostEqual(prob.status, s.OPTIMAL)
def test_unpack_results(self): """Test unpack results method. """ with self.assertRaises(Exception) as cm: Problem(Minimize(exp(self.a))).unpack_results("blah", None) self.assertEqual(str(cm.exception), "Unknown solver.") prob = Problem(Minimize(exp(self.a)), [self.a == 0]) args = prob.get_problem_data(s.SCS) results_dict = scs.solve(*args) prob = Problem(Minimize(exp(self.a)), [self.a == 0]) prob.unpack_results(s.SCS, results_dict) self.assertAlmostEqual(self.a.value, 0, places=4) self.assertAlmostEqual(prob.value, 1, places=3) self.assertAlmostEqual(prob.status, s.OPTIMAL) prob = Problem(Minimize(norm(self.x)), [self.x == 0]) args = prob.get_problem_data(s.ECOS) results_dict = ecos.solve(*args) prob = Problem(Minimize(norm(self.x)), [self.x == 0]) prob.unpack_results(s.ECOS, results_dict) self.assertItemsAlmostEqual(self.x.value, [0,0]) self.assertAlmostEqual(prob.value, 0) self.assertAlmostEqual(prob.status, s.OPTIMAL) prob = Problem(Minimize(norm(self.x)), [self.x == 0]) args = prob.get_problem_data(s.CVXOPT) results_dict = cvxopt.solvers.conelp(*args) prob = Problem(Minimize(norm(self.x)), [self.x == 0]) prob.unpack_results(s.CVXOPT, results_dict) self.assertItemsAlmostEqual(self.x.value, [0,0]) self.assertAlmostEqual(prob.value, 0) self.assertAlmostEqual(prob.status, s.OPTIMAL)
def test_presolve_constant_constraints(self): """Test that the presolver removes constraints with no variables. """ x = Variable() obj = Maximize(sqrt(x)) prob = Problem(obj) c, G, h, dims, A, b = prob.get_problem_data(s.ECOS) for row in range(A.shape[0]): assert A[row, :].nnz > 0 for row in range(G.shape[0]): assert G[row, :].nnz > 0
def test_presolve_constant_constraints(self): """Test that the presolver removes constraints with no variables. """ x = Variable() obj = Maximize(sqrt(x)) prob = Problem(obj) c, G, h, dims, A, b = prob.get_problem_data(s.ECOS) for row in range(A.shape[0]): assert A[row, :].nnz > 0 for row in range(G.shape[0]): assert G[row, :].nnz > 0
def scs_coniclift(x, constraints): """ Return (A, b, K) so that {x : x satisfies constraints} can be written as {x : exists y where A @ [x; y] + b in K}. Parameters ---------- x: cvxpy.Variable constraints: list of cvxpy.constraints.constraint.Constraint Each Constraint object must be DCP-compatible. Notes ----- This function DOES NOT work when ``x`` has attributes, like ``PSD=True``, ``diag=True``, ``symmetric=True``, etc... """ from cvxpy.problems.problem import Problem from cvxpy.problems.objective import Minimize from cvxpy.atoms.affine.sum import sum prob = Problem(Minimize(sum(x)), constraints) # ^ The objective value is only used to make sure that "x" # participates in the problem. So, if constraints is an # empty list, then the support function is the standard # support function for R^n. data, chain, invdata = prob.get_problem_data(solver='SCS') inv = invdata[-2] x_offset = inv.var_offsets[x.id] x_indices = np.arange(x_offset, x_offset + x.size) A = data['A'] x_selector = np.zeros(shape=(A.shape[1], ), dtype=bool) x_selector[x_indices] = True A_x = A[:, x_selector] A_other = A[:, ~x_selector] A = -sparse.hstack([A_x, A_other]) b = data['b'] K = data['dims'] return A, b, K