Example #1
0
    def test_scalar_lp(self):
        p = Problem(Minimize(3*self.a), [self.a >= 2])
        result = p.solve()
        self.assertAlmostEqual(result, 6)
        self.assertAlmostEqual(self.a.value, 2)

        p = Problem(Maximize(3*self.a - self.b),
            [self.a <= 2, self.b == self.a, self.b <= 5])
        result = p.solve()
        self.assertAlmostEqual(result, 4.0)
        self.assertAlmostEqual(self.a.value, 2)
        self.assertAlmostEqual(self.b.value, 2)

        # With a constant in the objective.
        p = Problem(Minimize(3*self.a - self.b + 100),
            [self.a >= 2,
             self.b + 5*self.c - 2 == self.a,
             self.b <= 5 + self.c])
        result = p.solve()
        self.assertAlmostEqual(result, 101 + 1.0/6)
        self.assertAlmostEqual(self.a.value, 2)
        self.assertAlmostEqual(self.b.value, 5-1.0/6)
        self.assertAlmostEqual(self.c.value, -1.0/6)

        # Test get_status.
        exp = Maximize(self.a)
        p = Problem(exp, [self.a <= 2])
        status = s.get_status(p.solve(solver=s.ECOS))
        self.assertEqual(status, s.SOLVED)

        # Unbounded problems.
        p = Problem(Maximize(self.a), [self.a >= 2])
        status = s.get_status(p.solve(solver=s.ECOS))
        self.assertEqual(status, s.UNBOUNDED)

        p = Problem(Maximize(self.a), [self.a >= 2])
        status = s.get_status(p.solve(solver=s.CVXOPT))
        self.assertEqual(status, s.UNBOUNDED)

        # Infeasible problems.
        p = Problem(Maximize(self.a), [self.a >= 2, self.a <= 1])
        status = s.get_status(p.solve(solver=s.ECOS))
        self.assertEqual(status, s.INFEASIBLE)

        p = Problem(Maximize(self.a), [self.a >= 2, self.a <= 1])
        status = s.get_status(p.solve(solver=s.ECOS))
        self.assertEqual(status, s.INFEASIBLE)
Example #2
0
    def test_sdp_symmetry(self):
        # TODO should these raise exceptions?
        # with self.assertRaises(Exception) as cm:
        #     lambda_max([[1,2],[3,4]])
        # self.assertEqual(str(cm.exception), "lambda_max called on non-symmetric matrix.")

        # with self.assertRaises(Exception) as cm:
        #     lambda_min([[1,2],[3,4]])
        # self.assertEqual(str(cm.exception), "lambda_min called on non-symmetric matrix.")

        p = Problem(Minimize(lambda_max(self.A)), [self.A >= 2])
        result = p.solve()
        self.assertItemsAlmostEqual(self.A.value, self.A.value.T)

        p = Problem(Minimize(lambda_max(self.A)), [self.A == [[1,2],[3,4]]])
        status = s.get_status(p.solve())
        self.assertEqual(status, s.INFEASIBLE)