|
4 | 4 | from os import environ
|
5 | 5 |
|
6 | 6 | import networkx as nx
|
| 7 | +from mip.entities import LinExpr |
7 | 8 | import mip.gurobi
|
8 | 9 | import mip.highs
|
9 | 10 | from mip import Model, xsum, OptimizationStatus, MAXIMIZE, BINARY, INTEGER
|
@@ -578,6 +579,28 @@ def test_obj_const2(self, solver: str):
|
578 | 579 | assert model.objective_const == 1
|
579 | 580 |
|
580 | 581 |
|
| 582 | +@skip_on(NotImplementedError) |
| 583 | +@pytest.mark.parametrize("solver", SOLVERS) |
| 584 | +@pytest.mark.parametrize("constraint, lb, ub", [ |
| 585 | + (lambda x: x + x >= 3, 1, 2), |
| 586 | + (lambda x: x - x >= 0, 1, 2), |
| 587 | + (lambda x: x == x, 1, 2), |
| 588 | + (lambda x: x >= x, 1, 2), |
| 589 | + (lambda x: x <= x, -2, -1), |
| 590 | + # (lambda x: LinExpr([x, x, x], [2, -1, -1], sense="="), 1, 2), |
| 591 | +]) |
| 592 | +def test_identical_vars(solver: str, constraint, lb, ub): |
| 593 | + """Try if constraints are correctly added when variables are identical""" |
| 594 | + m = Model(solver_name=solver) |
| 595 | + x = m.add_var(name="x", lb=lb, ub=ub, obj=1) |
| 596 | + |
| 597 | + m.add_constr(constraint(x)) |
| 598 | + |
| 599 | + m.optimize() |
| 600 | + assert m.status == OptimizationStatus.OPTIMAL |
| 601 | + assert lb - TOL <= x.x <= ub + TOL |
| 602 | + |
| 603 | + |
581 | 604 | @skip_on(NotImplementedError)
|
582 | 605 | @pytest.mark.parametrize("val", range(1, 4))
|
583 | 606 | @pytest.mark.parametrize("solver", SOLVERS)
|
|
0 commit comments