Redesign InternalSolver constraint methods

This commit is contained in:
2021-04-10 15:46:53 -05:00
parent f70363db0d
commit 088d679f61
12 changed files with 160 additions and 221 deletions

View File

@@ -16,6 +16,7 @@ logger = logging.getLogger(__name__)
if TYPE_CHECKING:
from miplearn.solvers.learning import InternalSolver
# noinspection PyMethodMayBeStatic
class Instance(ABC, EnforceOverrides):
"""
@@ -170,7 +171,12 @@ class Instance(ABC, EnforceOverrides):
def find_violated_user_cuts(self, model: Any) -> List[Hashable]:
return []
def build_user_cut(self, model: Any, violation: Hashable) -> Any:
def enforce_user_cut(
self,
solver: "InternalSolver",
model: Any,
violation: Hashable,
) -> Any:
return None
def load(self) -> None:

View File

@@ -106,9 +106,14 @@ class PickleGzInstance(Instance):
return self.instance.find_violated_user_cuts(model)
@overrides
def build_user_cut(self, model: Any, violation: Hashable) -> None:
def enforce_user_cut(
self,
solver: "InternalSolver",
model: Any,
violation: Hashable,
) -> None:
assert self.instance is not None
self.instance.build_user_cut(model, violation)
self.instance.enforce_user_cut(solver, model, violation)
@overrides
def load(self) -> None: