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")
|
logger.info(f"Converted {n_converted} inequalities into equalities")
|
||||||
|
|
||||||
def after_solve(self, solver, instance, model, results):
|
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):
|
def fit(self, training_instances):
|
||||||
logger.debug("Extracting x and y...")
|
logger.debug("Extracting x and y...")
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ class DropRedundantInequalitiesStep(Component):
|
|||||||
logger.info("Extracted %d predicted constraints" % len(self.pool))
|
logger.info("Extracted %d predicted constraints" % len(self.pool))
|
||||||
|
|
||||||
def after_solve(self, solver, instance, model, results):
|
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):
|
def fit(self, training_instances):
|
||||||
logger.debug("Extracting x and y...")
|
logger.debug("Extracting x and y...")
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ def _setup():
|
|||||||
|
|
||||||
internal = solver.internal_solver = Mock(spec=InternalSolver)
|
internal = solver.internal_solver = Mock(spec=InternalSolver)
|
||||||
internal.get_constraint_ids = Mock(return_value=["c1", "c2", "c3", "c4"])
|
internal.get_constraint_ids = Mock(return_value=["c1", "c2", "c3", "c4"])
|
||||||
internal.get_constraint_slacks = Mock(
|
internal.get_inequality_slacks = Mock(
|
||||||
side_effect=lambda: {
|
side_effect=lambda: {
|
||||||
"c1": 0.5,
|
"c1": 0.5,
|
||||||
"c2": 0.0,
|
"c2": 0.0,
|
||||||
@@ -112,8 +112,8 @@ def test_drop_redundant():
|
|||||||
# LearningSolver calls after_solve
|
# LearningSolver calls after_solve
|
||||||
component.after_solve(solver, instance, None, None)
|
component.after_solve(solver, instance, None, None)
|
||||||
|
|
||||||
# Should query slack for all constraints
|
# Should query slack for all inequalities
|
||||||
internal.get_constraint_slacks.assert_called_once()
|
internal.get_inequality_slacks.assert_called_once()
|
||||||
|
|
||||||
# Should store constraint slacks in instance object
|
# Should store constraint slacks in instance object
|
||||||
assert hasattr(instance, "slacks")
|
assert hasattr(instance, "slacks")
|
||||||
|
|||||||
@@ -271,8 +271,9 @@ class GurobiSolver(InternalSolver):
|
|||||||
else:
|
else:
|
||||||
raise Exception("Unknown sense: %s" % sense)
|
raise Exception("Unknown sense: %s" % sense)
|
||||||
|
|
||||||
def get_constraint_slacks(self):
|
def get_inequality_slacks(self):
|
||||||
return {c.ConstrName: c.Slack for c in self.model.getConstrs()}
|
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):
|
def set_constraint_sense(self, cid, sense):
|
||||||
c = self.model.getConstrByName(cid)
|
c = self.model.getConstrByName(cid)
|
||||||
|
|||||||
@@ -184,7 +184,7 @@ class InternalSolver(ABC):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def get_constraint_slacks(self):
|
def get_inequality_slacks(self):
|
||||||
"""
|
"""
|
||||||
Returns a dictionary mapping constraint name to the constraint slack
|
Returns a dictionary mapping constraint name to the constraint slack
|
||||||
in the current solution.
|
in the current solution.
|
||||||
|
|||||||
@@ -252,7 +252,7 @@ class BasePyomoSolver(InternalSolver):
|
|||||||
def relax(self):
|
def relax(self):
|
||||||
raise Exception("not implemented")
|
raise Exception("not implemented")
|
||||||
|
|
||||||
def get_constraint_slacks(self):
|
def get_inequality_slacks(self):
|
||||||
raise Exception("not implemented")
|
raise Exception("not implemented")
|
||||||
|
|
||||||
def set_constraint_sense(self, cid, sense):
|
def set_constraint_sense(self, cid, sense):
|
||||||
|
|||||||
Reference in New Issue
Block a user