Пример #1
0
 def test_curvature(self):
     x = cp.Variable(3)
     expr = cp.length(x)
     self.assertEqual(expr.curvature, s.QUASICONVEX)
     expr = -cp.length(x)
     self.assertEqual(expr.curvature, s.QUASICONCAVE)
     expr = cp.ceil(x)
     self.assertEqual(expr.curvature, s.QUASILINEAR)
     self.assertTrue(expr.is_quasilinear())
Пример #2
0
    def test_length(self):
        x = cp.Variable(5)
        expr = cp.length(x)
        self.assertTrue(expr.is_dqcp())
        self.assertTrue(expr.is_quasiconvex())
        self.assertFalse(expr.is_quasiconcave())

        problem = cp.Problem(cp.Minimize(expr), [x[0] == 2.0, x[1] == 1.0])
        problem.solve(SOLVER, qcp=True)
        self.assertEqual(problem.objective.value, 2)
        np.testing.assert_almost_equal(x.value, np.array([2, 1, 0, 0, 0]))
Пример #3
0
    def test_card_ls(self):
        n = 10
        np.random.seed(0)
        A = np.random.randn(n, n)
        x_star = np.random.randn(n)
        b = cp.matmul(A, x_star)
        epsilon = 1e-3

        x = cp.Variable(n)
        objective_fn = cp.length(x)
        mse = cp.sum_squares(cp.matmul(A, x) - b) / n
        problem = cp.Problem(cp.Minimize(objective_fn), [mse <= epsilon])
        # smoke test
        problem.solve(SOLVER, qcp=True)
Пример #4
0
def example_min_len_least_squares():
    n = 10
    np.random.seed(1)
    A = np.random.randn(n, n)
    x_star = np.random.randn(n)
    b = A @ x_star
    epsilon = 1e-2
    x = cp.Variable(n)
    mse = cp.sum_squares(A @ x - b) / n
    problem = cp.Problem(cp.Minimize(cp.length(x)), [mse <= epsilon])
    print("Is problem DQCP?: ", problem.is_dqcp())

    problem.solve(qcp=True)
    print("Found a solution, with length: ", problem.value)
Пример #5
0
    def test_length_example(self) -> None:
        """Fix #1760."""
        n = 10
        np.random.seed(1)
        A = np.random.randn(n, n)
        x_star = np.random.randn(n)
        b = A @ x_star
        epsilon = 1e-2
        x = cp.Variable(n)
        mse = cp.sum_squares(A @ x - b) / n
        problem = cp.Problem(cp.Minimize(cp.length(x)), [mse <= epsilon])
        assert problem.is_dqcp()

        problem.solve(qcp=True)
        assert np.isclose(problem.value, 8)
Пример #6
0
 def test_infeasible(self):
     x = cp.Variable(2)
     problem = cp.Problem(cp.Minimize(cp.length(x)),
                          [x == -1, cp.ceil(x) >= 1])
     problem.solve(SOLVER, qcp=True)
     self.assertIn(problem.status, (s.INFEASIBLE, s.INFEASIBLE_INACCURATE))