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