mirror of
https://github.com/ANL-CEEESA/MIPLearn.git
synced 2025-12-06 09:28:51 -06:00
ConvertTightIneqs: Convert only inequalities, not equalities
This commit is contained in:
@@ -57,7 +57,7 @@ class ConvertTightIneqsIntoEqsStep(Component):
|
||||
logger.info(f"Converted {n_converted} inequalities into equalities")
|
||||
|
||||
def after_solve(self, solver, instance, model, results):
|
||||
instance.slacks = solver.internal_solver.get_constraint_slacks()
|
||||
instance.slacks = solver.internal_solver.get_inequality_slacks()
|
||||
|
||||
def fit(self, training_instances):
|
||||
logger.debug("Extracting x and y...")
|
||||
|
||||
@@ -68,7 +68,7 @@ class DropRedundantInequalitiesStep(Component):
|
||||
logger.info("Extracted %d predicted constraints" % len(self.pool))
|
||||
|
||||
def after_solve(self, solver, instance, model, results):
|
||||
instance.slacks = solver.internal_solver.get_constraint_slacks()
|
||||
instance.slacks = solver.internal_solver.get_inequality_slacks()
|
||||
|
||||
def fit(self, training_instances):
|
||||
logger.debug("Extracting x and y...")
|
||||
|
||||
@@ -14,7 +14,7 @@ def _setup():
|
||||
|
||||
internal = solver.internal_solver = Mock(spec=InternalSolver)
|
||||
internal.get_constraint_ids = Mock(return_value=["c1", "c2", "c3", "c4"])
|
||||
internal.get_constraint_slacks = Mock(
|
||||
internal.get_inequality_slacks = Mock(
|
||||
side_effect=lambda: {
|
||||
"c1": 0.5,
|
||||
"c2": 0.0,
|
||||
@@ -112,8 +112,8 @@ def test_drop_redundant():
|
||||
# LearningSolver calls after_solve
|
||||
component.after_solve(solver, instance, None, None)
|
||||
|
||||
# Should query slack for all constraints
|
||||
internal.get_constraint_slacks.assert_called_once()
|
||||
# Should query slack for all inequalities
|
||||
internal.get_inequality_slacks.assert_called_once()
|
||||
|
||||
# Should store constraint slacks in instance object
|
||||
assert hasattr(instance, "slacks")
|
||||
|
||||
@@ -271,8 +271,9 @@ class GurobiSolver(InternalSolver):
|
||||
else:
|
||||
raise Exception("Unknown sense: %s" % sense)
|
||||
|
||||
def get_constraint_slacks(self):
|
||||
return {c.ConstrName: c.Slack for c in self.model.getConstrs()}
|
||||
def get_inequality_slacks(self):
|
||||
ineqs = [c for c in self.model.getConstrs() if c.sense != "="]
|
||||
return {c.ConstrName: c.Slack for c in ineqs}
|
||||
|
||||
def set_constraint_sense(self, cid, sense):
|
||||
c = self.model.getConstrByName(cid)
|
||||
|
||||
@@ -184,7 +184,7 @@ class InternalSolver(ABC):
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def get_constraint_slacks(self):
|
||||
def get_inequality_slacks(self):
|
||||
"""
|
||||
Returns a dictionary mapping constraint name to the constraint slack
|
||||
in the current solution.
|
||||
|
||||
@@ -252,7 +252,7 @@ class BasePyomoSolver(InternalSolver):
|
||||
def relax(self):
|
||||
raise Exception("not implemented")
|
||||
|
||||
def get_constraint_slacks(self):
|
||||
def get_inequality_slacks(self):
|
||||
raise Exception("not implemented")
|
||||
|
||||
def set_constraint_sense(self, cid, sense):
|
||||
|
||||
Reference in New Issue
Block a user