def test_is_feasible_function(self): m = ConcreteModel() m.x = Var(bounds=(0, 3), initialize=2) m.c = Constraint(expr=m.x == 2) self.assertTrue(is_feasible(m, GDPoptSolver.CONFIG())) m.c2 = Constraint(expr=m.x <= 1) self.assertFalse(is_feasible(m, GDPoptSolver.CONFIG())) m = ConcreteModel() m.x = Var(bounds=(0, 3), initialize=2) m.c = Constraint(expr=m.x >= 5) self.assertFalse(is_feasible(m, GDPoptSolver.CONFIG())) m = ConcreteModel() m.x = Var(bounds=(3, 3), initialize=2) self.assertFalse(is_feasible(m, GDPoptSolver.CONFIG())) m = ConcreteModel() m.x = Var(bounds=(0, 1), initialize=2) self.assertFalse(is_feasible(m, GDPoptSolver.CONFIG())) m = ConcreteModel() m.x = Var(bounds=(0, 1), initialize=2) m.d = Disjunct() with self.assertRaisesRegexp(NotImplementedError, "Found active disjunct"): is_feasible(m, GDPoptSolver.CONFIG())
def test_solve_linear_GDP_unbounded(self): m = ConcreteModel() m.GDPopt_utils = Block() m.x = Var(bounds=(-1, 10)) m.y = Var(bounds=(2, 3)) m.z = Var() m.d = Disjunction(expr=[[m.x + m.y >= 5], [m.x - m.y <= 3]]) m.o = Objective(expr=m.z) m.GDPopt_utils.variable_list = [m.x, m.y, m.z] m.GDPopt_utils.disjunct_list = [ m.d._autodisjuncts[0], m.d._autodisjuncts[1] ] output = StringIO() with LoggingIntercept(output, 'pyomo.contrib.gdpopt', logging.WARNING): solve_linear_GDP(m, GDPoptSolveData(), GDPoptSolver.CONFIG(dict(mip_solver=mip_solver))) self.assertIn( "Linear GDP was unbounded. Resolving with arbitrary bound values", output.getvalue().strip())