diff --git a/miplearn/components/warmstart.py b/miplearn/components/warmstart.py index 25dc8b9..55b111e 100644 --- a/miplearn/components/warmstart.py +++ b/miplearn/components/warmstart.py @@ -14,6 +14,7 @@ from sklearn.preprocessing import StandardScaler from sklearn.model_selection import cross_val_score from sklearn.neighbors import KNeighborsClassifier from tqdm.auto import tqdm +import pyomo.environ as pe import logging logger = logging.getLogger(__name__) @@ -140,6 +141,12 @@ class WarmStartComponent(Component): self.is_warm_start_available = False def before_solve(self, solver, instance, model): + # Solve linear relaxation + lr_solver = pe.SolverFactory("gurobi") + lr_solver.options["threads"] = 4 + lr_solver.options["relax_integrality"] = 1 + lr_solver.solve(model, tee=solver.tee) + # Build x_test x_test = CombinedExtractor([UserFeaturesExtractor(), SolutionExtractor(), diff --git a/miplearn/solvers.py b/miplearn/solvers.py index 8ec7ca0..5c42699 100644 --- a/miplearn/solvers.py +++ b/miplearn/solvers.py @@ -37,6 +37,7 @@ class LearningSolver: self.threads = threads self.time_limit = time_limit self.gap_limit = gap_limit + self.tee = False if self.components is not None: assert isinstance(self.components, dict) @@ -63,12 +64,7 @@ class LearningSolver: def solve(self, instance, tee=False): model = instance.to_model() - -# # Solve linear relaxation (TODO: use solver provided by user) -# lr_solver = pe.SolverFactory("gurobi") -# lr_solver.options["threads"] = 4 -# lr_solver.options["relax_integrality"] = 1 -# lr_solver.solve(model) + self.tee = tee self._create_solver() if self.is_persistent: