LearningSolver: fix node count for non-compatible solvers

pull/1/head
Alinson S. Xavier 6 years ago
parent ffb29d2bbb
commit 1213f1d0a5

@ -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)

Loading…
Cancel
Save