mirror of
https://github.com/ANL-CEEESA/MIPLearn.git
synced 2025-12-06 09:28:51 -06:00
LearningSolver: fix node count for non-compatible solvers
This commit is contained in:
@@ -29,7 +29,7 @@ class LearningSolver:
|
|||||||
gap_limit=None,
|
gap_limit=None,
|
||||||
internal_solver_factory=_gurobi_factory,
|
internal_solver_factory=_gurobi_factory,
|
||||||
components=None,
|
components=None,
|
||||||
mode=None):
|
mode="exact"):
|
||||||
self.is_persistent = None
|
self.is_persistent = None
|
||||||
self.internal_solver = None
|
self.internal_solver = None
|
||||||
self.components = components
|
self.components = components
|
||||||
@@ -38,19 +38,18 @@ class LearningSolver:
|
|||||||
self.time_limit = time_limit
|
self.time_limit = time_limit
|
||||||
self.gap_limit = gap_limit
|
self.gap_limit = gap_limit
|
||||||
self.tee = False
|
self.tee = False
|
||||||
|
self.mode = mode
|
||||||
|
|
||||||
if self.components is not None:
|
if self.components is not None:
|
||||||
assert isinstance(self.components, dict)
|
assert isinstance(self.components, dict)
|
||||||
else:
|
else:
|
||||||
self.components = {
|
self.components = {
|
||||||
"warm-start": WarmStartComponent(),
|
"warm-start": WarmStartComponent(),
|
||||||
#"branch-priority": BranchPriorityComponent(),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if mode is not None:
|
assert self.mode in ["exact", "heuristic"]
|
||||||
assert mode in ["exact", "heuristic"]
|
for component in self.components.values():
|
||||||
for component in self.components.values():
|
component.mode = self.mode
|
||||||
component.mode = mode
|
|
||||||
|
|
||||||
def _create_solver(self):
|
def _create_solver(self):
|
||||||
self.internal_solver = self.internal_solver_factory()
|
self.internal_solver = self.internal_solver_factory()
|
||||||
@@ -82,7 +81,10 @@ class LearningSolver:
|
|||||||
else:
|
else:
|
||||||
solve_results = self.internal_solver.solve(model, tee=tee, warmstart=is_warm_start_available)
|
solve_results = self.internal_solver.solve(model, tee=tee, warmstart=is_warm_start_available)
|
||||||
|
|
||||||
solve_results["Solver"][0]["Nodes"] = self.internal_solver._solver_model.getAttr("NodeCount")
|
if hasattr(self.internal_solver, "_solver_model"):
|
||||||
|
solve_results["Solver"][0]["Nodes"] = self.internal_solver._solver_model.getAttr("NodeCount")
|
||||||
|
else:
|
||||||
|
solve_results["Solver"][0]["Nodes"] = 1
|
||||||
|
|
||||||
for component in self.components.values():
|
for component in self.components.values():
|
||||||
component.after_solve(self, instance, model)
|
component.after_solve(self, instance, model)
|
||||||
|
|||||||
Reference in New Issue
Block a user