コード例 #1
0
 def test_qp_maximization_reduction_path_qp_solver(self):
     qp_maximization = Problem(Maximize(QuadForm(self.x, -self.Q)),
                               [self.x <= -1])
     path = PathFinder().reduction_path(ProblemType(qp_maximization),
                                        [QpSolver])
     self.assertEquals(3, len(path))
     self.assertEquals(path[1], QpMatrixStuffing)
     self.assertEquals(path[2], FlipObjective)
コード例 #2
0
ファイル: test_qp.py プロジェクト: jleamer/convex-polarimetry
 def quad_form_bound(self, solver):
     P = np.array([[13, 12, -2], [12, 17, 6], [-2, 6, 12]])
     q = np.array([[-22], [-14.5], [13]])
     r = 1
     y_star = np.array([[1], [0.5], [-1]])
     p = Problem(Minimize(0.5 * QuadForm(self.y, P) + q.T * self.y + r),
                 [self.y >= -1, self.y <= 1])
     self.solve_QP(p, solver)
     for var in p.variables():
         self.assertItemsAlmostEqual(y_star, var.value, places=4)
コード例 #3
0
ファイル: test_qp.py プロジェクト: jleamer/convex-polarimetry
 def quad_form_coeff(self, solver):
     np.random.seed(0)
     A = np.random.randn(5, 5)
     z = np.random.randn(5)
     P = A.T.dot(A)
     q = -2 * P.dot(z)
     p = Problem(Minimize(QuadForm(self.w, P) + q.T * self.w))
     self.solve_QP(p, solver)
     for var in p.variables():
         self.assertItemsAlmostEqual(z, var.value, places=4)
コード例 #4
0
 def quad_form_bound(self, solver):
     P = numpy.matrix([[13, 12, -2], [12, 17, 6], [-2, 6, 12]])
     q = numpy.matrix([[-22], [-14.5], [13]])
     r = 1
     y_star = numpy.matrix([[1], [0.5], [-1]])
     p = Problem(Minimize(0.5 * QuadForm(self.y, P) + q.T * self.y + r),
                 [self.y >= -1, self.y <= 1])
     s = self.solve_QP(p, solver)
     for var in p.variables():
         self.assertItemsAlmostEqual(y_star, s.primal_vars[var.id])
コード例 #5
0
 def quad_form_coeff(self, solver):
     numpy.random.seed(0)
     A = numpy.random.randn(5, 5)
     z = numpy.random.randn(5, 1)
     P = A.T.dot(A)
     q = -2 * P.dot(z)
     p = Problem(Minimize(QuadForm(self.w, P) + q.T * self.w))
     qp_solution = self.solve_QP(p, solver)
     for var in p.variables():
         self.assertItemsAlmostEqual(z, qp_solution.primal_vars[var.id])
コード例 #6
0
    def stuffed_objective(self, problem, extractor):
        # extract to x.T * P * x + q.T * x + r
        expr = problem.objective.expr.copy()
        P, q, r = extractor.quad_form(expr)

        # concatenate all variables in one vector
        boolean, integer = extract_mip_idx(problem.variables())
        x = Variable(extractor.x_length, boolean=boolean, integer=integer)
        new_obj = QuadForm(x, P) + q.T @ x

        return new_obj, x, r
コード例 #7
0
    def stuffed_objective(self, problem, extractor):
        # extract to x.T * P * x + q.T * x + r
        # TODO need to copy objective?
        P, q, r = extractor.quad_form(problem.objective.expr)

        # concatenate all variables in one vector
        boolean, integer = extract_mip_idx(problem.variables())
        x = Variable(extractor.N, boolean=boolean, integer=integer)
        new_obj = QuadForm(x, P) + q.T*x

        return new_obj, x, r
コード例 #8
0
 def rep_quad_form(self, solver) -> None:
     """A problem where the quad_form term is used multiple times.
     """
     np.random.seed(0)
     A = np.random.randn(5, 5)
     z = np.random.randn(5)
     P = A.T.dot(A)
     q = -2 * P.dot(z)
     qf = QuadForm(self.w, P)
     p = Problem(Minimize(0.5 * qf + 0.5 * qf + q.T @ self.w))
     self.solve_QP(p, solver)
     for var in p.variables():
         self.assertItemsAlmostEqual(z, var.value, places=4)
コード例 #9
0
ファイル: qp_matrix_stuffing.py プロジェクト: zhb0318/cvxpy
    def stuffed_objective(self, problem, inverse_data):
        # We need to copy the problem because we are changing atoms in the
        # expression tree
        problem_copy = problems.problem.Problem(
            Minimize(problem.objective.expr.tree_copy()),
            [con.tree_copy() for con in problem.constraints])
        inverse_data_of_copy = InverseData(problem_copy)
        extractor = CoeffExtractor(inverse_data_of_copy)
        # extract to x.T * P * x + q.T * x, store r
        P, q, r = extractor.quad_form(problem_copy.objective.expr)

        # concatenate all variables in one vector
        boolean, integer = extract_mip_idx(problem.variables())
        x = Variable(inverse_data.x_length, boolean=boolean, integer=integer)
        new_obj = QuadForm(x, P) + q.T * x

        inverse_data.r = r
        return new_obj, x
コード例 #10
0
ファイル: test_qp.py プロジェクト: jleamer/convex-polarimetry
    def equivalent_forms_2(self, solver):
        m = 100
        n = 80
        r = 70
        np.random.seed(1)
        A = np.random.randn(m, n)
        b = np.random.randn(m)
        G = np.random.randn(r, n)
        h = np.random.randn(r)

        # ||Ax-b||^2 = x^T (A^T A) x - 2(A^T b)^T x + ||b||^2
        P = np.dot(A.T, A)
        q = -2 * np.dot(A.T, b)
        r = np.dot(b.T, b)

        obj2 = .1 * (QuadForm(self.xef, P) + q.T * self.xef + r)
        cons = [G * self.xef == h]

        p2 = Problem(Minimize(obj2), cons)
        self.solve_QP(p2, solver)
        self.assertAlmostEqual(p2.value, 68.1119420108, places=4)
コード例 #11
0
    def equivalent_forms_2(self, solver):
        m = 100
        n = 80
        r = 70
        numpy.random.seed(1)
        A = numpy.random.randn(m, n)
        b = numpy.random.randn(m, 1)
        G = numpy.random.randn(r, n)
        h = numpy.random.randn(r, 1)

        # ||Ax-b||^2 = x^T (A^T A) x - 2(A^T b)^T x + ||b||^2
        P = numpy.dot(A.T, A)
        q = -2 * numpy.dot(A.T, b)
        r = numpy.dot(b.T, b)

        obj2 = QuadForm(self.xef, P) + q.T * self.xef + r
        cons = [G * self.xef == h]

        p2 = Problem(Minimize(obj2), cons)
        s = self.solve_QP(p2, solver)
        self.assertAlmostEqual(s.opt_val, 681.119420108)
コード例 #12
0
 def setUp(self):
     self.x = Variable(2, name='x')
     self.Q = np.eye(2)
     self.c = np.array([1, 0.5])
     self.qp = Problem(Minimize(QuadForm(self.x, self.Q)), [self.x <= -1])
     self.cp = Problem(Minimize(self.c.T * self.x + 1), [self.x >= 0])