Exemple #1
0
 def test_compute_bounds_fbbt(self):
     """Test computation of disjunctive bounds."""
     m = ConcreteModel()
     m.x = Var(bounds=(0, 8))
     m.d1 = Disjunct()
     m.d1.c = Constraint(expr=m.x >= 2)
     m.d2 = Disjunct()
     m.d2.c = Constraint(expr=m.x <= 4)
     m.disj = Disjunction(expr=[m.d1, m.d2])
     m.obj = Objective(expr=m.x)
     TransformationFactory('contrib.compute_disj_var_bounds').apply_to(m)
     self.assertEqual(m.d1._disj_var_bounds[m.x], (2, 8))
     self.assertEqual(m.d2._disj_var_bounds[m.x], (0, 4))
     self.assertEqual(disjunctive_lb(m.x, m.d1), 2)
     self.assertEqual(disjunctive_ub(m.x, m.d1), 8)
     self.assertEqual(disjunctive_lb(m.x, m.d2), 0)
     self.assertEqual(disjunctive_ub(m.x, m.d2), 4)
Exemple #2
0
 def test_compute_bounds_fbbt(self):
     """Test computation of disjunctive bounds."""
     m = ConcreteModel()
     m.x = Var(bounds=(0, 8))
     m.d1 = Disjunct()
     m.d1.c = Constraint(expr=m.x >= 2)
     m.d2 = Disjunct()
     m.d2.c = Constraint(expr=m.x <= 4)
     m.disj = Disjunction(expr=[m.d1, m.d2])
     m.obj = Objective(expr=m.x)
     TransformationFactory('contrib.compute_disj_var_bounds').apply_to(m)
     self.assertEqual(m.d1._disj_var_bounds[m.x], (2, 8))
     self.assertEqual(m.d2._disj_var_bounds[m.x], (0, 4))
     self.assertEqual(disjunctive_lb(m.x, m.d1), 2)
     self.assertEqual(disjunctive_ub(m.x, m.d1), 8)
     self.assertEqual(disjunctive_lb(m.x, m.d2), 0)
     self.assertEqual(disjunctive_ub(m.x, m.d2), 4)
Exemple #3
0
 def test_nested_fbbt(self):
     m = ConcreteModel()
     m.x = Var(bounds=(0, 8))
     m.y = Var(bounds=(0, 8))
     m.d1 = Disjunct()
     m.d1.c = Constraint(expr=m.x >= 2)
     m.d1.innerD1 = Disjunct()
     m.d1.innerD1.c = Constraint(expr=m.y >= m.x + 3)
     m.d1.innerD2 = Disjunct()
     m.d1.innerD2.c = Constraint(expr=m.y <= m.x - 4)
     m.d1.innerDisj = Disjunction(expr=[m.d1.innerD1, m.d1.innerD2])
     m.d2 = Disjunct()
     m.d2.c = Constraint(expr=m.x == 3)
     m.disj = Disjunction(expr=[m.d1, m.d2])
     TransformationFactory('contrib.compute_disj_var_bounds').apply_to(m)
     self.assertEqual(disjunctive_lb(m.y, m.d1), 0)
     self.assertEqual(disjunctive_lb(m.y, m.d1.innerD1), 5)
     self.assertEqual(disjunctive_ub(m.y, m.d1.innerD2), 4)
Exemple #4
0
 def test_nested_fbbt(self):
     m = ConcreteModel()
     m.x = Var(bounds=(0, 8))
     m.y = Var(bounds=(0, 8))
     m.d1 = Disjunct()
     m.d1.c = Constraint(expr=m.x >= 2)
     m.d1.innerD1 = Disjunct()
     m.d1.innerD1.c = Constraint(expr=m.y >= m.x + 3)
     m.d1.innerD2 = Disjunct()
     m.d1.innerD2.c = Constraint(expr=m.y <= m.x - 4)
     m.d1.innerDisj = Disjunction(expr=[m.d1.innerD1, m.d1.innerD2])
     m.d2 = Disjunct()
     m.d2.c = Constraint(expr=m.x == 3)
     m.disj = Disjunction(expr=[m.d1, m.d2])
     TransformationFactory('contrib.compute_disj_var_bounds').apply_to(m)
     self.assertEqual(disjunctive_lb(m.y, m.d1), 0)
     self.assertEqual(disjunctive_lb(m.y, m.d1.innerD1), 5)
     self.assertEqual(disjunctive_ub(m.y, m.d1.innerD2), 4)