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())
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]))
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)
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)
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)
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))