From c82cfdc9ad4becadf259c9915820dbd13cf9261e Mon Sep 17 00:00:00 2001 From: Laurent Perron Date: Mon, 7 Mar 2022 11:31:58 +0100 Subject: [PATCH] remove map_util from most of the code; absl::make_unique and absl::optional -> stl version --- examples/cpp/network_routing_sat.cc | 11 +++--- examples/cpp/vector_bin_packing_solver.cc | 9 +++-- examples/cpp/weighted_tardiness_sat.cc | 6 ++-- ortools/flatzinc/BUILD.bazel | 1 - ortools/flatzinc/presolve.cc | 7 ++-- ortools/linear_solver/clp_interface.cc | 4 +-- ortools/linear_solver/glpk_interface.cc | 2 +- ortools/linear_solver/gurobi_interface.cc | 2 +- ortools/linear_solver/linear_solver.proto | 3 +- ortools/linear_solver/sat_solver_utils.cc | 4 ++- ortools/linear_solver/scip_callback.h | 3 +- ortools/linear_solver/scip_interface.cc | 2 +- .../python/pywrap_model_builder_helper.cc | 8 ++--- ortools/packing/arc_flow_solver.h | 2 ++ ortools/packing/binpacking_2d_parser.cc | 2 ++ ortools/packing/vector_bin_packing_parser.cc | 1 + ortools/pdlp/BUILD.bazel | 12 ------- ortools/pdlp/iteration_stats.cc | 10 +++--- ortools/pdlp/iteration_stats.h | 10 +++--- ortools/pdlp/iteration_stats_test.cc | 1 - ortools/pdlp/primal_dual_hybrid_gradient.cc | 34 +++++++++---------- ortools/pdlp/primal_dual_hybrid_gradient.h | 4 +-- .../pdlp/primal_dual_hybrid_gradient_test.cc | 1 - ortools/pdlp/quadratic_program.cc | 1 - ortools/pdlp/quadratic_program.h | 7 ++-- ortools/pdlp/quadratic_program_io.cc | 1 - ortools/pdlp/quadratic_program_test.cc | 2 +- ortools/pdlp/sharded_optimization_utils.cc | 14 ++++---- ortools/pdlp/sharded_optimization_utils.h | 6 ++-- .../pdlp/sharded_optimization_utils_test.cc | 1 - ortools/pdlp/termination.cc | 4 +-- ortools/pdlp/termination.h | 5 +-- ortools/pdlp/termination_test.cc | 24 ++++++------- ortools/pdlp/trust_region.cc | 6 ++-- ortools/python/README.md | 2 +- ortools/sat/BUILD.bazel | 22 ------------ ortools/sat/boolean_problem.cc | 3 +- ortools/sat/circuit.cc | 5 ++- ortools/sat/clause.cc | 3 +- ortools/sat/cp_model_loader.cc | 3 +- ortools/sat/cp_model_loader.h | 1 - ortools/sat/cp_model_presolve.cc | 7 ++-- ortools/sat/cp_model_service.proto | 8 +++-- ortools/sat/cp_model_solver.cc | 12 +++---- ortools/sat/cp_model_symmetries.cc | 3 +- ortools/sat/feasibility_pump.cc | 6 ++-- ortools/sat/integer.cc | 5 ++- ortools/sat/integer.h | 1 - ortools/sat/integer_search.cc | 4 +-- ortools/sat/linear_constraint_manager.cc | 2 +- ortools/sat/linear_programming_constraint.cc | 11 +++--- ortools/sat/model.h | 11 +++--- ortools/sat/optimization.cc | 7 ++-- ortools/sat/precedences.cc | 3 +- ortools/sat/presolve_context.cc | 4 +-- ortools/sat/presolve_util.cc | 4 +-- ortools/sat/python/swig_helper.cc | 4 +-- ortools/sat/simplification.cc | 2 +- ortools/sat/synchronization.cc | 2 +- ortools/sat/util.cc | 12 +++---- ortools/util/BUILD.bazel | 8 +++-- ortools/util/rev.h | 7 ++-- ortools/util/tuple_set.h | 4 +-- ortools/util/vector_map.h | 13 +++---- 64 files changed, 166 insertions(+), 223 deletions(-) diff --git a/examples/cpp/network_routing_sat.cc b/examples/cpp/network_routing_sat.cc index 2f2c0ad4e5..f44974b064 100644 --- a/examples/cpp/network_routing_sat.cc +++ b/examples/cpp/network_routing_sat.cc @@ -25,6 +25,7 @@ // A random problem generator is also included. +#include #include #include #include @@ -110,16 +111,16 @@ class NetworkRoutingData { // Returns the capacity of an arc, and 0 if the arc is not defined. int Capacity(int node1, int node2) const { - return gtl::FindWithDefault( - all_arcs_, - std::make_pair(std::min(node1, node2), std::max(node1, node2)), 0); + const auto& iter = all_arcs_.find( + std::make_pair(std::min(node1, node2), std::max(node1, node2))); + return iter != all_arcs_.end() ? iter->second : 0; } // Returns the demand between the source and the destination, and 0 if // there are no demands between the source and the destination. int Demand(int source, int destination) const { - return gtl::FindWithDefault(all_demands_, - std::make_pair(source, destination), 0); + const auto& iter = all_demands_.find(std::make_pair(source, destination)); + return iter != all_demands_.end() ? iter->second : 0; } // External building API. diff --git a/examples/cpp/vector_bin_packing_solver.cc b/examples/cpp/vector_bin_packing_solver.cc index 20c9364953..4ca6ecbb72 100644 --- a/examples/cpp/vector_bin_packing_solver.cc +++ b/examples/cpp/vector_bin_packing_solver.cc @@ -14,14 +14,14 @@ #include #include "absl/flags/flag.h" -#include "absl/flags/parse.h" -#include "absl/flags/usage.h" #include "absl/status/status.h" #include "absl/strings/match.h" #include "absl/strings/str_cat.h" #include "absl/strings/str_join.h" +#include "absl/strings/string_view.h" #include "ortools/base/commandlineflags.h" #include "ortools/base/file.h" +#include "ortools/base/init_google.h" #include "ortools/base/logging.h" #include "ortools/base/timer.h" #include "ortools/packing/arc_flow_builder.h" @@ -40,7 +40,7 @@ ABSL_FLAG(int, max_bins, -1, "Maximum number of bins: default = -1 meaning no limits"); namespace operations_research { -void ParseAndSolve(const std::string& filename, const std::string& solver, +void ParseAndSolve(const std::string& filename, absl::string_view solver, const std::string& params) { std::string problem_name = filename; const size_t found = problem_name.find_last_of("/\\"); @@ -97,8 +97,7 @@ void ParseAndSolve(const std::string& filename, const std::string& solver, int main(int argc, char** argv) { absl::SetFlag(&FLAGS_logtostderr, true); - google::InitGoogleLogging(argv[0]); - absl::ParseCommandLine(argc, argv); + InitGoogle(argv[0], &argc, &argv, true); if (absl::GetFlag(FLAGS_input).empty()) { LOG(FATAL) << "Please supply a data file with --input="; } diff --git a/examples/cpp/weighted_tardiness_sat.cc b/examples/cpp/weighted_tardiness_sat.cc index 4be8860adf..8aeab1b103 100644 --- a/examples/cpp/weighted_tardiness_sat.cc +++ b/examples/cpp/weighted_tardiness_sat.cc @@ -19,14 +19,13 @@ #include #include "absl/flags/flag.h" -#include "absl/flags/parse.h" -#include "absl/flags/usage.h" #include "absl/strings/match.h" #include "absl/strings/numbers.h" #include "absl/strings/str_join.h" #include "absl/strings/str_split.h" #include "google/protobuf/text_format.h" #include "ortools/base/commandlineflags.h" +#include "ortools/base/init_google.h" #include "ortools/base/logging.h" #include "ortools/base/timer.h" #include "ortools/sat/cp_model.h" @@ -253,8 +252,7 @@ void ParseAndSolve() { int main(int argc, char** argv) { absl::SetFlag(&FLAGS_logtostderr, true); - google::InitGoogleLogging(argv[0]); - absl::ParseCommandLine(argc, argv); + InitGoogle(argv[0], &argc, &argv, true); if (absl::GetFlag(FLAGS_input).empty()) { LOG(FATAL) << "Please supply a data file with --input="; } diff --git a/ortools/flatzinc/BUILD.bazel b/ortools/flatzinc/BUILD.bazel index bc3e7ad79e..71fb9ece87 100644 --- a/ortools/flatzinc/BUILD.bazel +++ b/ortools/flatzinc/BUILD.bazel @@ -104,7 +104,6 @@ cc_library( ":model", "//ortools/base", "//ortools/base:hash", - "//ortools/base:map_util", "//ortools/graph:cliques", "//ortools/util:logging", "//ortools/util:saturated_arithmetic", diff --git a/ortools/flatzinc/presolve.cc b/ortools/flatzinc/presolve.cc index 948f75ed63..42da718464 100644 --- a/ortools/flatzinc/presolve.cc +++ b/ortools/flatzinc/presolve.cc @@ -21,7 +21,6 @@ #include "absl/strings/str_format.h" #include "absl/strings/str_join.h" #include "absl/strings/string_view.h" -#include "ortools/base/map_util.h" #include "ortools/flatzinc/model.h" #include "ortools/graph/cliques.h" #include "ortools/util/saturated_arithmetic.h" @@ -494,7 +493,8 @@ Variable* Presolver::FindRepresentativeOfVar(Variable* var) { Variable* start_var = var; // First loop: find the top parent. for (;;) { - Variable* parent = gtl::FindWithDefault(var_representative_map_, var, var); + const auto& it = var_representative_map_.find(var); + Variable* parent = it == var_representative_map_.end() ? var : it->second; if (parent == var) break; var = parent; } @@ -504,7 +504,8 @@ Variable* Presolver::FindRepresentativeOfVar(Variable* var) { var_representative_map_[start_var] = var; start_var = parent; } - return gtl::FindWithDefault(var_representative_map_, var, var); + const auto& iter = var_representative_map_.find(var); + return iter == var_representative_map_.end() ? var : iter->second; } void Presolver::SubstituteEverywhere(Model* model) { diff --git a/ortools/linear_solver/clp_interface.cc b/ortools/linear_solver/clp_interface.cc index 95c4a63de1..77bed8803b 100644 --- a/ortools/linear_solver/clp_interface.cc +++ b/ortools/linear_solver/clp_interface.cc @@ -147,7 +147,7 @@ CLPInterface::CLPInterface(MPSolver* const solver) CLPInterface::~CLPInterface() {} void CLPInterface::Reset() { - clp_ = absl::make_unique(); + clp_ = std::make_unique(); clp_->setOptimizationDirection(maximize_ ? -1 : 1); ResetExtractionInformation(); } @@ -445,7 +445,7 @@ MPSolver::ResultStatus CLPInterface::Solve(const MPSolverParameters& param) { // Start from a fresh set of default parameters and set them to // specified values. - options_ = absl::make_unique(); + options_ = std::make_unique(); SetParameters(param); // Solve diff --git a/ortools/linear_solver/glpk_interface.cc b/ortools/linear_solver/glpk_interface.cc index 6ccef8fc8c..2729b2049b 100644 --- a/ortools/linear_solver/glpk_interface.cc +++ b/ortools/linear_solver/glpk_interface.cc @@ -219,7 +219,7 @@ GLPKInterface::GLPKInterface(MPSolver* const solver, bool mip) lp_ = glp_create_prob(); glp_set_prob_name(lp_, solver_->name_.c_str()); glp_set_obj_dir(lp_, GLP_MIN); - mip_callback_info_ = absl::make_unique(maximize_); + mip_callback_info_ = std::make_unique(maximize_); } // Frees the LP memory allocations. diff --git a/ortools/linear_solver/gurobi_interface.cc b/ortools/linear_solver/gurobi_interface.cc index ad09f3a21e..f5ec00c2e5 100644 --- a/ortools/linear_solver/gurobi_interface.cc +++ b/ortools/linear_solver/gurobi_interface.cc @@ -1204,7 +1204,7 @@ MPSolver::ResultStatus GurobiInterface::Solve(const MPSolverParameters& param) { if (callback_ == nullptr) { CheckedGurobiCall(GRBsetcallbackfunc(model_, nullptr, nullptr)); } else { - gurobi_context = absl::make_unique( + gurobi_context = std::make_unique( env_, &mp_var_to_gurobi_var_, num_gurobi_vars_, callback_->might_add_cuts(), callback_->might_add_lazy_constraints()); mp_callback_with_context.context = gurobi_context.get(); diff --git a/ortools/linear_solver/linear_solver.proto b/ortools/linear_solver/linear_solver.proto index fa01267a46..a976e15712 100644 --- a/ortools/linear_solver/linear_solver.proto +++ b/ortools/linear_solver/linear_solver.proto @@ -34,6 +34,7 @@ option java_multiple_files = true; import "ortools/util/optional_boolean.proto"; + package operations_research; // A variable is always constrained in the form: @@ -638,7 +639,7 @@ message MPSolutionResponse { // Opaque solver-specific information. // For the PDLP solver, this is a serialized pdlp::SolveLog proto. - optional string solver_specific_info = 11; + optional bytes solver_specific_info = 11; // [Advanced usage.] // Values of the dual variables values in the same order as the diff --git a/ortools/linear_solver/sat_solver_utils.cc b/ortools/linear_solver/sat_solver_utils.cc index 6a0c3c93ed..f51adf77a6 100644 --- a/ortools/linear_solver/sat_solver_utils.cc +++ b/ortools/linear_solver/sat_solver_utils.cc @@ -13,6 +13,8 @@ #include "ortools/linear_solver/sat_solver_utils.h" +#include + #include "absl/memory/memory.h" #include "ortools/glop/parameters.pb.h" #include "ortools/glop/preprocessor.h" @@ -81,7 +83,7 @@ glop::ProblemStatus ApplyMipPresolveSteps( // Finally, we make sure all domains contain zero. if (!hint_is_present) { auto shift_bounds = - absl::make_unique(&glop_params); + std::make_unique(&glop_params); shift_bounds->UseInMipContext(); const bool need_postsolve = shift_bounds->Run(&lp); if (shift_bounds->status() != glop::ProblemStatus::INIT) { diff --git a/ortools/linear_solver/scip_callback.h b/ortools/linear_solver/scip_callback.h index c0c89b6d12..ad3188d295 100644 --- a/ortools/linear_solver/scip_callback.h +++ b/ortools/linear_solver/scip_callback.h @@ -22,6 +22,7 @@ #define OR_TOOLS_LINEAR_SOLVER_SCIP_CALLBACK_H_ #include +#include #include #include @@ -257,7 +258,7 @@ void RegisterConstraintHandler(ScipConstraintHandler* handler, SCIP* scip) { internal::AddConstraintHandlerImpl( handler->description(), - absl::make_unique>( + std::make_unique>( handler), scip); } diff --git a/ortools/linear_solver/scip_interface.cc b/ortools/linear_solver/scip_interface.cc index 2f37d0ba90..5b2af478af 100644 --- a/ortools/linear_solver/scip_interface.cc +++ b/ortools/linear_solver/scip_interface.cc @@ -714,7 +714,7 @@ MPSolver::ResultStatus SCIPInterface::Solve(const MPSolverParameters& param) { CHECK_EQ(scip_constraint_handler_->mp_callback(), callback_); } else if (callback_ != nullptr) { scip_constraint_handler_ = - absl::make_unique(callback_); + std::make_unique(callback_); RegisterConstraintHandler(scip_constraint_handler_.get(), scip_); AddCallbackConstraint(scip_, scip_constraint_handler_.get(), diff --git a/ortools/model_builder/python/pywrap_model_builder_helper.cc b/ortools/model_builder/python/pywrap_model_builder_helper.cc index 9ca76aad7e..7e6c80d8aa 100644 --- a/ortools/model_builder/python/pywrap_model_builder_helper.cc +++ b/ortools/model_builder/python/pywrap_model_builder_helper.cc @@ -18,15 +18,15 @@ #include #include -#include "absl/strings/str_cat.h" #include "Eigen/Core" #include "Eigen/SparseCore" -#include "pybind11/eigen.h" -#include "pybind11/pybind11.h" -#include "pybind11/pytypes.h" +#include "absl/strings/str_cat.h" #include "ortools/linear_solver/linear_solver.pb.h" #include "ortools/linear_solver/model_exporter.h" #include "ortools/model_builder/wrappers/model_builder_helper.h" +#include "pybind11/eigen.h" +#include "pybind11/pybind11.h" +#include "pybind11/pytypes.h" using ::Eigen::SparseMatrix; using ::Eigen::VectorXd; diff --git a/ortools/packing/arc_flow_solver.h b/ortools/packing/arc_flow_solver.h index 8655740776..310f660924 100644 --- a/ortools/packing/arc_flow_solver.h +++ b/ortools/packing/arc_flow_solver.h @@ -14,6 +14,8 @@ #ifndef OR_TOOLS_PACKING_ARC_FLOW_SOLVER_H_ #define OR_TOOLS_PACKING_ARC_FLOW_SOLVER_H_ +#include + #include "ortools/linear_solver/linear_solver.h" #include "ortools/packing/vector_bin_packing.pb.h" diff --git a/ortools/packing/binpacking_2d_parser.cc b/ortools/packing/binpacking_2d_parser.cc index d627a04f4f..36acd73c1a 100644 --- a/ortools/packing/binpacking_2d_parser.cc +++ b/ortools/packing/binpacking_2d_parser.cc @@ -13,6 +13,8 @@ #include "ortools/packing/binpacking_2d_parser.h" +#include + #include "absl/strings/numbers.h" #include "absl/strings/str_split.h" #include "ortools/base/logging.h" diff --git a/ortools/packing/vector_bin_packing_parser.cc b/ortools/packing/vector_bin_packing_parser.cc index 63e8370e52..c41bf8d96d 100644 --- a/ortools/packing/vector_bin_packing_parser.cc +++ b/ortools/packing/vector_bin_packing_parser.cc @@ -14,6 +14,7 @@ #include "ortools/packing/vector_bin_packing_parser.h" #include +#include #include "absl/strings/numbers.h" #include "absl/strings/str_split.h" diff --git a/ortools/pdlp/BUILD.bazel b/ortools/pdlp/BUILD.bazel index 030c71baa4..c2307ceac5 100644 --- a/ortools/pdlp/BUILD.bazel +++ b/ortools/pdlp/BUILD.bazel @@ -74,7 +74,6 @@ cc_library( "@com_google_absl//absl/status", "@com_google_absl//absl/status:statusor", "@com_google_absl//absl/strings", - "@com_google_absl//absl/types:optional", "@eigen//:eigen3", ], ) @@ -91,7 +90,6 @@ cc_test( "//ortools/linear_solver:linear_solver_cc_proto", "@com_google_absl//absl/status", "@com_google_absl//absl/status:statusor", - "@com_google_absl//absl/types:optional", "@eigen//:eigen3", ], ) @@ -163,7 +161,6 @@ cc_library( "//ortools/base:mathutil", "@com_google_absl//absl/algorithm:container", "@com_google_absl//absl/random:distributions", - "@com_google_absl//absl/types:optional", "@eigen//:eigen3", ], ) @@ -180,7 +177,6 @@ cc_test( ":sharder", ":solve_log_cc_proto", ":test_util", - "@com_google_absl//absl/types:optional", "@eigen//:eigen3", ], ) @@ -193,7 +189,6 @@ cc_library( ":solve_log_cc_proto", ":solvers_cc_proto", "//ortools/base", - "@com_google_absl//absl/types:optional", ], ) @@ -207,7 +202,6 @@ cc_test( ":solvers_cc_proto", ":termination", "//ortools/base:protobuf_util", - "@com_google_absl//absl/types:optional", ], ) @@ -223,7 +217,6 @@ cc_library( "//ortools/base", "//ortools/base:mathutil", "@com_google_absl//absl/algorithm:container", - "@com_google_absl//absl/types:optional", "@eigen//:eigen3", ], ) @@ -283,7 +276,6 @@ cc_library( "@com_google_absl//absl/status", "@com_google_absl//absl/status:statusor", "@com_google_absl//absl/strings", - "@com_google_absl//absl/types:optional", "@eigen//:eigen3", ], ) @@ -304,7 +296,6 @@ cc_library( "@com_google_absl//absl/random:distributions", "@com_google_absl//absl/strings", "@com_google_absl//absl/strings:str_format", - "@com_google_absl//absl/types:optional", "@eigen//:eigen3", ], ) @@ -320,7 +311,6 @@ cc_test( ":solve_log_cc_proto", ":test_util", "//ortools/base:protobuf_util", - "@com_google_absl//absl/types:optional", "@eigen//:eigen3", ], ) @@ -354,7 +344,6 @@ cc_library( "@com_google_absl//absl/status:statusor", "@com_google_absl//absl/strings", "@com_google_absl//absl/time", - "@com_google_absl//absl/types:optional", "@eigen//:eigen3", ], ) @@ -383,7 +372,6 @@ cc_test( "@com_google_absl//absl/status:statusor", "@com_google_absl//absl/strings", "@com_google_absl//absl/strings:str_format", - "@com_google_absl//absl/types:optional", "@eigen//:eigen3", ], ) diff --git a/ortools/pdlp/iteration_stats.cc b/ortools/pdlp/iteration_stats.cc index 3c16562ced..3915ad73bf 100644 --- a/ortools/pdlp/iteration_stats.cc +++ b/ortools/pdlp/iteration_stats.cc @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -28,7 +29,6 @@ #include "absl/strings/str_cat.h" #include "absl/strings/str_format.h" #include "absl/strings/string_view.h" -#include "absl/types/optional.h" #include "ortools/base/logging.h" #include "ortools/base/mathutil.h" #include "ortools/pdlp/quadratic_program.h" @@ -504,7 +504,7 @@ VectorXd ReducedCosts(const ShardedQuadraticProgram& sharded_qp, return reduced_costs; } -absl::optional GetConvergenceInformation( +std::optional GetConvergenceInformation( const IterationStats& stats, PointType candidate_type) { for (const auto& convergence_information : stats.convergence_information()) { if (convergence_information.candidate_type() == candidate_type) { @@ -514,7 +514,7 @@ absl::optional GetConvergenceInformation( return absl::nullopt; } -absl::optional GetInfeasibilityInformation( +std::optional GetInfeasibilityInformation( const IterationStats& stats, PointType candidate_type) { for (const auto& infeasibility_information : stats.infeasibility_information()) { @@ -525,8 +525,8 @@ absl::optional GetInfeasibilityInformation( return absl::nullopt; } -absl::optional GetPointMetadata(const IterationStats& stats, - const PointType point_type) { +std::optional GetPointMetadata(const IterationStats& stats, + const PointType point_type) { for (const auto& metadata : stats.point_metadata()) { if (metadata.point_type() == point_type) { return metadata; diff --git a/ortools/pdlp/iteration_stats.h b/ortools/pdlp/iteration_stats.h index d6ba89eb42..4b9b0f8b9f 100644 --- a/ortools/pdlp/iteration_stats.h +++ b/ortools/pdlp/iteration_stats.h @@ -15,11 +15,11 @@ #define PDLP_ITERATION_STATS_H_ #include +#include #include #include #include "Eigen/Core" -#include "absl/types/optional.h" #include "ortools/pdlp/sharded_quadratic_program.h" #include "ortools/pdlp/solve_log.pb.h" #include "ortools/pdlp/solvers.pb.h" @@ -80,18 +80,18 @@ Eigen::VectorXd ReducedCosts(const ShardedQuadraticProgram& scaled_sharded_qp, // Finds and returns the ConvergenceInformation with the specified // candidate_type, or absl::nullopt if no such candidate exists. -absl::optional GetConvergenceInformation( +std::optional GetConvergenceInformation( const IterationStats& stats, PointType candidate_type); // Finds and returns the InfeasibilityInformation with the specified // candidate_type, or absl::nullopt if no such candidate exists. -absl::optional GetInfeasibilityInformation( +std::optional GetInfeasibilityInformation( const IterationStats& stats, PointType candidate_type); // Finds and returns the PointMetadata with the specified // point_type, or absl::nullopt if no such point exists. -absl::optional GetPointMetadata(const IterationStats& stats, - PointType point_type); +std::optional GetPointMetadata(const IterationStats& stats, + PointType point_type); // For each entry in random_projection_seeds, computes a random projection of // the primal/dual solution pair onto pseudo-random vectors generated from that diff --git a/ortools/pdlp/iteration_stats_test.cc b/ortools/pdlp/iteration_stats_test.cc index 12abd64a7a..97fd814ac5 100644 --- a/ortools/pdlp/iteration_stats_test.cc +++ b/ortools/pdlp/iteration_stats_test.cc @@ -18,7 +18,6 @@ #include #include "Eigen/Core" -#include "absl/types/optional.h" #include "gmock/gmock.h" #include "gtest/gtest.h" #include "ortools/base/protobuf_util.h" diff --git a/ortools/pdlp/primal_dual_hybrid_gradient.cc b/ortools/pdlp/primal_dual_hybrid_gradient.cc index 51aeea2a01..98cb6e07fe 100644 --- a/ortools/pdlp/primal_dual_hybrid_gradient.cc +++ b/ortools/pdlp/primal_dual_hybrid_gradient.cc @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -31,7 +32,6 @@ #include "absl/strings/str_cat.h" #include "absl/strings/str_format.h" #include "absl/strings/string_view.h" -#include "absl/types/optional.h" #include "ortools/base/logging.h" #include "ortools/base/mathutil.h" #include "ortools/base/timer.h" @@ -236,7 +236,7 @@ class Solver { Solver& operator=(const Solver&) = delete; // Zero is used if initial_solution is nullopt. - SolverResult Solve(absl::optional initial_solution, + SolverResult Solve(std::optional initial_solution, const std::atomic* interrupt_solve, IterationStatsCallback iteration_stats_callback); @@ -332,7 +332,7 @@ class Solver { // satisfied, otherwise returns nothing. Uses the primal and dual vectors to // compute solution statistics and adds them to the stats proto. // NOTE: The primal and dual input pair should be a scaled solution. - absl::optional + std::optional UpdateIterationStatsAndCheckTermination(bool force_numerical_termination, const VectorXd& primal_average, const VectorXd& dual_average, @@ -354,7 +354,7 @@ class Solver { // state of the algorithm accordingly and computes a new primal weight. void ApplyRestartChoice(RestartChoice restart_to_apply); - absl::optional MajorIterationAndTerminationCheck( + std::optional MajorIterationAndTerminationCheck( bool force_numerical_termination, SolveLog& solve_log); bool ShouldDoAdaptiveRestartHeuristic(double candidate_normalized_gap) const; @@ -397,8 +397,8 @@ class Solver { // presolve is enabled. If presolve solves the problem completely returns the // appropriate TerminationReason. Otherwise returns nullopt. If presolve // is disabled or an error occurs modifies nothing and returns nullopt. - absl::optional ApplyPresolveIfEnabled( - absl::optional* initial_solution); + std::optional ApplyPresolveIfEnabled( + std::optional* initial_solution); PrimalAndDualSolution RecoverOriginalSolution( PrimalAndDualSolution working_solution) const; @@ -418,7 +418,7 @@ class Solver { QuadraticProgramBoundNorms original_bound_norms_; // Set iff presolve is enabled. - absl::optional presolve_info_; + std::optional presolve_info_; double step_size_; // For Malitsky-Pock linesearch only: step_size_ / previous_step_size @@ -1009,7 +1009,7 @@ void LogInfoWithoutPrefix(absl::string_view message) { << message; } -absl::optional +std::optional Solver::UpdateIterationStatsAndCheckTermination( bool force_numerical_termination, const VectorXd& working_primal_average, const VectorXd& working_dual_average, IterationStats& stats) const { @@ -1200,7 +1200,7 @@ void Solver::ApplyRestartChoice(const RestartChoice restart_to_apply) { /*dest=*/last_dual_start_point_); } -absl::optional Solver::MajorIterationAndTerminationCheck( +std::optional Solver::MajorIterationAndTerminationCheck( bool force_numerical_termination, SolveLog& solve_log) { const int iteration_limit = params_.termination_criteria().iteration_limit(); const int major_iteration_cycle = @@ -1225,7 +1225,7 @@ absl::optional Solver::MajorIterationAndTerminationCheck( VectorXd primal_average = PrimalAverage(); VectorXd dual_average = DualAverage(); - const absl::optional + const std::optional maybe_termination_reason = UpdateIterationStatsAndCheckTermination( force_numerical_termination, primal_average, dual_average, stats); if (params_.record_iteration_stats()) { @@ -1555,8 +1555,8 @@ TerminationReason GlopStatusToTerminationReason( } // namespace -absl::optional Solver::ApplyPresolveIfEnabled( - absl::optional* const initial_solution) { +std::optional Solver::ApplyPresolveIfEnabled( + std::optional* const initial_solution) { const bool presolve_enabled = params_.presolve_options().use_glop(); if (!presolve_enabled) { return absl::nullopt; @@ -1673,7 +1673,7 @@ PrimalAndDualSolution Solver::RecoverOriginalSolution( } SolverResult Solver::Solve( - absl::optional initial_solution, + std::optional initial_solution, const std::atomic* interrupt_solve, IterationStatsCallback iteration_stats_callback) { SolveLog solve_log; @@ -1694,7 +1694,7 @@ SolverResult Solver::Solve( } timer_.Start(); iteration_stats_callback_ = std::move(iteration_stats_callback); - absl::optional maybe_terminate = + std::optional maybe_terminate = ApplyPresolveIfEnabled(&initial_solution); if (maybe_terminate.has_value()) { // Glop also feeds zero primal and dual solutions when the preprocessor @@ -1717,7 +1717,7 @@ SolverResult Solver::Solve( presolve_info_->trivial_col_scaling_vec, presolve_info_->trivial_row_scaling_vec, POINT_TYPE_PRESOLVER_SOLUTION, iteration_stats); - absl::optional earned_termination = + std::optional earned_termination = CheckTerminationCriteria(params_.termination_criteria(), iteration_stats, original_bound_norms_, /*force_numerical_termination=*/false); @@ -1823,7 +1823,7 @@ SolverResult Solver::Solve( // This code performs the logic of the major iterations and termination // checks. It may modify the current solution and primal weight (e.g., when // performing a restart). - const absl::optional maybe_result = + const std::optional maybe_result = MajorIterationAndTerminationCheck(force_numerical_termination, solve_log); if (maybe_result.has_value()) { @@ -1875,7 +1875,7 @@ SolverResult PrimalDualHybridGradient( SolverResult PrimalDualHybridGradient( QuadraticProgram qp, const PrimalDualHybridGradientParams& params, - absl::optional initial_solution, + std::optional initial_solution, const std::atomic* interrupt_solve, IterationStatsCallback iteration_stats_callback) { const absl::Status params_status = diff --git a/ortools/pdlp/primal_dual_hybrid_gradient.h b/ortools/pdlp/primal_dual_hybrid_gradient.h index bae84977ef..e2a9aa8395 100644 --- a/ortools/pdlp/primal_dual_hybrid_gradient.h +++ b/ortools/pdlp/primal_dual_hybrid_gradient.h @@ -16,10 +16,10 @@ #include #include +#include #include "Eigen/Core" #include "absl/status/statusor.h" -#include "absl/types/optional.h" #include "ortools/linear_solver/linear_solver.pb.h" #include "ortools/lp_data/lp_data.h" #include "ortools/pdlp/quadratic_program.h" @@ -131,7 +131,7 @@ SolverResult PrimalDualHybridGradient( // solution. NOTE: initial_solution is intentionally passed by value. SolverResult PrimalDualHybridGradient( QuadraticProgram qp, const PrimalDualHybridGradientParams& params, - absl::optional initial_solution, + std::optional initial_solution, const std::atomic* interrupt_solve = nullptr, std::function iteration_stats_callback = nullptr); diff --git a/ortools/pdlp/primal_dual_hybrid_gradient_test.cc b/ortools/pdlp/primal_dual_hybrid_gradient_test.cc index bc6e1455e1..8c110e2912 100644 --- a/ortools/pdlp/primal_dual_hybrid_gradient_test.cc +++ b/ortools/pdlp/primal_dual_hybrid_gradient_test.cc @@ -28,7 +28,6 @@ #include "absl/status/status.h" #include "absl/status/statusor.h" #include "absl/strings/str_cat.h" -#include "absl/types/optional.h" #include "gmock/gmock.h" #include "gtest/gtest.h" #include "ortools/base/logging.h" diff --git a/ortools/pdlp/quadratic_program.cc b/ortools/pdlp/quadratic_program.cc index 7c9b5fd58d..8d56764e04 100644 --- a/ortools/pdlp/quadratic_program.cc +++ b/ortools/pdlp/quadratic_program.cc @@ -27,7 +27,6 @@ #include "absl/status/status.h" #include "absl/status/statusor.h" #include "absl/strings/str_cat.h" -#include "absl/types/optional.h" #include "ortools/base/logging.h" #include "ortools/base/status_macros.h" #include "ortools/linear_solver/linear_solver.pb.h" diff --git a/ortools/pdlp/quadratic_program.h b/ortools/pdlp/quadratic_program.h index e690e42386..5951bb8a99 100644 --- a/ortools/pdlp/quadratic_program.h +++ b/ortools/pdlp/quadratic_program.h @@ -25,7 +25,6 @@ #include "Eigen/SparseCore" #include "absl/status/status.h" #include "absl/status/statusor.h" -#include "absl/types/optional.h" #include "ortools/base/logging.h" #include "ortools/linear_solver/linear_solver.pb.h" @@ -132,9 +131,9 @@ struct QuadraticProgram { Eigen::VectorXd constraint_lower_bounds, constraint_upper_bounds; Eigen::VectorXd variable_lower_bounds, variable_upper_bounds; // The problem, constraint, and variable names are optional. - absl::optional problem_name; - absl::optional> variable_names; - absl::optional> constraint_names; + std::optional problem_name; + std::optional> variable_names; + std::optional> constraint_names; // These fields are provided for convenience; they don't change the // mathematical definition of the problem, but they could change the objective diff --git a/ortools/pdlp/quadratic_program_io.cc b/ortools/pdlp/quadratic_program_io.cc index fdb697cf5e..a4030b63fb 100644 --- a/ortools/pdlp/quadratic_program_io.cc +++ b/ortools/pdlp/quadratic_program_io.cc @@ -28,7 +28,6 @@ #include "absl/status/status.h" #include "absl/status/statusor.h" #include "absl/strings/match.h" -#include "absl/types/optional.h" #include "ortools/base/basictypes.h" #include "ortools/base/file.h" #include "ortools/base/logging.h" diff --git a/ortools/pdlp/quadratic_program_test.cc b/ortools/pdlp/quadratic_program_test.cc index 7fdf659c4e..e03598dbc9 100644 --- a/ortools/pdlp/quadratic_program_test.cc +++ b/ortools/pdlp/quadratic_program_test.cc @@ -15,6 +15,7 @@ #include #include +#include #include #include #include @@ -24,7 +25,6 @@ #include "Eigen/SparseCore" #include "absl/status/status.h" #include "absl/status/statusor.h" -#include "absl/types/optional.h" #include "gmock/gmock.h" #include "gtest/gtest.h" #include "ortools/base/protobuf_util.h" diff --git a/ortools/pdlp/sharded_optimization_utils.cc b/ortools/pdlp/sharded_optimization_utils.cc index ccdf15a76d..77b83562b8 100644 --- a/ortools/pdlp/sharded_optimization_utils.cc +++ b/ortools/pdlp/sharded_optimization_utils.cc @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -27,7 +28,6 @@ #include "Eigen/SparseCore" #include "absl/algorithm/container.h" #include "absl/random/distributions.h" -#include "absl/types/optional.h" #include "ortools/base/logging.h" #include "ortools/base/mathutil.h" #include "ortools/pdlp/quadratic_program.h" @@ -575,8 +575,8 @@ double PowerMethodFailureProbability(int64_t dimension, double epsilon, int k) { SingularValueAndIterations EstimateMaximumSingularValue( const SparseMatrix& matrix, const SparseMatrix& matrix_transpose, - const absl::optional& active_set_indicator, - const absl::optional& transpose_active_set_indicator, + const std::optional& active_set_indicator, + const std::optional& transpose_active_set_indicator, const Sharder& matrix_sharder, const Sharder& matrix_transpose_sharder, const Sharder& primal_vector_sharder, const Sharder& dual_vector_sharder, const double desired_relative_error, const double failure_probability, @@ -705,12 +705,12 @@ VectorXd ComputeDualActiveSetIndicator( SingularValueAndIterations EstimateMaximumSingularValueOfConstraintMatrix( const ShardedQuadraticProgram& sharded_qp, - const absl::optional& primal_solution, - const absl::optional& dual_solution, + const std::optional& primal_solution, + const std::optional& dual_solution, const double desired_relative_error, const double failure_probability, std::mt19937& mt_generator) { - absl::optional primal_active_set_indicator; - absl::optional dual_active_set_indicator; + std::optional primal_active_set_indicator; + std::optional dual_active_set_indicator; if (primal_solution.has_value()) { primal_active_set_indicator = ComputePrimalActiveSetIndicator(sharded_qp, *primal_solution); diff --git a/ortools/pdlp/sharded_optimization_utils.h b/ortools/pdlp/sharded_optimization_utils.h index f952d41cd8..be61467ae8 100644 --- a/ortools/pdlp/sharded_optimization_utils.h +++ b/ortools/pdlp/sharded_optimization_utils.h @@ -19,10 +19,10 @@ #define PDLP_SHARDED_OPTIMIZATION_UTILS_H_ #include +#include #include #include "Eigen/Core" -#include "absl/types/optional.h" #include "ortools/pdlp/sharded_quadratic_program.h" #include "ortools/pdlp/sharder.h" #include "ortools/pdlp/solve_log.pb.h" @@ -182,8 +182,8 @@ struct SingularValueAndIterations { // starting point for the power method, in order to have deterministic results. SingularValueAndIterations EstimateMaximumSingularValueOfConstraintMatrix( const ShardedQuadraticProgram& sharded_qp, - const absl::optional& primal_solution, - const absl::optional& dual_solution, + const std::optional& primal_solution, + const std::optional& dual_solution, const double desired_relative_error, const double failure_probability, std::mt19937& mt_generator); diff --git a/ortools/pdlp/sharded_optimization_utils_test.cc b/ortools/pdlp/sharded_optimization_utils_test.cc index caac8b670a..664a5fdeaa 100644 --- a/ortools/pdlp/sharded_optimization_utils_test.cc +++ b/ortools/pdlp/sharded_optimization_utils_test.cc @@ -21,7 +21,6 @@ #include "Eigen/Core" #include "Eigen/SparseCore" -#include "absl/types/optional.h" #include "gmock/gmock.h" #include "gtest/gtest.h" #include "ortools/pdlp/quadratic_program.h" diff --git a/ortools/pdlp/termination.cc b/ortools/pdlp/termination.cc index de568f0d60..ff1a6f1c49 100644 --- a/ortools/pdlp/termination.cc +++ b/ortools/pdlp/termination.cc @@ -15,8 +15,8 @@ #include #include +#include -#include "absl/types/optional.h" #include "ortools/base/logging.h" #include "ortools/pdlp/solve_log.pb.h" #include "ortools/pdlp/solvers.pb.h" @@ -87,7 +87,7 @@ bool DualInfeasibilityCriteriaMet(double eps_dual_infeasible, } // namespace -absl::optional CheckTerminationCriteria( +std::optional CheckTerminationCriteria( const TerminationCriteria& criteria, const IterationStats& stats, const QuadraticProgramBoundNorms& bound_norms, const bool force_numerical_termination) { diff --git a/ortools/pdlp/termination.h b/ortools/pdlp/termination.h index c00b083167..ad231075d5 100644 --- a/ortools/pdlp/termination.h +++ b/ortools/pdlp/termination.h @@ -14,7 +14,8 @@ #ifndef PDLP_TERMINATION_H_ #define PDLP_TERMINATION_H_ -#include "absl/types/optional.h" +#include + #include "ortools/pdlp/solve_log.pb.h" #include "ortools/pdlp/solvers.pb.h" @@ -48,7 +49,7 @@ struct QuadraticProgramBoundNorms { // NOTE: This function assumes that the solution used to compute the stats // satisfies the primal and dual variable bounds; see // https://developers.google.com/optimization/lp/pdlp_math#dual_variable_bounds. -absl::optional CheckTerminationCriteria( +std::optional CheckTerminationCriteria( const TerminationCriteria& criteria, const IterationStats& stats, const QuadraticProgramBoundNorms& bound_norms, bool force_numerical_termination = false); diff --git a/ortools/pdlp/termination_test.cc b/ortools/pdlp/termination_test.cc index f5c1ad3be1..6267f426fa 100644 --- a/ortools/pdlp/termination_test.cc +++ b/ortools/pdlp/termination_test.cc @@ -14,8 +14,8 @@ #include "ortools/pdlp/termination.h" #include +#include -#include "absl/types/optional.h" #include "gmock/gmock.h" #include "gtest/gtest.h" #include "ortools/base/protobuf_util.h" @@ -72,7 +72,7 @@ TEST_P(TerminationTest, NoTerminationWithEmptyIterationStats) { TEST_P(TerminationTest, TerminationWithNumericalError) { IterationStats stats; - absl::optional maybe_result = + std::optional maybe_result = CheckTerminationCriteria(test_criteria_, stats, TestLpBoundNorms(), /*force_numerical_termination=*/true); EXPECT_THAT( @@ -83,7 +83,7 @@ TEST_P(TerminationTest, TerminationWithNumericalError) { TEST_P(TerminationTest, TerminationWithTimeLimit) { const auto stats = ParseTextOrDie(R"pb(cumulative_time_sec: 100.0)pb"); - absl::optional maybe_result = + std::optional maybe_result = CheckTerminationCriteria(test_criteria_, stats, TestLpBoundNorms()); EXPECT_THAT(maybe_result, Optional(FieldsAre(TERMINATION_REASON_TIME_LIMIT, POINT_TYPE_NONE))); @@ -92,7 +92,7 @@ TEST_P(TerminationTest, TerminationWithTimeLimit) { TEST_P(TerminationTest, TerminationWithKktMatrixPassLimit) { const auto stats = ParseTextOrDie(R"pb( cumulative_kkt_matrix_passes: 2500)pb"); - absl::optional maybe_result = + std::optional maybe_result = CheckTerminationCriteria(test_criteria_, stats, TestLpBoundNorms()); EXPECT_THAT(maybe_result, Optional(FieldsAre(TERMINATION_REASON_KKT_MATRIX_PASS_LIMIT, @@ -106,7 +106,7 @@ TEST_P(TerminationTest, PrimalInfeasibleFromIterateDifference) { max_dual_ray_infeasibility: 1.0e-16 candidate_type: POINT_TYPE_ITERATE_DIFFERENCE })pb"); - absl::optional maybe_result = + std::optional maybe_result = CheckTerminationCriteria(test_criteria_, stats, TestLpBoundNorms()); EXPECT_THAT(maybe_result, Optional(FieldsAre(TERMINATION_REASON_PRIMAL_INFEASIBLE, @@ -153,7 +153,7 @@ TEST_P(TerminationTest, DualInfeasibleFromAverageIterate) { max_primal_ray_infeasibility: 1.0e-16 candidate_type: POINT_TYPE_AVERAGE_ITERATE })pb"); - absl::optional maybe_result = + std::optional maybe_result = CheckTerminationCriteria(test_criteria_, stats, TestLpBoundNorms()); EXPECT_THAT(maybe_result, Optional(FieldsAre(TERMINATION_REASON_DUAL_INFEASIBLE, @@ -205,7 +205,7 @@ TEST_P(TerminationTest, Optimal) { candidate_type: POINT_TYPE_CURRENT_ITERATE })pb"); - absl::optional maybe_result = + std::optional maybe_result = CheckTerminationCriteria(test_criteria_, stats, TestLpBoundNorms()); EXPECT_THAT(maybe_result, Optional(FieldsAre(TERMINATION_REASON_OPTIMAL, POINT_TYPE_CURRENT_ITERATE))); @@ -224,7 +224,7 @@ TEST_P(TerminationTest, OptimalEvenWithNumericalError) { })pb"); // Tests that OPTIMAL overrides NUMERICAL_ERROR when // force_numerical_termination == true. - absl::optional maybe_result = + std::optional maybe_result = CheckTerminationCriteria(test_criteria_, stats, TestLpBoundNorms(), /*force_numerical_termination=*/true); EXPECT_THAT(maybe_result, Optional(FieldsAre(TERMINATION_REASON_OPTIMAL, @@ -308,7 +308,7 @@ TEST_P(TerminationTest, ZeroToleranceZeroError) { test_criteria_.set_eps_optimal_absolute(0.0); test_criteria_.set_eps_optimal_relative(0.0); - absl::optional maybe_result = + std::optional maybe_result = CheckTerminationCriteria(test_criteria_, stats, TestLpBoundNorms()); EXPECT_THAT(maybe_result, Optional(FieldsAre(TERMINATION_REASON_OPTIMAL, POINT_TYPE_CURRENT_ITERATE))); @@ -327,8 +327,8 @@ TEST(TerminationTest, L2AndLInfDiffer) { struct { double primal_residual; - absl::optional expected_l2; - absl::optional expected_l_inf; + std::optional expected_l2; + std::optional expected_l_inf; } test_configs[] = { {10.0, TerminationReasonAndPointType{.reason = TERMINATION_REASON_OPTIMAL, @@ -352,7 +352,7 @@ TEST(TerminationTest, L2AndLInfDiffer) { test_criteria.set_optimality_norm(OPTIMALITY_NORM_L2); - absl::optional maybe_result = + std::optional maybe_result = CheckTerminationCriteria(test_criteria, stats, TestLpBoundNorms()); ASSERT_TRUE(maybe_result.has_value() == config.expected_l2.has_value()) << "primal_residual: " << config.primal_residual; diff --git a/ortools/pdlp/trust_region.cc b/ortools/pdlp/trust_region.cc index ed22609332..f16c5f6ec1 100644 --- a/ortools/pdlp/trust_region.cc +++ b/ortools/pdlp/trust_region.cc @@ -17,11 +17,11 @@ #include #include #include +#include #include #include #include "Eigen/Core" -#include "absl/types/optional.h" #include "ortools/base/logging.h" #include "ortools/base/mathutil.h" #include "ortools/pdlp/quadratic_program.h" @@ -178,8 +178,8 @@ double MedianOfShardMedians( const TrustRegionProblem& problem, const std::vector>& indexed_components_by_shard, const Sharder& sharder) { - std::vector> shard_medians(sharder.NumShards(), - absl::nullopt); + std::vector> shard_medians(sharder.NumShards(), + absl::nullopt); sharder.ParallelForEachShard([&](const Sharder::Shard& shard) { const auto& indexed_shard_components = indexed_components_by_shard[shard.Index()]; diff --git a/ortools/python/README.md b/ortools/python/README.md index b7260869fa..4a2a0011ae 100644 --- a/ortools/python/README.md +++ b/ortools/python/README.md @@ -100,4 +100,4 @@ Image has been generated using [plantuml](http://plantuml.com/): ```bash plantuml -Tsvg docs/{file}.dot ``` -So you can find the dot source files in [doc](doc). +So you can find the dot source files in [docs](docs). diff --git a/ortools/sat/BUILD.bazel b/ortools/sat/BUILD.bazel index aa4865f8a8..c10c8bd56c 100644 --- a/ortools/sat/BUILD.bazel +++ b/ortools/sat/BUILD.bazel @@ -48,7 +48,6 @@ cc_library( ":cp_model_utils", ":model", ":sat_parameters_cc_proto", - "//ortools/base:map_util", "//ortools/util:sorted_interval_list", "@com_google_absl//absl/container:flat_hash_map", "@com_google_absl//absl/strings:str_format", @@ -62,7 +61,6 @@ cc_library( visibility = ["//visibility:public"], deps = [ "//ortools/base", - "//ortools/base:map_util", "//ortools/base:typeid", "@com_google_absl//absl/container:flat_hash_map", ], @@ -117,7 +115,6 @@ cc_library( ":sat_parameters_cc_proto", "//ortools/base", "//ortools/base:hash", - "//ortools/base:map_util", "//ortools/port:proto_utils", "//ortools/util:saturated_arithmetic", "//ortools/util:sorted_interval_list", @@ -213,7 +210,6 @@ cc_library( ":synchronization", "//ortools/base", "//ortools/base:file", - "//ortools/base:map_util", "//ortools/base:stl_util", "//ortools/base:strong_vector", "//ortools/base:threadpool", @@ -290,7 +286,6 @@ cc_library( ":timetable", "//ortools/base", "//ortools/base:file", - "//ortools/base:map_util", "//ortools/base:stl_util", "//ortools/base:strong_vector", "//ortools/util:saturated_arithmetic", @@ -312,7 +307,6 @@ cc_library( ":cp_model_cc_proto", ":cp_model_utils", "//ortools/base", - "//ortools/base:map_util", "//ortools/base:strong_vector", "//ortools/util:bitset", "//ortools/util:sorted_interval_list", @@ -335,7 +329,6 @@ cc_library( ":sat_parameters_cc_proto", ":util", "//ortools/base", - "//ortools/base:map_util", "//ortools/base:mathutil", "//ortools/base:strong_vector", "//ortools/port:proto_utils", @@ -375,7 +368,6 @@ cc_library( ":var_domination", "//ortools/base", "//ortools/base:hash", - "//ortools/base:map_util", "//ortools/base:mathutil", "//ortools/base:stl_util", "//ortools/port:proto_utils", @@ -416,7 +408,6 @@ cc_library( ":util", "//ortools/base", "//ortools/base:hash", - "//ortools/base:map_util", "//ortools/util:saturated_arithmetic", "@com_google_absl//absl/container:btree", "@com_google_absl//absl/container:flat_hash_map", @@ -461,7 +452,6 @@ cc_library( ":util", "//ortools/base", "//ortools/base:hash", - "//ortools/base:map_util", "//ortools/base:stl_util", "//ortools/base:strong_vector", "//ortools/port:proto_utils", @@ -677,7 +667,6 @@ cc_library( "//ortools/base", "//ortools/base:hash", "//ortools/base:iterator_adaptors", - "//ortools/base:map_util", "//ortools/base:stl_util", "//ortools/base:strong_vector", "//ortools/graph:iterators", @@ -799,7 +788,6 @@ cc_library( ":model", ":sat_base", "//ortools/base", - "//ortools/base:map_util", "//ortools/base:strong_vector", "//ortools/util:bitset", "//ortools/util:strong_integers", @@ -845,7 +833,6 @@ cc_library( ":sat_base", ":sat_solver", "//ortools/base", - "//ortools/base:map_util", "//ortools/graph:strongly_connected_components", "//ortools/util:sort", "//ortools/util:sorted_interval_list", @@ -973,7 +960,6 @@ cc_library( "//ortools/algorithms:sparse_permutation", "//ortools/base", "//ortools/base:hash", - "//ortools/base:map_util", "//ortools/base:strong_vector", "//ortools/graph:io", "//ortools/graph:util", @@ -1038,7 +1024,6 @@ cc_library( ":util", ":zero_half_cuts", "//ortools/base", - "//ortools/base:map_util", "//ortools/base:strong_vector", "//ortools/glop:parameters_cc_proto", "//ortools/glop:preprocessor", @@ -1173,7 +1158,6 @@ cc_library( ":sat_solver", ":util", "//ortools/base", - "//ortools/base:map_util", "//ortools/linear_solver:linear_solver_cc_proto", "//ortools/port:proto_utils", "//ortools/util:strong_integers", @@ -1206,7 +1190,6 @@ cc_library( ":sat_solver", ":util", "//ortools/base", - "//ortools/base:map_util", "//ortools/linear_solver:linear_solver_cc_proto", "//ortools/port:proto_utils", "//ortools/util:strong_integers", @@ -1250,7 +1233,6 @@ cc_library( ":sat_solver", ":util", "//ortools/base", - "//ortools/base:map_util", "//ortools/base:stl_util", "//ortools/util:sorted_interval_list", "//ortools/util:strong_integers", @@ -1269,7 +1251,6 @@ cc_library( ":sat_base", ":sat_solver", "//ortools/base", - "//ortools/base:map_util", "//ortools/util:rev", "//ortools/util:sort", "//ortools/util:strong_integers", @@ -1320,7 +1301,6 @@ cc_library( ":sat_solver", ":theta_tree", "//ortools/base", - "//ortools/base:map_util", "//ortools/util:rev", "//ortools/util:sort", "//ortools/util:strong_integers", @@ -1338,7 +1318,6 @@ cc_library( ":sat_base", ":sat_solver", "//ortools/base", - "//ortools/base:map_util", "//ortools/util:rev", "//ortools/util:strong_integers", "@com_google_absl//absl/container:btree", @@ -1514,7 +1493,6 @@ cc_library( "//ortools/algorithms:find_graph_symmetries", "//ortools/algorithms:sparse_permutation", "//ortools/base:hash", - "//ortools/base:map_util", "//ortools/util:logging", "@com_google_absl//absl/container:flat_hash_map", "@com_google_absl//absl/memory", diff --git a/ortools/sat/boolean_problem.cc b/ortools/sat/boolean_problem.cc index 1796ab198c..b64d581869 100644 --- a/ortools/sat/boolean_problem.cc +++ b/ortools/sat/boolean_problem.cc @@ -36,7 +36,6 @@ #endif // __PORTABLE_PLATFORM__ #include "ortools/algorithms/find_graph_symmetries.h" #include "ortools/algorithms/sparse_permutation.h" -#include "ortools/base/map_util.h" #include "ortools/base/strong_vector.h" #include "ortools/graph/util.h" #include "ortools/port/proto_utils.h" @@ -519,7 +518,7 @@ class IdGenerator { // a new id, otherwise return the previously generated id. int GetId(int type, Coefficient coefficient) { const std::pair key(type, coefficient.value()); - return gtl::LookupOrInsert(&id_map_, key, id_map_.size()); + return id_map_.emplace(key, id_map_.size()).first->second; } private: diff --git a/ortools/sat/circuit.cc b/ortools/sat/circuit.cc index 2e72ccec1a..276b5b07fb 100644 --- a/ortools/sat/circuit.cc +++ b/ortools/sat/circuit.cc @@ -20,7 +20,6 @@ #include "absl/container/flat_hash_map.h" #include "absl/meta/type_traits.h" #include "ortools/base/logging.h" -#include "ortools/base/map_util.h" #include "ortools/sat/integer.h" #include "ortools/sat/model.h" #include "ortools/sat/sat_base.h" @@ -75,8 +74,8 @@ CircuitPropagator::CircuitPropagator(const int num_nodes, // Tricky: For self-arc, we watch instead when the arc become false. const Literal watched_literal = tail == head ? literal.Negated() : literal; - int watch_index = gtl::FindWithDefault(literal_to_watch_index, - watched_literal.Index(), -1); + const auto& it = literal_to_watch_index.find(watched_literal.Index()); + int watch_index = it != literal_to_watch_index.end() ? it->second : -1; if (watch_index == -1) { watch_index = watch_index_to_literal_.size(); literal_to_watch_index[watched_literal.Index()] = watch_index; diff --git a/ortools/sat/clause.cc b/ortools/sat/clause.cc index 21de0f96f8..757148e152 100644 --- a/ortools/sat/clause.cc +++ b/ortools/sat/clause.cc @@ -30,7 +30,6 @@ #include "absl/types/span.h" #include "ortools/base/hash.h" #include "ortools/base/logging.h" -#include "ortools/base/map_util.h" #include "ortools/base/stl_util.h" #include "ortools/base/strong_vector.h" #include "ortools/base/timer.h" @@ -1611,7 +1610,7 @@ bool BinaryImplicationGraph::TransformIntoMaxCliques( clique = ExpandAtMostOne(clique, max_num_explored_nodes); } std::sort(clique.begin(), clique.end()); - if (!gtl::InsertIfNotPresent(&max_cliques, clique)) { + if (!max_cliques.emplace(clique).second) { ++num_removed; clique.clear(); continue; diff --git a/ortools/sat/cp_model_loader.cc b/ortools/sat/cp_model_loader.cc index 4ef2b8e956..a5d789400b 100644 --- a/ortools/sat/cp_model_loader.cc +++ b/ortools/sat/cp_model_loader.cc @@ -30,7 +30,6 @@ #include "absl/types/span.h" #include "ortools/algorithms/sparse_permutation.h" #include "ortools/base/logging.h" -#include "ortools/base/map_util.h" #include "ortools/base/stl_util.h" #include "ortools/base/strong_vector.h" #include "ortools/sat/all_different.h" @@ -805,7 +804,7 @@ void DetectOptionalVariables(const CpModelProto& model_proto, Model* m) { std::vector& vector_ref = enforcement_intersection[var]; int new_size = 0; for (const int literal : vector_ref) { - if (gtl::ContainsKey(literals_set, literal)) { + if (literals_set.contains(literal)) { vector_ref[new_size++] = literal; } } diff --git a/ortools/sat/cp_model_loader.h b/ortools/sat/cp_model_loader.h index 4ca1632261..20d1babcac 100644 --- a/ortools/sat/cp_model_loader.h +++ b/ortools/sat/cp_model_loader.h @@ -21,7 +21,6 @@ #include "absl/container/flat_hash_set.h" #include "ortools/base/integral_types.h" #include "ortools/base/logging.h" -#include "ortools/base/map_util.h" #include "ortools/base/strong_vector.h" #include "ortools/sat/cp_model.pb.h" #include "ortools/sat/cp_model_mapping.h" diff --git a/ortools/sat/cp_model_presolve.cc b/ortools/sat/cp_model_presolve.cc index 32f84b7824..42f6c8d82c 100644 --- a/ortools/sat/cp_model_presolve.cc +++ b/ortools/sat/cp_model_presolve.cc @@ -36,7 +36,6 @@ #include "absl/types/span.h" #include "ortools/base/integral_types.h" #include "ortools/base/logging.h" -#include "ortools/base/map_util.h" #include "ortools/base/mathutil.h" #include "ortools/base/stl_util.h" #include "ortools/base/timer.h" @@ -4855,7 +4854,7 @@ bool CpModelPresolver::PresolveAutomaton(ConstraintProto* ct) { const int64_t tail = proto.transition_tail(t); const int64_t label = proto.transition_label(t); const int64_t head = proto.transition_head(t); - if (!gtl::ContainsKey(reachable_states[time], tail)) continue; + if (!reachable_states[time].contains(tail)) continue; if (!context_->DomainContains(vars[time], label)) continue; reachable_states[time + 1].insert(head); } @@ -4871,9 +4870,9 @@ bool CpModelPresolver::PresolveAutomaton(ConstraintProto* ct) { const int64_t label = proto.transition_label(t); const int64_t head = proto.transition_head(t); - if (!gtl::ContainsKey(reachable_states[time], tail)) continue; + if (!reachable_states[time].contains(tail)) continue; if (!context_->DomainContains(vars[time], label)) continue; - if (!gtl::ContainsKey(reachable_states[time + 1], head)) continue; + if (!reachable_states[time + 1].contains(head)) continue; new_set.insert(tail); reached_values[time].insert(label); } diff --git a/ortools/sat/cp_model_service.proto b/ortools/sat/cp_model_service.proto index 951c0e1d93..d42160f07c 100644 --- a/ortools/sat/cp_model_service.proto +++ b/ortools/sat/cp_model_service.proto @@ -16,6 +16,7 @@ syntax = "proto3"; package operations_research.sat.v1; import "ortools/sat/cp_model.proto"; +import "ortools/sat/sat_parameters.proto"; option csharp_namespace = "Google.OrTools.Sat"; option java_package = "com.google.ortools.sat.v1"; @@ -30,11 +31,12 @@ service CpSolver { } } -// The request set to the remote solve service. +// The request sent to the remote solve service. message CpSolverRequest { + reserved 2; // The model to solve. CpModelProto model = 1; - // Extra solver parameters passed as a string. - string parameters_as_string = 2; + // Solver parameters. + SatParameters parameters = 3; } diff --git a/ortools/sat/cp_model_solver.cc b/ortools/sat/cp_model_solver.cc index 236ee2a818..55f821d660 100644 --- a/ortools/sat/cp_model_solver.cc +++ b/ortools/sat/cp_model_solver.cc @@ -49,7 +49,6 @@ #include "absl/synchronization/mutex.h" #include "absl/types/span.h" #include "ortools/base/cleanup.h" -#include "ortools/base/map_util.h" #include "ortools/graph/connected_components.h" #include "ortools/port/proto_utils.h" #include "ortools/sat/clause.h" @@ -424,19 +423,19 @@ std::string CpModelStats(const CpModelProto& model_proto) { for (const auto& entry : num_constraints_by_name) { const std::string& name = entry.first; constraints.push_back(absl::StrCat("#", name, ": ", entry.second)); - if (gtl::ContainsKey(num_reif_constraints_by_name, name)) { + if (num_reif_constraints_by_name.contains(name)) { absl::StrAppend(&constraints.back(), " (#enforced: ", num_reif_constraints_by_name[name], ")"); } - if (gtl::ContainsKey(name_to_num_literals, name)) { + if (name_to_num_literals.contains(name)) { absl::StrAppend(&constraints.back(), " (#literals: ", name_to_num_literals[name], ")"); } - if (gtl::ContainsKey(name_to_num_terms, name)) { + if (name_to_num_terms.contains(name)) { absl::StrAppend(&constraints.back(), " (#terms: ", name_to_num_terms[name], ")"); } - if (gtl::ContainsKey(name_to_num_complex_domain, name)) { + if (name_to_num_complex_domain.contains(name)) { absl::StrAppend(&constraints.back(), " (#complex_domain: ", name_to_num_complex_domain[name], ")"); @@ -1406,7 +1405,8 @@ void LoadCpModel(const CpModelProto& model_proto, Model* model) { lp_var.positive_var = positive_var; lp_var.model_var = mapping->GetProtoVariableFromIntegerVariable(positive_var); - lp_var.lp = gtl::FindWithDefault(*lp_dispatcher, positive_var, nullptr); + const auto& it = lp_dispatcher->find(positive_var); + lp_var.lp = it != lp_dispatcher->end() ? it->second : nullptr; if (lp_var.model_var >= 0) { lp_vars->vars.push_back(lp_var); diff --git a/ortools/sat/cp_model_symmetries.cc b/ortools/sat/cp_model_symmetries.cc index de6c7f561d..fb4604c08e 100644 --- a/ortools/sat/cp_model_symmetries.cc +++ b/ortools/sat/cp_model_symmetries.cc @@ -34,7 +34,6 @@ #include "ortools/algorithms/sparse_permutation.h" #include "ortools/base/hash.h" #include "ortools/base/logging.h" -#include "ortools/base/map_util.h" #include "ortools/graph/graph.h" #include "ortools/sat/cp_model.pb.h" #include "ortools/sat/cp_model_mapping.h" @@ -72,7 +71,7 @@ class IdGenerator { // If the color was never seen before, then generate a new id, otherwise // return the previously generated id. int GetId(const std::vector& color) { - return gtl::LookupOrInsert(&id_map_, color, id_map_.size()); + return id_map_.emplace(color, id_map_.size()).first->second; } int NextFreeId() const { return id_map_.size(); } diff --git a/ortools/sat/feasibility_pump.cc b/ortools/sat/feasibility_pump.cc index 0dfa807ddc..f2b8fc3658 100644 --- a/ortools/sat/feasibility_pump.cc +++ b/ortools/sat/feasibility_pump.cc @@ -24,7 +24,6 @@ #include "absl/container/flat_hash_map.h" #include "absl/meta/type_traits.h" #include "ortools/base/logging.h" -#include "ortools/base/map_util.h" #include "ortools/base/strong_vector.h" #include "ortools/glop/parameters.pb.h" #include "ortools/glop/revised_simplex.h" @@ -436,7 +435,7 @@ void FeasibilityPump::UpdateBoundsOfLpVariables() { } double FeasibilityPump::GetLPSolutionValue(IntegerVariable variable) const { - return lp_solution_[gtl::FindOrDie(mirror_lp_variable_, variable).value()]; + return lp_solution_[mirror_lp_variable_.at(variable).value()]; } double FeasibilityPump::GetVariableValueAtCpScale(ColIndex var) { @@ -449,8 +448,7 @@ double FeasibilityPump::GetVariableValueAtCpScale(ColIndex var) { int64_t FeasibilityPump::GetIntegerSolutionValue( IntegerVariable variable) const { - return integer_solution_[gtl::FindOrDie(mirror_lp_variable_, variable) - .value()]; + return integer_solution_[mirror_lp_variable_.at(variable).value()]; } bool FeasibilityPump::Round() { diff --git a/ortools/sat/integer.cc b/ortools/sat/integer.cc index 6295fe826c..98873b4f25 100644 --- a/ortools/sat/integer.cc +++ b/ortools/sat/integer.cc @@ -28,7 +28,6 @@ #include "absl/strings/str_cat.h" #include "absl/types/span.h" #include "ortools/base/logging.h" -#include "ortools/base/map_util.h" #include "ortools/base/strong_vector.h" #include "ortools/sat/model.h" #include "ortools/sat/sat_base.h" @@ -740,7 +739,7 @@ IntegerVariable IntegerTrail::GetOrCreateConstantIntegerVariable( insert.first->second = new_var; if (value != 0) { // Note that this might invalidate insert.first->second. - gtl::InsertOrDie(&constant_map_, -value, NegationOf(new_var)); + CHECK(constant_map_.emplace(-value, NegationOf(new_var)).second); } return new_var; } @@ -1297,7 +1296,7 @@ bool IntegerTrail::EnqueueInternal( // we always map these to enqueued literals during conflict resolution. if ((*domains_)[var].NumIntervals() > 1) { const auto& domain = (*domains_)[var]; - int index = var_to_current_lb_interval_index_.FindOrDie(var); + int index = var_to_current_lb_interval_index_.at(var); const int size = domain.NumIntervals(); while (index < size && i_lit.bound > domain[index].end) { ++index; diff --git a/ortools/sat/integer.h b/ortools/sat/integer.h index fb39df428f..ce1b10c1e4 100644 --- a/ortools/sat/integer.h +++ b/ortools/sat/integer.h @@ -37,7 +37,6 @@ #include "ortools/base/integral_types.h" #include "ortools/base/logging.h" #include "ortools/base/macros.h" -#include "ortools/base/map_util.h" #include "ortools/base/strong_vector.h" #include "ortools/graph/iterators.h" #include "ortools/sat/model.h" diff --git a/ortools/sat/integer_search.cc b/ortools/sat/integer_search.cc index 2ec731d8ec..92bab927a5 100644 --- a/ortools/sat/integer_search.cc +++ b/ortools/sat/integer_search.cc @@ -25,7 +25,6 @@ #include "absl/time/clock.h" #include "absl/time/time.h" #include "ortools/base/logging.h" -#include "ortools/base/map_util.h" #include "ortools/sat/cp_model.pb.h" #include "ortools/sat/cp_model_mapping.h" #include "ortools/sat/implied_bounds.h" @@ -116,8 +115,9 @@ IntegerLiteral SplitAroundLpValue(IntegerVariable var, Model* model) { DCHECK(!integer_trail->IsCurrentlyIgnored(var)); const IntegerVariable positive_var = PositiveVariable(var); + const auto& it = lp_dispatcher->find(positive_var); const LinearProgrammingConstraint* lp = - gtl::FindWithDefault(*lp_dispatcher, positive_var, nullptr); + it == lp_dispatcher->end() ? nullptr : it->second; // We only use this if the sub-lp has a solution, and depending on the value // of exploit_all_lp_solution() if it is a pure-integer solution. diff --git a/ortools/sat/linear_constraint_manager.cc b/ortools/sat/linear_constraint_manager.cc index e4e58dbb5d..02eb260a74 100644 --- a/ortools/sat/linear_constraint_manager.cc +++ b/ortools/sat/linear_constraint_manager.cc @@ -18,11 +18,11 @@ #include #include #include +#include #include #include #include -#include "absl/container/btree_map.h" #include "absl/container/flat_hash_map.h" #include "absl/meta/type_traits.h" #include "absl/strings/str_cat.h" diff --git a/ortools/sat/linear_programming_constraint.cc b/ortools/sat/linear_programming_constraint.cc index b3a4961d76..2854ccb460 100644 --- a/ortools/sat/linear_programming_constraint.cc +++ b/ortools/sat/linear_programming_constraint.cc @@ -33,7 +33,6 @@ #include "absl/strings/str_cat.h" #include "absl/types/span.h" #include "ortools/base/logging.h" -#include "ortools/base/map_util.h" #include "ortools/base/mathutil.h" #include "ortools/base/strong_vector.h" #include "ortools/glop/parameters.pb.h" @@ -635,13 +634,12 @@ glop::Fractional LinearProgrammingConstraint::GetVariableValueAtCpScale( double LinearProgrammingConstraint::GetSolutionValue( IntegerVariable variable) const { - return lp_solution_[gtl::FindOrDie(mirror_lp_variable_, variable).value()]; + return lp_solution_[mirror_lp_variable_.at(variable).value()]; } double LinearProgrammingConstraint::GetSolutionReducedCost( IntegerVariable variable) const { - return lp_reduced_cost_[gtl::FindOrDie(mirror_lp_variable_, variable) - .value()]; + return lp_reduced_cost_[mirror_lp_variable_.at(variable).value()]; } void LinearProgrammingConstraint::UpdateBoundsOfLpVariables() { @@ -887,7 +885,7 @@ bool LinearProgrammingConstraint::PostprocessAndAddCut( // Simple copy for non-slack variables. if (var < first_new_var) { const glop::ColIndex col = - gtl::FindOrDie(mirror_lp_variable_, PositiveVariable(var)); + mirror_lp_variable_.at(PositiveVariable(var)); if (VariableIsPositive(var)) { tmp_scattered_vector_.Add(col, cut->coeffs[i]); } else { @@ -906,8 +904,7 @@ bool LinearProgrammingConstraint::PostprocessAndAddCut( for (const std::pair& term : ib_slack_infos[index].terms) { tmp_terms_.push_back( - {gtl::FindOrDie(mirror_lp_variable_, - PositiveVariable(term.first)), + {mirror_lp_variable_.at(PositiveVariable(term.first)), VariableIsPositive(term.first) ? term.second : -term.second}); } if (!tmp_scattered_vector_.AddLinearExpressionMultiple(multiplier, diff --git a/ortools/sat/model.h b/ortools/sat/model.h index 7da55570b5..faf0424154 100644 --- a/ortools/sat/model.h +++ b/ortools/sat/model.h @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -27,7 +28,6 @@ #include "absl/meta/type_traits.h" #include "ortools/base/logging.h" #include "ortools/base/macros.h" -#include "ortools/base/map_util.h" #include "ortools/base/typeid.h" namespace operations_research { @@ -129,8 +129,9 @@ class Model { */ template const T* Get() const { - return static_cast( - gtl::FindWithDefault(singletons_, gtl::FastTypeId(), nullptr)); + const auto& it = singletons_.find(gtl::FastTypeId()); + return it != singletons_.end() ? static_cast(it->second) + : nullptr; } /** @@ -138,8 +139,8 @@ class Model { */ template T* Mutable() const { - return static_cast( - gtl::FindWithDefault(singletons_, gtl::FastTypeId(), nullptr)); + const auto& it = singletons_.find(gtl::FastTypeId()); + return it != singletons_.end() ? static_cast(it->second) : nullptr; } /** diff --git a/ortools/sat/optimization.cc b/ortools/sat/optimization.cc index e15d8e4d33..6c5e142516 100644 --- a/ortools/sat/optimization.cc +++ b/ortools/sat/optimization.cc @@ -34,7 +34,6 @@ #include "ortools/base/cleanup.h" #include "ortools/base/logging.h" #include "ortools/base/macros.h" -#include "ortools/base/map_util.h" #include "ortools/base/stl_util.h" #include "ortools/port/proto_utils.h" #include "ortools/sat/boolean_problem.h" @@ -1255,7 +1254,7 @@ SatSolver::Status FindCores(std::vector assumptions, { absl::btree_set temp(core.begin(), core.end()); for (int i = 0; i < assumptions.size(); ++i) { - if (gtl::ContainsKey(temp, assumptions[i])) { + if (temp.contains(assumptions[i])) { indices.push_back(i); } } @@ -1975,7 +1974,7 @@ SatSolver::Status CoreBasedOptimizer::Optimize() { IntegerValue new_var_ub(0); int new_depth = 0; for (const Literal lit : core) { - const int index = gtl::FindOrDie(literal_to_term_index, lit.Index()); + const int index = literal_to_term_index.at(lit.Index()); // When this happen, the core is now trivially "minimized" by the new // bound on this variable, so there is no point in adding it. @@ -2011,7 +2010,7 @@ SatSolver::Status CoreBasedOptimizer::Optimize() { std::vector constraint_vars; std::vector constraint_coeffs; for (const Literal lit : core) { - const int index = gtl::FindOrDie(literal_to_term_index, lit.Index()); + const int index = literal_to_term_index.at(lit.Index()); terms_[index].weight -= min_weight; constraint_vars.push_back(terms_[index].var); constraint_coeffs.push_back(1); diff --git a/ortools/sat/precedences.cc b/ortools/sat/precedences.cc index 094da91e0d..83c76bc342 100644 --- a/ortools/sat/precedences.cc +++ b/ortools/sat/precedences.cc @@ -22,7 +22,6 @@ #include "absl/types/span.h" #include "ortools/base/cleanup.h" #include "ortools/base/logging.h" -#include "ortools/base/map_util.h" #include "ortools/base/stl_util.h" #include "ortools/base/strong_vector.h" #include "ortools/sat/clause.h" @@ -880,7 +879,7 @@ int PrecedencesPropagator:: std::vector arcs_in_clause; for (const ArcIndex arc_index : incoming_arcs_[target]) { const Literal literal(arcs_[arc_index].presence_literals.front()); - if (gtl::ContainsKey(clause_set, literal.Negated())) { + if (clause_set.contains(literal.Negated())) { arcs_in_clause.push_back(arc_index); } } diff --git a/ortools/sat/presolve_context.cc b/ortools/sat/presolve_context.cc index ef9d73ac3d..955908382e 100644 --- a/ortools/sat/presolve_context.cc +++ b/ortools/sat/presolve_context.cc @@ -31,7 +31,6 @@ #include "absl/strings/str_cat.h" #include "absl/types/span.h" #include "ortools/base/logging.h" -#include "ortools/base/map_util.h" #include "ortools/base/mathutil.h" #include "ortools/port/proto_utils.h" #include "ortools/sat/cp_model.pb.h" @@ -1729,8 +1728,7 @@ bool PresolveContext::SubstituteVariableInObjective( // We can only "easily" substitute if the objective coefficient is a multiple // of the one in the constraint. - const int64_t coeff_in_objective = - gtl::FindOrDie(objective_map_, var_in_equality); + const int64_t coeff_in_objective = objective_map_.at(var_in_equality); CHECK_NE(coeff_in_equality, 0); CHECK_EQ(coeff_in_objective % coeff_in_equality, 0); diff --git a/ortools/sat/presolve_util.cc b/ortools/sat/presolve_util.cc index d4cb603a9d..517d684d91 100644 --- a/ortools/sat/presolve_util.cc +++ b/ortools/sat/presolve_util.cc @@ -23,7 +23,6 @@ #include "absl/meta/type_traits.h" #include "absl/types/span.h" #include "ortools/base/logging.h" -#include "ortools/base/map_util.h" #include "ortools/base/strong_vector.h" #include "ortools/sat/cp_model.pb.h" #include "ortools/sat/cp_model_utils.h" @@ -100,8 +99,7 @@ std::vector> DomainDeductions::ProcessClause( for (const int ref : clause) { const Index index = IndexFromLiteral(ref); for (int i = 0; i < to_process.size(); ++i) { - domains[i] = domains[i].UnionWith( - gtl::FindOrDieNoPrint(deductions_, {index, to_process[i]})); + domains[i] = domains[i].UnionWith(deductions_.at({index, to_process[i]})); } } diff --git a/ortools/sat/python/swig_helper.cc b/ortools/sat/python/swig_helper.cc index 1035ca34e5..a5c5352543 100644 --- a/ortools/sat/python/swig_helper.cc +++ b/ortools/sat/python/swig_helper.cc @@ -25,11 +25,11 @@ #include +#include "ortools/sat/cp_model.pb.h" +#include "ortools/util/sorted_interval_list.h" #include "pybind11/functional.h" #include "pybind11/pybind11.h" #include "pybind11/stl.h" -#include "ortools/sat/cp_model.pb.h" -#include "ortools/util/sorted_interval_list.h" using ::operations_research::Domain; using ::operations_research::sat::CpModelProto; diff --git a/ortools/sat/simplification.cc b/ortools/sat/simplification.cc index 13e65ce492..5a07a9c6ea 100644 --- a/ortools/sat/simplification.cc +++ b/ortools/sat/simplification.cc @@ -18,10 +18,10 @@ #include #include #include +#include #include #include -#include "absl/container/btree_set.h" #include "absl/memory/memory.h" #include "absl/types/span.h" #include "ortools/algorithms/dynamic_partition.h" diff --git a/ortools/sat/synchronization.cc b/ortools/sat/synchronization.cc index 5861b42a6a..3b7e597c81 100644 --- a/ortools/sat/synchronization.cc +++ b/ortools/sat/synchronization.cc @@ -21,11 +21,11 @@ #include #include #include +#include #include #include #include -#include "absl/container/btree_map.h" #include "ortools/base/logging.h" #include "ortools/base/timer.h" #if !defined(__PORTABLE_PLATFORM__) diff --git a/ortools/sat/util.cc b/ortools/sat/util.cc index 3a600734c9..50b94b4ab4 100644 --- a/ortools/sat/util.cc +++ b/ortools/sat/util.cc @@ -34,7 +34,6 @@ #include "absl/random/bit_gen_ref.h" #include "absl/random/distributions.h" #include "absl/types/span.h" -#include "ortools/base/map_util.h" #include "ortools/base/mathutil.h" #include "ortools/base/stl_util.h" #include "ortools/sat/sat_base.h" @@ -283,7 +282,7 @@ int MoveOneUnprocessedLiteralLast( const absl::btree_set& processed, int relevant_prefix_size, std::vector* literals) { if (literals->empty()) return -1; - if (!gtl::ContainsKey(processed, literals->back().Index())) { + if (!processed.contains(literals->back().Index())) { return std::min(relevant_prefix_size, literals->size()); } @@ -298,7 +297,7 @@ int MoveOneUnprocessedLiteralLast( int num_not_processed = 0; int target_prefix_size = literals->size() - 1; for (int i = literals->size() - 1; i >= 0; i--) { - if (gtl::ContainsKey(processed, (*literals)[i].Index())) { + if (processed.contains((*literals)[i].Index())) { ++num_processed; } else { ++num_not_processed; @@ -311,10 +310,9 @@ int MoveOneUnprocessedLiteralLast( // Once a prefix size has been decided, it is always better to // enqueue the literal already processed first. - std::stable_partition(literals->begin() + target_prefix_size, literals->end(), - [&processed](Literal l) { - return gtl::ContainsKey(processed, l.Index()); - }); + std::stable_partition( + literals->begin() + target_prefix_size, literals->end(), + [&processed](Literal l) { return processed.contains(l.Index()); }); return target_prefix_size; } diff --git a/ortools/util/BUILD.bazel b/ortools/util/BUILD.bazel index d1be8f6697..975efaf877 100644 --- a/ortools/util/BUILD.bazel +++ b/ortools/util/BUILD.bazel @@ -47,13 +47,16 @@ cc_library( cc_library( name = "vector_map", hdrs = ["vector_map.h"], - deps = ["//ortools/base:map_util"], + deps = [ + "//ortools/base", + "@com_google_absl//absl/container:flat_hash_map", + ], ) cc_library( name = "random_engine", hdrs = ["random_engine.h"], - deps = ["//ortools/base:map_util"], + deps = [], ) cc_library( @@ -175,7 +178,6 @@ cc_library( deps = [ "//ortools/base", "//ortools/base:hash", - "//ortools/base:map_util", ], ) diff --git a/ortools/util/rev.h b/ortools/util/rev.h index 1f2c671b1a..0a2d1edf54 100644 --- a/ortools/util/rev.h +++ b/ortools/util/rev.h @@ -19,7 +19,6 @@ #include "absl/container/flat_hash_map.h" #include "ortools/base/logging.h" -#include "ortools/base/map_util.h" #include "ortools/base/strong_vector.h" namespace operations_research { @@ -168,10 +167,8 @@ class RevMap : ReversibleInterface { void SetLevel(int level) final; int Level() const { return first_op_index_of_next_level_.size(); } - bool ContainsKey(key_type key) const { return gtl::ContainsKey(map_, key); } - const mapped_type& FindOrDie(key_type key) const { - return gtl::FindOrDie(map_, key); - } + bool contains(key_type key) const { return map_.contains(key); } + const mapped_type& at(key_type key) const { return map_.at(key); } void EraseOrDie(key_type key); void Set(key_type key, mapped_type value); // Adds or overwrites. diff --git a/ortools/util/tuple_set.h b/ortools/util/tuple_set.h index 702e5839cc..f55d83b759 100644 --- a/ortools/util/tuple_set.h +++ b/ortools/util/tuple_set.h @@ -42,7 +42,6 @@ #include "ortools/base/integral_types.h" #include "ortools/base/logging.h" #include "ortools/base/macros.h" -#include "ortools/base/map_util.h" namespace operations_research { // ----- Main IntTupleSet class ----- @@ -200,8 +199,7 @@ bool IntTupleSet::Data::Contains(const std::vector& candidate) const { } const int64_t fingerprint = Fingerprint(candidate); if (tuple_fprint_to_index_.contains(fingerprint)) { - const std::vector& indices = - gtl::FindOrDie(tuple_fprint_to_index_, fingerprint); + const std::vector& indices = tuple_fprint_to_index_.at(fingerprint); for (int i = 0; i < indices.size(); ++i) { const int tuple_index = indices[i]; for (int j = 0; j < arity_; ++j) { diff --git a/ortools/util/vector_map.h b/ortools/util/vector_map.h index ffc293a7ea..068e1341cf 100644 --- a/ortools/util/vector_map.h +++ b/ortools/util/vector_map.h @@ -19,7 +19,7 @@ #include #include "absl/container/flat_hash_map.h" -#include "ortools/base/map_util.h" +#include "ortools/base/logging.h" namespace operations_research { @@ -52,21 +52,18 @@ class VectorMap { } // Will return the index of the element if present, or die otherwise. - int IndexOrDie(const T& element) const { - return gtl::FindOrDie(map_, element); - } + int IndexOrDie(const T& element) const { return map_.at(element); } // Returns -1 if the element is not in the vector, or its unique // index if it is. int Index(const T& element) const { - return gtl::FindWithDefault(map_, element, -1); + const auto& it = map_.find(element); + return it != map_.end() ? it->second : -1; } // TODO(user): explore a int-type version. // Returns whether the element has already been added to the vector-map. - bool Contains(const T& element) const { - return gtl::ContainsKey(map_, element); - } + bool Contains(const T& element) const { return map_.contains(element); } // Returns the element at position index. const T& Element(int index) const {