From 9fefaadfaf48711bc19867fe1d8b0562bf475162 Mon Sep 17 00:00:00 2001 From: Laurent Perron Date: Sun, 28 Nov 2021 13:01:55 +0100 Subject: [PATCH] [LP] change default tolerance on verify solution; add missing base include --- ortools/linear_solver/bop_interface.cc | 1 + ortools/linear_solver/cbc_interface.cc | 1 + ortools/linear_solver/clp_interface.cc | 1 + ortools/linear_solver/glop_interface.cc | 1 + ortools/linear_solver/glpk_interface.cc | 1 + ortools/linear_solver/gurobi_interface.cc | 3 ++- ortools/linear_solver/java/linear_solver.i | 5 ++++- ortools/linear_solver/linear_solver.cc | 4 ++-- ortools/linear_solver/linear_solver.h | 3 ++- ortools/linear_solver/python/linear_solver.i | 2 +- ortools/linear_solver/sat_interface.cc | 1 + ortools/linear_solver/scip_interface.cc | 1 + 12 files changed, 18 insertions(+), 6 deletions(-) diff --git a/ortools/linear_solver/bop_interface.cc b/ortools/linear_solver/bop_interface.cc index 1c0e4d791f..fa893bc40f 100644 --- a/ortools/linear_solver/bop_interface.cc +++ b/ortools/linear_solver/bop_interface.cc @@ -16,6 +16,7 @@ #include #include +#include "absl/base/attributes.h" #include "google/protobuf/text_format.h" #include "ortools/base/commandlineflags.h" #include "ortools/base/file.h" diff --git a/ortools/linear_solver/cbc_interface.cc b/ortools/linear_solver/cbc_interface.cc index ef367d6263..be111fa4f1 100644 --- a/ortools/linear_solver/cbc_interface.cc +++ b/ortools/linear_solver/cbc_interface.cc @@ -20,6 +20,7 @@ #include #include +#include "absl/base/attributes.h" #include "absl/status/status.h" #include "absl/strings/str_format.h" #include "ortools/base/commandlineflags.h" diff --git a/ortools/linear_solver/clp_interface.cc b/ortools/linear_solver/clp_interface.cc index 53c48e0736..95c4a63de1 100644 --- a/ortools/linear_solver/clp_interface.cc +++ b/ortools/linear_solver/clp_interface.cc @@ -19,6 +19,7 @@ #include #include +#include "absl/base/attributes.h" #include "absl/memory/memory.h" #include "absl/strings/match.h" #include "absl/strings/str_format.h" diff --git a/ortools/linear_solver/glop_interface.cc b/ortools/linear_solver/glop_interface.cc index aefaa686e3..a7cff3840b 100644 --- a/ortools/linear_solver/glop_interface.cc +++ b/ortools/linear_solver/glop_interface.cc @@ -16,6 +16,7 @@ #include #include +#include "absl/base/attributes.h" #include "ortools/base/hash.h" #include "ortools/base/integral_types.h" #include "ortools/base/logging.h" diff --git a/ortools/linear_solver/glpk_interface.cc b/ortools/linear_solver/glpk_interface.cc index 74a3fe19b6..ccc089afd5 100644 --- a/ortools/linear_solver/glpk_interface.cc +++ b/ortools/linear_solver/glpk_interface.cc @@ -24,6 +24,7 @@ #include #include +#include "absl/base/attributes.h" #include "absl/memory/memory.h" #include "absl/strings/str_format.h" #include "ortools/base/commandlineflags.h" diff --git a/ortools/linear_solver/gurobi_interface.cc b/ortools/linear_solver/gurobi_interface.cc index 5c4a6d2486..ad09f3a21e 100644 --- a/ortools/linear_solver/gurobi_interface.cc +++ b/ortools/linear_solver/gurobi_interface.cc @@ -52,6 +52,7 @@ #include #include +#include "absl/base/attributes.h" #include "absl/status/status.h" #include "absl/strings/match.h" #include "absl/strings/str_format.h" @@ -64,6 +65,7 @@ #include "ortools/linear_solver/gurobi_proto_solver.h" #include "ortools/linear_solver/linear_solver.h" #include "ortools/linear_solver/linear_solver_callback.h" +#include "ortools/util/time_limit.h" ABSL_FLAG(int, num_gurobi_threads, 4, "Number of threads available for Gurobi."); @@ -84,7 +86,6 @@ class GurobiInterface : public MPSolverInterface { MPSolver::ResultStatus Solve(const MPSolverParameters& param) override; absl::optional DirectlySolveProto( const MPModelRequest& request, std::atomic* interrupt) override; - // Writes the model. void Write(const std::string& filename) override; diff --git a/ortools/linear_solver/java/linear_solver.i b/ortools/linear_solver/java/linear_solver.i index a66f55cfda..ce638e4139 100644 --- a/ortools/linear_solver/java/linear_solver.i +++ b/ortools/linear_solver/java/linear_solver.i @@ -157,7 +157,10 @@ PROTO2_RETURN( * that. */ bool loadSolutionFromProto(const MPSolutionResponse& response) { - return $self->LoadSolutionFromProto(response).ok(); + const absl::Status status = + $self->LoadSolutionFromProto(response); + LOG_IF(ERROR, !status.ok()) << "LoadSolutionFromProto() failed: " << status; + return status.ok(); } /** diff --git a/ortools/linear_solver/linear_solver.cc b/ortools/linear_solver/linear_solver.cc index 04b110df45..c90050cf8d 100644 --- a/ortools/linear_solver/linear_solver.cc +++ b/ortools/linear_solver/linear_solver.cc @@ -40,7 +40,6 @@ #include "ortools/base/integral_types.h" #include "ortools/base/logging.h" #include "ortools/base/map_util.h" -#include "ortools/base/status_macros.h" #include "ortools/base/stl_util.h" #include "ortools/base/threadpool.h" #include "ortools/linear_solver/linear_solver.pb.h" @@ -48,6 +47,7 @@ #include "ortools/linear_solver/model_validator.h" #include "ortools/port/file.h" #include "ortools/util/fp_utils.h" +#include "ortools/util/time_limit.h" ABSL_FLAG(bool, verify_solution, false, "Systematically verify the solution when calling Solve()" @@ -240,7 +240,7 @@ void MPObjective::SetOptimizationDirection(bool maximize) { // Note(user): The maximize_ bool would more naturally belong to the // MPObjective, but it actually has to be a member of MPSolverInterface, // because some implementations (such as GLPK) need that bool for the - // MPSolverInterface constructor, i.e at a time when the MPObjective is not + // MPSolverInterface constructor, i.e. at a time when the MPObjective is not // constructed yet (MPSolverInterface is always built before MPObjective // when a new MPSolver is constructed). interface_->maximize_ = maximize; diff --git a/ortools/linear_solver/linear_solver.h b/ortools/linear_solver/linear_solver.h index aaf04e2fb6..7115a2efb0 100644 --- a/ortools/linear_solver/linear_solver.h +++ b/ortools/linear_solver/linear_solver.h @@ -144,6 +144,7 @@ #include #include +#include "absl/base/port.h" #include "absl/container/flat_hash_map.h" #include "absl/flags/parse.h" #include "absl/flags/usage.h" @@ -606,7 +607,7 @@ class MPSolver { */ absl::Status LoadSolutionFromProto( const MPSolutionResponse& response, - double tolerance = kDefaultPrimalTolerance); + double tolerance = std::numeric_limits::infinity()); /** * Resets values of out of bound variables to the corresponding bound and diff --git a/ortools/linear_solver/python/linear_solver.i b/ortools/linear_solver/python/linear_solver.i index 945016492d..7144ac1564 100644 --- a/ortools/linear_solver/python/linear_solver.i +++ b/ortools/linear_solver/python/linear_solver.i @@ -98,7 +98,7 @@ from ortools.linear_solver.linear_solver_natural_api import VariableExpr // Change the API of LoadSolutionFromProto() to simply return a boolean. bool LoadSolutionFromProto( const operations_research::MPSolutionResponse& response, - double tolerance = operations_research::MPSolverParameters::kDefaultPrimalTolerance) { + double tolerance = std::numeric_limits::infinity()) { const absl::Status status = $self->LoadSolutionFromProto(response, tolerance); LOG_IF(ERROR, !status.ok()) << "LoadSolutionFromProto() failed: " << status; diff --git a/ortools/linear_solver/sat_interface.cc b/ortools/linear_solver/sat_interface.cc index e779afb013..ab7a8aa551 100644 --- a/ortools/linear_solver/sat_interface.cc +++ b/ortools/linear_solver/sat_interface.cc @@ -16,6 +16,7 @@ #include #include +#include "absl/base/attributes.h" #include "absl/status/status.h" #include "absl/status/statusor.h" #include "ortools/base/hash.h" diff --git a/ortools/linear_solver/scip_interface.cc b/ortools/linear_solver/scip_interface.cc index 058d4089b7..2f37d0ba90 100644 --- a/ortools/linear_solver/scip_interface.cc +++ b/ortools/linear_solver/scip_interface.cc @@ -22,6 +22,7 @@ #include #include +#include "absl/base/attributes.h" #include "absl/status/status.h" #include "absl/strings/str_format.h" #include "absl/types/optional.h"