|
19 | 19 | max_if_not_None, |
20 | 20 | min_if_not_None, |
21 | 21 | ) |
| 22 | +from pyomo.core.expr.compare import assertExpressionsEqual |
22 | 23 | from pyomo.environ import ( |
| 24 | + Binary, |
23 | 25 | ConcreteModel, |
24 | 26 | Constraint, |
25 | 27 | ConstraintList, |
| 28 | + maximize, |
26 | 29 | Objective, |
27 | 30 | RangeSet, |
| 31 | + Reals, |
28 | 32 | SolverFactory, |
29 | 33 | TransformationFactory, |
30 | 34 | Var, |
@@ -210,6 +214,36 @@ def test_var_update(self): |
210 | 214 | self.assertEqual(m.x.value, 0) |
211 | 215 | self.assertEqual(m.y.value, 0) |
212 | 216 |
|
| 217 | + def test_binary_inequality(self): |
| 218 | + m = ConcreteModel() |
| 219 | + m.x = Var(domain=Binary) |
| 220 | + m.y = Var(domain=Binary) |
| 221 | + m.c = Constraint(expr=m.x == m.y) |
| 222 | + m.o = Objective(expr=0.5 * m.x + m.y, sense=maximize) |
| 223 | + TransformationFactory('contrib.aggregate_vars').apply_to(m) |
| 224 | + var_to_z = m._var_aggregator_info.var_to_z |
| 225 | + z = var_to_z[m.x] |
| 226 | + self.assertIs(var_to_z[m.y], z) |
| 227 | + self.assertEqual(z.domain, Binary) |
| 228 | + self.assertEqual(z.lb, 0) |
| 229 | + self.assertEqual(z.ub, 1) |
| 230 | + assertExpressionsEqual(self, m.o.expr, 0.5 * z + z) |
| 231 | + |
| 232 | + def test_equality_different_domains(self): |
| 233 | + m = ConcreteModel() |
| 234 | + m.x = Var(domain=Reals, bounds=(1, 2)) |
| 235 | + m.y = Var(domain=Binary) |
| 236 | + m.c = Constraint(expr=m.x == m.y) |
| 237 | + m.o = Objective(expr=0.5 * m.x + m.y, sense=maximize) |
| 238 | + TransformationFactory('contrib.aggregate_vars').apply_to(m) |
| 239 | + var_to_z = m._var_aggregator_info.var_to_z |
| 240 | + z = var_to_z[m.x] |
| 241 | + self.assertIs(var_to_z[m.y], z) |
| 242 | + self.assertEqual(z.lb, 1) |
| 243 | + self.assertEqual(z.ub, 1) |
| 244 | + self.assertEqual(z.domain, Binary) |
| 245 | + assertExpressionsEqual(self, m.o.expr, 0.5 * z + z) |
| 246 | + |
213 | 247 |
|
214 | 248 | if __name__ == '__main__': |
215 | 249 | unittest.main() |
0 commit comments