From 6b104433bea3955d41b6776227ae389d9fef7b7f Mon Sep 17 00:00:00 2001 From: Alinson S Xavier Date: Tue, 15 Sep 2020 08:46:49 -0500 Subject: [PATCH] Improve logging --- miplearn/components/cuts.py | 2 +- miplearn/components/lazy.py | 2 +- miplearn/components/objective.py | 3 ++- miplearn/components/primal.py | 1 + miplearn/solvers/learning.py | 3 ++- 5 files changed, 7 insertions(+), 4 deletions(-) diff --git a/miplearn/components/cuts.py b/miplearn/components/cuts.py index 7c778bf..1c92910 100644 --- a/miplearn/components/cuts.py +++ b/miplearn/components/cuts.py @@ -32,7 +32,7 @@ class UserCutsComponent(Component): def before_solve(self, solver, instance, model): logger.info("Predicting violated user cuts...") violations = self.predict(instance) - logger.info("Enforcing %d cuts..." % len(violations)) + logger.info("Enforcing %d user cuts..." % len(violations)) for v in violations: cut = instance.build_user_cut(model, v) solver.internal_solver.add_constraint(cut) diff --git a/miplearn/components/lazy.py b/miplearn/components/lazy.py index 9e19389..5f307a2 100644 --- a/miplearn/components/lazy.py +++ b/miplearn/components/lazy.py @@ -32,7 +32,7 @@ class LazyConstraintsComponent(Component): def before_solve(self, solver, instance, model): logger.info("Predicting violated lazy constraints...") violations = self.predict(instance) - logger.info("Enforcing %d constraints..." % len(violations)) + logger.info("Enforcing %d lazy constraints..." % len(violations)) for v in violations: cut = instance.build_lazy_constraint(model, v) solver.internal_solver.add_constraint(cut) diff --git a/miplearn/components/objective.py b/miplearn/components/objective.py index 0b53ef6..da9bb65 100644 --- a/miplearn/components/objective.py +++ b/miplearn/components/objective.py @@ -23,10 +23,11 @@ class ObjectiveValueComponent(Component): def before_solve(self, solver, instance, model): if self.ub_regressor is not None: + logger.info("Predicting optimal value...") lb, ub = self.predict([instance])[0] instance.predicted_ub = ub instance.predicted_lb = lb - logger.info("Predicted objective: [%.2f, %.2f]" % (lb, ub)) + logger.info("Predicted values: lb=%.2f, ub=%.2f" % (lb, ub)) def after_solve(self, solver, instance, model, results): if self.ub_regressor is not None: diff --git a/miplearn/components/primal.py b/miplearn/components/primal.py index 0cfd53d..4a9f4b3 100644 --- a/miplearn/components/primal.py +++ b/miplearn/components/primal.py @@ -30,6 +30,7 @@ class PrimalSolutionComponent(Component): self.classifier_prototype = classifier def before_solve(self, solver, instance, model): + logger.info("Predicting primal solution...") solution = self.predict(instance) if self.mode == "heuristic": solver.internal_solver.fix(solution) diff --git a/miplearn/solvers/learning.py b/miplearn/solvers/learning.py index d42a76e..9c0b717 100644 --- a/miplearn/solvers/learning.py +++ b/miplearn/solvers/learning.py @@ -156,7 +156,7 @@ class LearningSolver: self.internal_solver.set_instance(instance, model) if solve_lp_first: - logger.debug("Solving LP relaxation...") + logger.info("Solving LP relaxation...") results = self.internal_solver.solve_lp(tee=tee) instance.lp_solution = self.internal_solver.get_solution() instance.lp_value = results["Optimal value"] @@ -171,6 +171,7 @@ class LearningSolver: if relaxation_only: return results + logger.info("Solving MILP...") results = self.internal_solver.solve(tee=tee) results["LP value"] = instance.lp_value