From af879c6d177ac7580e923a1f2cc45d061a3c9bc8 Mon Sep 17 00:00:00 2001 From: Laurent Perron Date: Thu, 24 Aug 2023 17:14:58 +0200 Subject: [PATCH] big cleanup of includes --- examples/cpp/binpacking_2d_sat.cc | 89 +++---- examples/cpp/costas_array_sat.cc | 2 +- examples/cpp/dobble_ls.cc | 2 +- examples/cpp/golomb_sat.cc | 2 +- examples/cpp/magic_sequence_sat.cc | 2 +- examples/cpp/magic_square_sat.cc | 2 +- examples/cpp/weighted_tardiness_sat.cc | 7 - ortools/bop/bop_base.cc | 13 +- ortools/bop/bop_base.h | 6 +- ortools/bop/bop_fs.cc | 27 +- ortools/bop/bop_fs.h | 12 +- ortools/bop/bop_lns.cc | 27 +- ortools/bop/bop_lns.h | 9 +- ortools/bop/bop_ls.cc | 17 +- ortools/bop/bop_ls.h | 8 +- ortools/bop/bop_portfolio.cc | 15 +- ortools/bop/bop_solution.cc | 5 + ortools/bop/bop_solution.h | 3 + ortools/bop/bop_solver.cc | 26 +- ortools/bop/bop_solver.h | 9 - ortools/bop/bop_types.h | 1 - ortools/bop/bop_util.cc | 13 +- ortools/bop/bop_util.h | 3 +- ortools/bop/complete_optimizer.cc | 15 +- ortools/bop/complete_optimizer.h | 4 + ortools/bop/integral_solver.cc | 20 +- ortools/bop/integral_solver.h | 3 + ortools/constraint_solver/constraint_solver.h | 3 +- .../csharp/constraint_solver.i | 2 +- .../java/constraint_solver.i | 1 + ortools/constraint_solver/routing_flags.h | 1 - ortools/flatzinc/parser.yy.cc | 2 +- ortools/linear_solver/cplex_interface.cc | 2 +- ortools/linear_solver/highs_interface.cc | 3 +- ortools/linear_solver/model_exporter.cc | 2 +- ortools/linear_solver/sat_interface.cc | 2 +- ortools/linear_solver/scip_interface.cc | 2 +- ortools/linear_solver/xpress_interface.cc | 2 +- ortools/lp_data/BUILD.bazel | 1 - ortools/lp_data/scattered_vector.h | 10 +- ortools/pdlp/quadratic_program_io.cc | 2 - ortools/routing/samples/cvrp_disjoint_tw.cc | 2 +- ortools/routing/samples/cvrptw.cc | 2 +- .../routing/samples/cvrptw_soft_capacity.cc | 2 +- ortools/routing/samples/cvrptw_with_breaks.cc | 2 +- .../samples/cvrptw_with_precedences.cc | 2 +- .../routing/samples/cvrptw_with_refueling.cc | 2 +- .../routing/samples/cvrptw_with_resources.cc | 2 +- .../cvrptw_with_stop_times_and_resources.cc | 2 +- .../cvrptw_with_time_dependent_costs.cc | 2 +- ortools/routing/solomon_parser.cc | 2 +- ortools/routing/solomon_parser.h | 2 +- ortools/routing/solomon_parser_test.cc | 2 +- ortools/routing/tsplib_parser_test.cc | 2 +- ortools/routing/tsptw_parser_test.cc | 2 +- ortools/sat/cp_model_presolve.cc | 252 ++++++++++++------ ortools/sat/cuts.cc | 1 + ortools/sat/inclusion.h | 18 +- ortools/sat/presolve_context.h | 12 + .../sat/samples/step_function_sample_sat.cc | 3 - ortools/util/adaptative_parameter_value.h | 2 - ortools/util/bitset.h | 2 +- ortools/util/cached_log.h | 6 +- ortools/util/csharp/proto.i | 2 +- ortools/util/csharp/vector.i | 2 +- ortools/util/filelineiter.h | 4 - ortools/util/fp_utils.cc | 3 +- ortools/util/fp_utils.h | 3 +- ortools/util/functions_swig_helpers.h | 3 +- ortools/util/java/functions.i | 3 +- ortools/util/java/proto.i | 2 +- ortools/util/java/sorted_interval_list.i | 3 +- ortools/util/java/tuple_set.i | 3 +- ortools/util/java/vector.i | 2 +- ortools/util/piecewise_linear_function.cc | 1 + ortools/util/piecewise_linear_function.h | 8 +- ortools/util/python/proto.i | 2 +- ortools/util/python/vector.i | 2 +- 78 files changed, 455 insertions(+), 289 deletions(-) diff --git a/examples/cpp/binpacking_2d_sat.cc b/examples/cpp/binpacking_2d_sat.cc index 424fa94dcc6..f0eba309a30 100644 --- a/examples/cpp/binpacking_2d_sat.cc +++ b/examples/cpp/binpacking_2d_sat.cc @@ -21,12 +21,17 @@ #include #include "absl/flags/flag.h" +#include "absl/log/check.h" #include "google/protobuf/text_format.h" #include "ortools/base/init_google.h" #include "ortools/base/logging.h" #include "ortools/packing/binpacking_2d_parser.h" #include "ortools/packing/multiple_dimensions_bin_packing.pb.h" #include "ortools/sat/cp_model.h" +#include "ortools/sat/cp_model.pb.h" +#include "ortools/sat/cp_model_solver.h" +#include "ortools/sat/sat_parameters.pb.h" +#include "ortools/sat/util.h" ABSL_FLAG(std::string, input, "", "Input file."); ABSL_FLAG(int, instance, -1, "Instance number if the file."); @@ -35,8 +40,6 @@ ABSL_FLAG(int, max_bins, 0, "Maximum number of bins. The 0 default value implies the code will " "use some heuristics to compute this number."); ABSL_FLAG(bool, symmetry_breaking, true, "Use symmetry breaking constraints"); -ABSL_FLAG(bool, alternate_model, true, - "A different way to express the objective"); namespace operations_research { namespace sat { @@ -66,10 +69,7 @@ void LoadAndSolve(const std::string& file_name, int instance) { sum_of_items_area += shape.dimensions(0) * shape.dimensions(1); } - // Take the ceil of the ratio. - const int64_t trivial_lb = - (sum_of_items_area + area_of_one_bin - 1) / area_of_one_bin; - + const int64_t trivial_lb = CeilOfRatio(sum_of_items_area, area_of_one_bin); LOG(INFO) << "Trivial lower bound of the number of bins = " << trivial_lb; const int max_bins = absl::GetFlag(FLAGS_max_bins) == 0 ? trivial_lb * 2 @@ -97,7 +97,7 @@ void LoadAndSolve(const std::string& file_name, int instance) { // Exactly one bin is selected for each item. for (int item = 0; item < num_items; ++item) { - cp_model.AddEquality(LinearExpr::Sum(item_to_bin[item]), 1); + cp_model.AddExactlyOne(item_to_bin[item]); } // Manages positions and sizes for each item. @@ -134,51 +134,36 @@ void LoadAndSolve(const std::string& file_name, int instance) { LOG(FATAL) << num_dimensions << " dimensions not supported."; } - if (absl::GetFlag(FLAGS_alternate_model)) { - const IntVar obj = cp_model.NewIntVar(Domain(trivial_lb, max_bins)); - cp_model.Minimize(obj); - for (int b = trivial_lb; b < max_bins; ++b) { - for (int item = 0; item < num_items; ++item) { - cp_model.AddGreaterOrEqual(obj, b + 1) - .OnlyEnforceIf(item_to_bin[item][b]); - } - } - } else { - // Maintain one Boolean variable per bin that indicates if the bin is used - // or not. - std::vector bin_is_used(max_bins); - for (int b = 0; b < max_bins; ++b) { - bin_is_used[b] = cp_model.NewBoolVar(); - // Link bin_is_used[i] with the items in bin i. - std::vector all_items_in_bin; - for (int item = 0; item < num_items; ++item) { - cp_model.AddImplication(item_to_bin[item][b], bin_is_used[b]); - all_items_in_bin.push_back(item_to_bin[item][b]); - } - cp_model.AddBoolOr(all_items_in_bin).OnlyEnforceIf(bin_is_used[b]); + // Maintain one Boolean variable per bin that indicates if the bin is used + // or not. + std::vector bin_is_used(max_bins); + for (int b = 0; b < max_bins; ++b) { + bin_is_used[b] = cp_model.NewBoolVar(); + + // Link bin_is_used[i] with the items in bin i. + std::vector all_items_in_bin; + for (int item = 0; item < num_items; ++item) { + cp_model.AddImplication(item_to_bin[item][b], bin_is_used[b]); + all_items_in_bin.push_back(item_to_bin[item][b]); } + cp_model.AddBoolOr(all_items_in_bin).OnlyEnforceIf(bin_is_used[b]); + } - // Symmetry breaking. - if (absl::GetFlag(FLAGS_symmetry_breaking)) { - // Forces the number of items per bin to decrease. - std::vector num_items_in_bin(max_bins); - for (int b = 0; b < max_bins; ++b) { - num_items_in_bin[b] = cp_model.NewIntVar({0, num_items}); - std::vector items_in_bins; - for (int item = 0; item < num_items; ++item) { - items_in_bins.push_back(item_to_bin[item][b]); - } - cp_model.AddEquality(num_items_in_bin[b], - LinearExpr::Sum(items_in_bins)); - } - for (int b = 1; b < max_bins; ++b) { - cp_model.AddGreaterOrEqual(num_items_in_bin[b - 1], - num_items_in_bin[b]); + // Objective. + const IntVar obj = cp_model.NewIntVar({trivial_lb, max_bins}); + cp_model.Minimize(obj); + for (int b = trivial_lb; b + 1 < max_bins; ++b) { + cp_model.AddGreaterOrEqual(obj, b + 1).OnlyEnforceIf(bin_is_used[b]); + cp_model.AddImplication(bin_is_used[b + 1], bin_is_used[b]); + } + + if (absl::GetFlag(FLAGS_symmetry_breaking)) { + // Symmetry breaking: item[i] is in bin <= i for the first max_bins items. + for (int i = 0; i + 1 < max_bins; ++i) { + for (int b = i + 1; b < max_bins; ++b) { + cp_model.FixVariable(item_to_bin[i][b], false); } } - - // Objective. - cp_model.Minimize(LinearExpr::Sum(bin_is_used)); } // Setup parameters. @@ -191,6 +176,14 @@ void LoadAndSolve(const std::string& file_name, int instance) { absl::GetFlag(FLAGS_params), ¶meters)) << absl::GetFlag(FLAGS_params); } + + // If number of workers is >= 16 and < 24, we prefer replacing + // objective_lb_search by objective_shaving_search. + if (parameters.num_workers() >= 16 && parameters.num_workers() < 24) { + parameters.add_ignore_subsolvers("objective_lb_search"); + parameters.add_extra_subsolvers("objective_shaving_search"); + } + // We rely on the solver default logging to log the number of bins. const CpSolverResponse response = SolveWithParameters(cp_model.Build(), parameters); diff --git a/examples/cpp/costas_array_sat.cc b/examples/cpp/costas_array_sat.cc index f69baa4cda6..4c8b07e1524 100644 --- a/examples/cpp/costas_array_sat.cc +++ b/examples/cpp/costas_array_sat.cc @@ -32,8 +32,8 @@ #include "absl/strings/str_cat.h" #include "absl/strings/str_format.h" #include "ortools/base/init_google.h" -#include "ortools/base/types.h" #include "ortools/base/logging.h" +#include "ortools/base/types.h" #include "ortools/sat/cp_model.h" #include "ortools/sat/model.h" diff --git a/examples/cpp/dobble_ls.cc b/examples/cpp/dobble_ls.cc index a1e5090fa0a..17ddb2cf99e 100644 --- a/examples/cpp/dobble_ls.cc +++ b/examples/cpp/dobble_ls.cc @@ -40,8 +40,8 @@ #include "absl/strings/str_format.h" #include "ortools/base/commandlineflags.h" #include "ortools/base/init_google.h" -#include "ortools/base/types.h" #include "ortools/base/map_util.h" +#include "ortools/base/types.h" #include "ortools/constraint_solver/constraint_solveri.h" #include "ortools/util/bitset.h" diff --git a/examples/cpp/golomb_sat.cc b/examples/cpp/golomb_sat.cc index ba732e4ac4b..08e40bb0b81 100644 --- a/examples/cpp/golomb_sat.cc +++ b/examples/cpp/golomb_sat.cc @@ -32,8 +32,8 @@ #include "absl/strings/str_format.h" #include "google/protobuf/text_format.h" #include "ortools/base/init_google.h" -#include "ortools/base/types.h" #include "ortools/base/logging.h" +#include "ortools/base/types.h" #include "ortools/sat/cp_model.h" #include "ortools/sat/model.h" diff --git a/examples/cpp/magic_sequence_sat.cc b/examples/cpp/magic_sequence_sat.cc index 0a7d82d163d..5c6090c6337 100644 --- a/examples/cpp/magic_sequence_sat.cc +++ b/examples/cpp/magic_sequence_sat.cc @@ -25,8 +25,8 @@ #include "absl/flags/flag.h" #include "absl/strings/str_format.h" #include "ortools/base/init_google.h" -#include "ortools/base/types.h" #include "ortools/base/logging.h" +#include "ortools/base/types.h" #include "ortools/sat/cp_model.h" ABSL_FLAG(int, size, 50, "Size of the problem."); diff --git a/examples/cpp/magic_square_sat.cc b/examples/cpp/magic_square_sat.cc index 8264b43870d..474012eede2 100644 --- a/examples/cpp/magic_square_sat.cc +++ b/examples/cpp/magic_square_sat.cc @@ -18,8 +18,8 @@ #include "absl/strings/str_cat.h" #include "absl/strings/str_format.h" #include "ortools/base/init_google.h" -#include "ortools/base/types.h" #include "ortools/base/logging.h" +#include "ortools/base/types.h" #include "ortools/sat/cp_model.h" #include "ortools/sat/model.h" diff --git a/examples/cpp/weighted_tardiness_sat.cc b/examples/cpp/weighted_tardiness_sat.cc index 886c99c507a..0998febb057 100644 --- a/examples/cpp/weighted_tardiness_sat.cc +++ b/examples/cpp/weighted_tardiness_sat.cc @@ -11,8 +11,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include - #include #include #include @@ -20,15 +18,10 @@ #include #include "absl/flags/flag.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" #include "ortools/sat/model.h" #include "ortools/util/filelineiter.h" diff --git a/ortools/bop/bop_base.cc b/ortools/bop/bop_base.cc index b31ad3d19a6..8537324b71c 100644 --- a/ortools/bop/bop_base.cc +++ b/ortools/bop/bop_base.cc @@ -20,9 +20,20 @@ #include #include +#include "absl/log/check.h" #include "absl/strings/string_view.h" #include "absl/synchronization/mutex.h" -#include "ortools/sat/boolean_problem.h" +#include "ortools/base/logging.h" +#include "ortools/base/strong_vector.h" +#include "ortools/bop/bop_parameters.pb.h" +#include "ortools/bop/bop_solution.h" +#include "ortools/bop/bop_types.h" +#include "ortools/lp_data/lp_types.h" +#include "ortools/sat/boolean_problem.pb.h" +#include "ortools/sat/clause.h" +#include "ortools/sat/sat_base.h" +#include "ortools/util/stats.h" +#include "ortools/util/strong_integers.h" namespace operations_research { namespace bop { diff --git a/ortools/bop/bop_base.h b/ortools/bop/bop_base.h index 314e11a5388..2ea62c8064e 100644 --- a/ortools/bop/bop_base.h +++ b/ortools/bop/bop_base.h @@ -20,12 +20,14 @@ #include #include +#include "absl/base/thread_annotations.h" #include "absl/strings/string_view.h" #include "absl/synchronization/mutex.h" -#include "ortools/base/types.h" +#include "ortools/base/macros.h" #include "ortools/base/strong_vector.h" #include "ortools/bop/bop_parameters.pb.h" #include "ortools/bop/bop_solution.h" +#include "ortools/bop/bop_types.h" #include "ortools/lp_data/lp_types.h" #include "ortools/sat/boolean_problem.pb.h" #include "ortools/sat/clause.h" @@ -36,9 +38,9 @@ namespace operations_research { namespace bop { +class ProblemState; // Forward declaration. struct LearnedInfo; -class ProblemState; // Base class used to optimize a ProblemState. // Optimizers implementing this class are used in a sort of portfolio and diff --git a/ortools/bop/bop_fs.cc b/ortools/bop/bop_fs.cc index a5ac22cd523..d3cd2ef0d31 100644 --- a/ortools/bop/bop_fs.cc +++ b/ortools/bop/bop_fs.cc @@ -14,6 +14,7 @@ #include "ortools/bop/bop_fs.h" #include +#include #include #include #include @@ -21,21 +22,35 @@ #include #include -#include "absl/memory/memory.h" +#include "absl/log/check.h" +#include "absl/random/bit_gen_ref.h" +#include "absl/random/distributions.h" #include "absl/strings/str_format.h" #include "absl/strings/string_view.h" -#include "google/protobuf/text_format.h" #include "ortools/algorithms/sparse_permutation.h" -#include "ortools/base/commandlineflags.h" -#include "ortools/base/stl_util.h" +#include "ortools/base/logging.h" +#include "ortools/base/strong_vector.h" +#include "ortools/bop/bop_base.h" +#include "ortools/bop/bop_parameters.pb.h" +#include "ortools/bop/bop_solution.h" +#include "ortools/bop/bop_types.h" +#include "ortools/bop/bop_util.h" #include "ortools/glop/lp_solver.h" -#include "ortools/lp_data/lp_print_utils.h" +#include "ortools/glop/parameters.pb.h" +#include "ortools/lp_data/lp_data.h" +#include "ortools/lp_data/lp_types.h" #include "ortools/sat/boolean_problem.h" +#include "ortools/sat/boolean_problem.pb.h" +#include "ortools/sat/clause.h" #include "ortools/sat/lp_utils.h" +#include "ortools/sat/pb_constraint.h" +#include "ortools/sat/sat_base.h" +#include "ortools/sat/sat_parameters.pb.h" #include "ortools/sat/sat_solver.h" #include "ortools/sat/symmetry.h" #include "ortools/sat/util.h" -#include "ortools/util/bitset.h" +#include "ortools/util/strong_integers.h" +#include "ortools/util/time_limit.h" namespace operations_research { namespace bop { diff --git a/ortools/bop/bop_fs.h b/ortools/bop/bop_fs.h index 4e11df0041f..1064dd2943d 100644 --- a/ortools/bop/bop_fs.h +++ b/ortools/bop/bop_fs.h @@ -16,20 +16,14 @@ #include #include -#include +#include "absl/random/bit_gen_ref.h" #include "absl/strings/string_view.h" -#include "ortools/base/types.h" -#include "ortools/base/logging.h" -#include "ortools/base/macros.h" -#include "ortools/base/types.h" #include "ortools/bop/bop_base.h" #include "ortools/bop/bop_parameters.pb.h" -#include "ortools/bop/bop_solution.h" -#include "ortools/bop/bop_types.h" -#include "ortools/bop/bop_util.h" #include "ortools/glop/lp_solver.h" -#include "ortools/sat/boolean_problem.pb.h" +#include "ortools/lp_data/lp_data.h" +#include "ortools/lp_data/lp_types.h" #include "ortools/sat/sat_solver.h" #include "ortools/util/time_limit.h" diff --git a/ortools/bop/bop_lns.cc b/ortools/bop/bop_lns.cc index ef82aa855df..b8187aefe40 100644 --- a/ortools/bop/bop_lns.cc +++ b/ortools/bop/bop_lns.cc @@ -14,23 +14,36 @@ #include "ortools/bop/bop_lns.h" #include +#include #include #include -#include #include -#include "absl/memory/memory.h" +#include "absl/log/check.h" +#include "absl/random/bit_gen_ref.h" +#include "absl/random/distributions.h" #include "absl/strings/string_view.h" -#include "google/protobuf/text_format.h" #include "ortools/base/cleanup.h" -#include "ortools/base/commandlineflags.h" -#include "ortools/base/stl_util.h" +#include "ortools/base/logging.h" +#include "ortools/base/strong_vector.h" +#include "ortools/bop/bop_base.h" +#include "ortools/bop/bop_parameters.pb.h" +#include "ortools/bop/bop_solution.h" +#include "ortools/bop/bop_types.h" +#include "ortools/bop/bop_util.h" #include "ortools/glop/lp_solver.h" -#include "ortools/lp_data/lp_print_utils.h" +#include "ortools/lp_data/lp_data.h" +#include "ortools/lp_data/lp_types.h" #include "ortools/sat/boolean_problem.h" +#include "ortools/sat/boolean_problem.pb.h" #include "ortools/sat/lp_utils.h" +#include "ortools/sat/pb_constraint.h" +#include "ortools/sat/sat_base.h" +#include "ortools/sat/sat_parameters.pb.h" #include "ortools/sat/sat_solver.h" -#include "ortools/util/bitset.h" +#include "ortools/util/stats.h" +#include "ortools/util/strong_integers.h" +#include "ortools/util/time_limit.h" namespace operations_research { namespace bop { diff --git a/ortools/bop/bop_lns.h b/ortools/bop/bop_lns.h index 475296e7ed2..d9f94d11740 100644 --- a/ortools/bop/bop_lns.h +++ b/ortools/bop/bop_lns.h @@ -16,24 +16,17 @@ #include #include -#include #include +#include "absl/random/bit_gen_ref.h" #include "absl/strings/string_view.h" -#include "ortools/base/types.h" -#include "ortools/base/logging.h" -#include "ortools/base/macros.h" #include "ortools/base/strong_vector.h" -#include "ortools/base/types.h" #include "ortools/bop/bop_base.h" #include "ortools/bop/bop_parameters.pb.h" -#include "ortools/bop/bop_solution.h" #include "ortools/bop/bop_types.h" #include "ortools/bop/bop_util.h" -#include "ortools/glop/lp_solver.h" #include "ortools/sat/boolean_problem.pb.h" #include "ortools/sat/sat_solver.h" -#include "ortools/util/stats.h" #include "ortools/util/time_limit.h" namespace operations_research { diff --git a/ortools/bop/bop_ls.cc b/ortools/bop/bop_ls.cc index 0bcae625fad..857d337f367 100644 --- a/ortools/bop/bop_ls.cc +++ b/ortools/bop/bop_ls.cc @@ -22,12 +22,25 @@ #include #include -#include "absl/memory/memory.h" +#include "absl/container/flat_hash_map.h" +#include "absl/container/flat_hash_set.h" +#include "absl/log/check.h" +#include "absl/meta/type_traits.h" +#include "absl/random/bit_gen_ref.h" #include "absl/strings/str_format.h" #include "absl/strings/string_view.h" +#include "ortools/base/logging.h" #include "ortools/base/strong_vector.h" +#include "ortools/bop/bop_base.h" +#include "ortools/bop/bop_parameters.pb.h" +#include "ortools/bop/bop_solution.h" +#include "ortools/bop/bop_types.h" #include "ortools/bop/bop_util.h" -#include "ortools/sat/boolean_problem.h" +#include "ortools/sat/boolean_problem.pb.h" +#include "ortools/sat/sat_base.h" +#include "ortools/sat/sat_solver.h" +#include "ortools/util/strong_integers.h" +#include "ortools/util/time_limit.h" namespace operations_research { namespace bop { diff --git a/ortools/bop/bop_ls.h b/ortools/bop/bop_ls.h index 4d48dd89305..d3f48018292 100644 --- a/ortools/bop/bop_ls.h +++ b/ortools/bop/bop_ls.h @@ -27,6 +27,8 @@ #ifndef OR_TOOLS_BOP_BOP_LS_H_ #define OR_TOOLS_BOP_BOP_LS_H_ +#include + #include #include #include @@ -35,16 +37,20 @@ #include "absl/container/flat_hash_map.h" #include "absl/container/flat_hash_set.h" +#include "absl/random/bit_gen_ref.h" #include "absl/random/random.h" #include "absl/strings/string_view.h" -#include "ortools/base/hash.h" +#include "ortools/base/macros.h" #include "ortools/base/strong_vector.h" #include "ortools/bop/bop_base.h" +#include "ortools/bop/bop_parameters.pb.h" #include "ortools/bop/bop_solution.h" #include "ortools/bop/bop_types.h" #include "ortools/sat/boolean_problem.pb.h" +#include "ortools/sat/sat_base.h" #include "ortools/sat/sat_solver.h" #include "ortools/util/strong_integers.h" +#include "ortools/util/time_limit.h" namespace operations_research { namespace bop { diff --git a/ortools/bop/bop_portfolio.cc b/ortools/bop/bop_portfolio.cc index d238eb5f936..d98e13468f8 100644 --- a/ortools/bop/bop_portfolio.cc +++ b/ortools/bop/bop_portfolio.cc @@ -13,6 +13,8 @@ #include "ortools/bop/bop_portfolio.h" +#include + #include #include #include @@ -21,19 +23,30 @@ #include #include -#include "absl/memory/memory.h" +#include "absl/log/check.h" #include "absl/strings/str_format.h" #include "absl/strings/string_view.h" +#include "ortools/algorithms/sparse_permutation.h" +#include "ortools/base/logging.h" #include "ortools/base/stl_util.h" #include "ortools/base/strong_vector.h" +#include "ortools/bop/bop_base.h" #include "ortools/bop/bop_fs.h" #include "ortools/bop/bop_lns.h" #include "ortools/bop/bop_ls.h" +#include "ortools/bop/bop_parameters.pb.h" +#include "ortools/bop/bop_solution.h" +#include "ortools/bop/bop_types.h" #include "ortools/bop/bop_util.h" #include "ortools/bop/complete_optimizer.h" +#include "ortools/lp_data/lp_types.h" #include "ortools/sat/boolean_problem.h" #include "ortools/sat/boolean_problem.pb.h" +#include "ortools/sat/sat_solver.h" #include "ortools/sat/symmetry.h" +#include "ortools/util/random_engine.h" +#include "ortools/util/strong_integers.h" +#include "ortools/util/time_limit.h" namespace operations_research { namespace bop { diff --git a/ortools/bop/bop_solution.cc b/ortools/bop/bop_solution.cc index dfe025a6d7e..fc2fb1ff925 100644 --- a/ortools/bop/bop_solution.cc +++ b/ortools/bop/bop_solution.cc @@ -14,9 +14,14 @@ #include "ortools/bop/bop_solution.h" #include +#include #include +#include "absl/log/check.h" #include "absl/strings/string_view.h" +#include "ortools/base/strong_vector.h" +#include "ortools/bop/bop_types.h" +#include "ortools/sat/boolean_problem.pb.h" namespace operations_research { namespace bop { diff --git a/ortools/bop/bop_solution.h b/ortools/bop/bop_solution.h index 867228703b4..df9da0a54ac 100644 --- a/ortools/bop/bop_solution.h +++ b/ortools/bop/bop_solution.h @@ -14,6 +14,8 @@ #ifndef OR_TOOLS_BOP_BOP_SOLUTION_H_ #define OR_TOOLS_BOP_BOP_SOLUTION_H_ +#include + #include #include @@ -22,6 +24,7 @@ #include "ortools/bop/bop_types.h" #include "ortools/sat/boolean_problem.h" #include "ortools/sat/boolean_problem.pb.h" +#include "ortools/sat/pb_constraint.h" namespace operations_research { namespace bop { diff --git a/ortools/bop/bop_solver.cc b/ortools/bop/bop_solver.cc index ab0d6d64353..9b6b0dc78d4 100644 --- a/ortools/bop/bop_solver.cc +++ b/ortools/bop/bop_solver.cc @@ -18,21 +18,23 @@ #include #include +#include "absl/log/check.h" +#include "absl/status/status.h" +#include "absl/strings/str_format.h" #include "google/protobuf/text_format.h" -#include "ortools/base/commandlineflags.h" -#include "ortools/base/stl_util.h" -#include "ortools/bop/bop_fs.h" -#include "ortools/bop/bop_lns.h" -#include "ortools/bop/bop_ls.h" +#include "ortools/base/logging.h" +#include "ortools/base/threadpool.h" +#include "ortools/bop/bop_base.h" +#include "ortools/bop/bop_parameters.pb.h" #include "ortools/bop/bop_portfolio.h" -#include "ortools/bop/bop_util.h" -#include "ortools/bop/complete_optimizer.h" -#include "ortools/glop/lp_solver.h" -#include "ortools/lp_data/lp_print_utils.h" +#include "ortools/bop/bop_solution.h" +#include "ortools/bop/bop_types.h" +#include "ortools/lp_data/lp_types.h" #include "ortools/sat/boolean_problem.h" -#include "ortools/sat/lp_utils.h" -#include "ortools/sat/sat_solver.h" -#include "ortools/util/bitset.h" +#include "ortools/sat/boolean_problem.pb.h" +#include "ortools/sat/pb_constraint.h" +#include "ortools/util/stats.h" +#include "ortools/util/time_limit.h" namespace operations_research { namespace bop { diff --git a/ortools/bop/bop_solver.h b/ortools/bop/bop_solver.h index 70c1265f9e6..911c3a37fdd 100644 --- a/ortools/bop/bop_solver.h +++ b/ortools/bop/bop_solver.h @@ -36,20 +36,11 @@ // const BopSolveStatus solve_status = bop_solver.Solve(); // if (solve_status == BopSolveStatus::OPTIMAL_SOLUTION_FOUND) { ... } -#include -#include - -#include "ortools/base/types.h" -#include "ortools/base/logging.h" -#include "ortools/base/macros.h" -#include "ortools/base/types.h" #include "ortools/bop/bop_base.h" #include "ortools/bop/bop_parameters.pb.h" #include "ortools/bop/bop_solution.h" #include "ortools/bop/bop_types.h" -#include "ortools/glop/lp_solver.h" #include "ortools/sat/boolean_problem.pb.h" -#include "ortools/sat/sat_solver.h" #include "ortools/util/stats.h" #include "ortools/util/time_limit.h" diff --git a/ortools/bop/bop_types.h b/ortools/bop/bop_types.h index 64e45e79acf..5dc0901f3c4 100644 --- a/ortools/bop/bop_types.h +++ b/ortools/bop/bop_types.h @@ -18,7 +18,6 @@ #include #include -#include "ortools/base/types.h" #include "ortools/base/strong_vector.h" #include "ortools/util/strong_integers.h" diff --git a/ortools/bop/bop_util.cc b/ortools/bop/bop_util.cc index eafd181e8aa..a7eece3d293 100644 --- a/ortools/bop/bop_util.cc +++ b/ortools/bop/bop_util.cc @@ -13,16 +13,25 @@ #include "ortools/bop/bop_util.h" +#include + #include #include #include -#include "ortools/base/types.h" -#include "ortools/base/types.h" +#include "absl/log/check.h" +#include "ortools/base/strong_vector.h" #include "ortools/bop/bop_base.h" #include "ortools/bop/bop_solution.h" +#include "ortools/bop/bop_types.h" #include "ortools/sat/boolean_problem.h" +#include "ortools/sat/boolean_problem.pb.h" +#include "ortools/sat/pb_constraint.h" +#include "ortools/sat/restart.h" +#include "ortools/sat/sat_base.h" #include "ortools/sat/sat_solver.h" +#include "ortools/util/bitset.h" +#include "ortools/util/strong_integers.h" namespace operations_research { namespace bop { diff --git a/ortools/bop/bop_util.h b/ortools/bop/bop_util.h index 69551d99fa9..b4f66ade9fd 100644 --- a/ortools/bop/bop_util.h +++ b/ortools/bop/bop_util.h @@ -16,10 +16,9 @@ #include -#include "ortools/base/types.h" -#include "ortools/base/types.h" #include "ortools/bop/bop_base.h" #include "ortools/bop/bop_solution.h" +#include "ortools/sat/sat_base.h" #include "ortools/sat/sat_solver.h" namespace operations_research { diff --git a/ortools/bop/complete_optimizer.cc b/ortools/bop/complete_optimizer.cc index c2b11ffaa71..05ff13ec98f 100644 --- a/ortools/bop/complete_optimizer.cc +++ b/ortools/bop/complete_optimizer.cc @@ -19,9 +19,22 @@ #include #include +#include "absl/log/check.h" #include "absl/strings/string_view.h" +#include "ortools/bop/bop_base.h" +#include "ortools/bop/bop_parameters.pb.h" +#include "ortools/bop/bop_solution.h" #include "ortools/bop/bop_util.h" -#include "ortools/sat/boolean_problem.h" +#include "ortools/sat/boolean_problem.pb.h" +#include "ortools/sat/encoding.h" +#include "ortools/sat/model.h" +#include "ortools/sat/pb_constraint.h" +#include "ortools/sat/sat_base.h" +#include "ortools/sat/sat_parameters.pb.h" +#include "ortools/sat/sat_solver.h" +#include "ortools/util/stats.h" +#include "ortools/util/strong_integers.h" +#include "ortools/util/time_limit.h" namespace operations_research { namespace bop { diff --git a/ortools/bop/complete_optimizer.h b/ortools/bop/complete_optimizer.h index 52b5322c2e3..533a0132962 100644 --- a/ortools/bop/complete_optimizer.h +++ b/ortools/bop/complete_optimizer.h @@ -34,11 +34,15 @@ #include "absl/strings/string_view.h" #include "ortools/bop/bop_base.h" +#include "ortools/bop/bop_parameters.pb.h" #include "ortools/bop/bop_solution.h" #include "ortools/bop/bop_types.h" #include "ortools/sat/boolean_problem.pb.h" #include "ortools/sat/encoding.h" +#include "ortools/sat/model.h" +#include "ortools/sat/pb_constraint.h" #include "ortools/sat/sat_solver.h" +#include "ortools/util/time_limit.h" namespace operations_research { namespace bop { diff --git a/ortools/bop/integral_solver.cc b/ortools/bop/integral_solver.cc index 8813a4d2fdc..1a6c2c41420 100644 --- a/ortools/bop/integral_solver.cc +++ b/ortools/bop/integral_solver.cc @@ -13,19 +13,33 @@ #include "ortools/bop/integral_solver.h" -#include - #include #include #include -#include #include #include #include #include +#include "absl/log/check.h" +#include "absl/strings/str_format.h" +#include "ortools/base/logging.h" #include "ortools/bop/bop_solver.h" +#include "ortools/bop/bop_types.h" +#include "ortools/lp_data/lp_data.h" #include "ortools/lp_data/lp_decomposer.h" +#include "ortools/lp_data/lp_types.h" +#include "ortools/lp_data/lp_utils.h" +#include "ortools/lp_data/sparse.h" +#include "ortools/lp_data/sparse_column.h" +#include "ortools/lp_data/sparse_vector.h" +#include "ortools/sat/boolean_problem.h" +#include "ortools/sat/boolean_problem.pb.h" +#include "ortools/util/bitset.h" +#include "ortools/util/fp_utils.h" +#include "ortools/util/strong_integers.h" +#include "ortools/util/time_limit.h" +// MOE:end_strip namespace operations_research { namespace bop { diff --git a/ortools/bop/integral_solver.h b/ortools/bop/integral_solver.h index e7d455149bf..b6453b75a77 100644 --- a/ortools/bop/integral_solver.h +++ b/ortools/bop/integral_solver.h @@ -14,10 +14,13 @@ #ifndef OR_TOOLS_BOP_INTEGRAL_SOLVER_H_ #define OR_TOOLS_BOP_INTEGRAL_SOLVER_H_ +#include "absl/base/attributes.h" #include "absl/base/port.h" +#include "ortools/base/macros.h" #include "ortools/bop/bop_parameters.pb.h" #include "ortools/bop/bop_types.h" #include "ortools/lp_data/lp_data.h" +#include "ortools/lp_data/lp_types.h" #include "ortools/util/time_limit.h" namespace operations_research { diff --git a/ortools/constraint_solver/constraint_solver.h b/ortools/constraint_solver/constraint_solver.h index ab05dbb27ad..f9e9a0c3ff1 100644 --- a/ortools/constraint_solver/constraint_solver.h +++ b/ortools/constraint_solver/constraint_solver.h @@ -97,6 +97,7 @@ #include "ortools/constraint_solver/search_stats.pb.h" #include "ortools/constraint_solver/solver_parameters.pb.h" #include "ortools/util/piecewise_linear_function.h" +#include "ortools/util/saturated_arithmetic.h" #include "ortools/util/sorted_interval_list.h" #include "ortools/util/tuple_set.h" @@ -855,7 +856,7 @@ class Solver { /// AddConstraint is called outside of search (i.e., with state() == /// OUTSIDE_SEARCH). Most users should only use AddConstraint in this /// way. In this case, the constraint will belong to the model forever: it - /// cannot not be removed by backtracking. + /// cannot be removed by backtracking. /// /// - a rarer use case is that 'c' is not a real constraint of the model. It /// may be a constraint generated by a branching decision (a constraint whose diff --git a/ortools/constraint_solver/csharp/constraint_solver.i b/ortools/constraint_solver/csharp/constraint_solver.i index 9a5af25e4d9..9197932ad05 100644 --- a/ortools/constraint_solver/csharp/constraint_solver.i +++ b/ortools/constraint_solver/csharp/constraint_solver.i @@ -45,11 +45,11 @@ class RegularLimitParameters; %{ #include +#include #include #include #include -#include "ortools/base/types.h" #include "ortools/constraint_solver/constraint_solver.h" #include "ortools/constraint_solver/constraint_solveri.h" #include "ortools/constraint_solver/search_limit.pb.h" diff --git a/ortools/constraint_solver/java/constraint_solver.i b/ortools/constraint_solver/java/constraint_solver.i index cba7f4eccc7..ad30ab1896e 100644 --- a/ortools/constraint_solver/java/constraint_solver.i +++ b/ortools/constraint_solver/java/constraint_solver.i @@ -127,6 +127,7 @@ PROTECT_FROM_FAILURE(Solver::Fail(), arg1); %{ #include + #include #include "ortools/base/types.h" diff --git a/ortools/constraint_solver/routing_flags.h b/ortools/constraint_solver/routing_flags.h index a5bd146a4dd..898a40fd2cc 100644 --- a/ortools/constraint_solver/routing_flags.h +++ b/ortools/constraint_solver/routing_flags.h @@ -18,7 +18,6 @@ #include #include "ortools/base/commandlineflags.h" -#include "ortools/base/types.h" #include "ortools/constraint_solver/routing_parameters.pb.h" /// Neighborhood activation/deactivation diff --git a/ortools/flatzinc/parser.yy.cc b/ortools/flatzinc/parser.yy.cc index 1601ac04a93..b8ad594fa81 100644 --- a/ortools/flatzinc/parser.yy.cc +++ b/ortools/flatzinc/parser.yy.cc @@ -709,10 +709,10 @@ static const flex_int32_t yy_rule_can_match_eol[32] = { /* Allow parameter passing to and from the bison parser. */ /* Rename yy to orfz_ in public functions. */ #line 11 "./ortools/flatzinc/parser.lex" +#include #include #include "absl/strings/numbers.h" -#include "ortools/base/types.h" #include "ortools/flatzinc/parser.tab.hh" #if defined(_MSC_VER) #define YY_NO_UNISTD_H diff --git a/ortools/linear_solver/cplex_interface.cc b/ortools/linear_solver/cplex_interface.cc index d0bdffd0fc7..e11813cad95 100644 --- a/ortools/linear_solver/cplex_interface.cc +++ b/ortools/linear_solver/cplex_interface.cc @@ -19,9 +19,9 @@ #include "absl/strings/str_format.h" #include "absl/strings/str_split.h" -#include "ortools/base/types.h" #include "ortools/base/logging.h" #include "ortools/base/timer.h" +#include "ortools/base/types.h" #include "ortools/linear_solver/linear_solver.h" extern "C" { diff --git a/ortools/linear_solver/highs_interface.cc b/ortools/linear_solver/highs_interface.cc index 96a16378216..f98067f1584 100644 --- a/ortools/linear_solver/highs_interface.cc +++ b/ortools/linear_solver/highs_interface.cc @@ -149,8 +149,7 @@ MPSolver::ResultStatus HighsInterface::Solve(const MPSolverParameters& param) { // The solution must be marked as synchronized even when no solution exists. sync_status_ = SOLUTION_SYNCHRONIZED; result_status_ = static_cast(response->status()); - LOG_IF(ERROR, DEBUG_MODE && !response->has_solver_specific_info()) - << *response; + LOG_IF(DFATAL, !response->has_solver_specific_info()) << *response; // if (!solve_log_.ParseFromString(response->solver_specific_info())) { // LOG(DFATAL) << "Unable to parse Highs's SolveLog from // solver_specific_info"; diff --git a/ortools/linear_solver/model_exporter.cc b/ortools/linear_solver/model_exporter.cc index 9644f23ebb8..4ca41f5e890 100644 --- a/ortools/linear_solver/model_exporter.cc +++ b/ortools/linear_solver/model_exporter.cc @@ -29,9 +29,9 @@ #include "absl/strings/str_cat.h" #include "absl/strings/str_format.h" #include "ortools/base/commandlineflags.h" -#include "ortools/base/types.h" #include "ortools/base/logging.h" #include "ortools/base/map_util.h" +#include "ortools/base/types.h" #include "ortools/linear_solver/linear_solver.pb.h" #include "ortools/util/fp_utils.h" diff --git a/ortools/linear_solver/sat_interface.cc b/ortools/linear_solver/sat_interface.cc index 78dc79341d6..c9b696fce8a 100644 --- a/ortools/linear_solver/sat_interface.cc +++ b/ortools/linear_solver/sat_interface.cc @@ -21,8 +21,8 @@ #include "absl/base/attributes.h" #include "absl/status/status.h" #include "absl/status/statusor.h" -#include "ortools/base/types.h" #include "ortools/base/logging.h" +#include "ortools/base/types.h" #include "ortools/linear_solver/linear_solver.h" #include "ortools/linear_solver/linear_solver.pb.h" #include "ortools/linear_solver/proto_solver/sat_proto_solver.h" diff --git a/ortools/linear_solver/scip_interface.cc b/ortools/linear_solver/scip_interface.cc index 41a76570b11..8075bd973f0 100644 --- a/ortools/linear_solver/scip_interface.cc +++ b/ortools/linear_solver/scip_interface.cc @@ -32,10 +32,10 @@ #include "ortools/base/cleanup.h" #include "ortools/base/commandlineflags.h" #include "ortools/base/hash.h" -#include "ortools/base/types.h" #include "ortools/base/logging.h" #include "ortools/base/status_macros.h" #include "ortools/base/timer.h" +#include "ortools/base/types.h" #include "ortools/gscip/legacy_scip_params.h" #include "ortools/linear_solver/linear_solver.h" #include "ortools/linear_solver/linear_solver.pb.h" diff --git a/ortools/linear_solver/xpress_interface.cc b/ortools/linear_solver/xpress_interface.cc index 7f3e68fe47b..4b01b250b6c 100644 --- a/ortools/linear_solver/xpress_interface.cc +++ b/ortools/linear_solver/xpress_interface.cc @@ -25,9 +25,9 @@ #include #include "absl/strings/str_format.h" -#include "ortools/base/types.h" #include "ortools/base/logging.h" #include "ortools/base/timer.h" +#include "ortools/base/types.h" #include "ortools/linear_solver/linear_solver.h" extern "C" { diff --git a/ortools/lp_data/BUILD.bazel b/ortools/lp_data/BUILD.bazel index f3f76adfc46..86321ab8246 100644 --- a/ortools/lp_data/BUILD.bazel +++ b/ortools/lp_data/BUILD.bazel @@ -76,7 +76,6 @@ cc_library( deps = [ ":base", "//ortools/base", - "//ortools/base:types", "//ortools/base:strong_vector", "//ortools/util:bitset", "//ortools/util:strong_integers", diff --git a/ortools/lp_data/scattered_vector.h b/ortools/lp_data/scattered_vector.h index 03f28b169df..c269de3a461 100644 --- a/ortools/lp_data/scattered_vector.h +++ b/ortools/lp_data/scattered_vector.h @@ -14,13 +14,11 @@ #ifndef OR_TOOLS_LP_DATA_SCATTERED_VECTOR_H_ #define OR_TOOLS_LP_DATA_SCATTERED_VECTOR_H_ -#include -#include +#include +#include -#include "ortools/base/types.h" -#include "ortools/base/logging.h" +#include "absl/log/check.h" #include "ortools/lp_data/lp_types.h" -#include "ortools/util/bitset.h" namespace operations_research { namespace glop { @@ -159,7 +157,7 @@ struct ScatteredVector { ClearNonZerosIfTooDense(kDefaultRatioForUsingDenseIteration); } - // Returns an over-estimate of the number of non-zeros. This is actually + // Returns an overestimate of the number of non-zeros. This is actually // exact for sparse vector, or the full size otherwise. size_t NumNonZerosEstimate() const { return non_zeros.empty() ? values.size().value() : non_zeros.size(); diff --git a/ortools/pdlp/quadratic_program_io.cc b/ortools/pdlp/quadratic_program_io.cc index 800900115db..b4d64bde708 100644 --- a/ortools/pdlp/quadratic_program_io.cc +++ b/ortools/pdlp/quadratic_program_io.cc @@ -13,7 +13,6 @@ #include "ortools/pdlp/quadratic_program_io.h" -#include #include #include #include @@ -32,7 +31,6 @@ #include "absl/strings/match.h" #include "absl/strings/str_format.h" #include "absl/strings/string_view.h" -#include "ortools/base/types.h" #include "ortools/base/file.h" #include "ortools/base/helpers.h" #include "ortools/base/logging.h" diff --git a/ortools/routing/samples/cvrp_disjoint_tw.cc b/ortools/routing/samples/cvrp_disjoint_tw.cc index e3ac0f483da..1644e966897 100644 --- a/ortools/routing/samples/cvrp_disjoint_tw.cc +++ b/ortools/routing/samples/cvrp_disjoint_tw.cc @@ -31,8 +31,8 @@ #include "google/protobuf/text_format.h" #include "ortools/base/commandlineflags.h" #include "ortools/base/init_google.h" -#include "ortools/base/types.h" #include "ortools/base/logging.h" +#include "ortools/base/types.h" #include "ortools/constraint_solver/routing.h" #include "ortools/constraint_solver/routing_index_manager.h" #include "ortools/constraint_solver/routing_parameters.h" diff --git a/ortools/routing/samples/cvrptw.cc b/ortools/routing/samples/cvrptw.cc index 6e4dba247ff..9efe1db6e5c 100644 --- a/ortools/routing/samples/cvrptw.cc +++ b/ortools/routing/samples/cvrptw.cc @@ -29,8 +29,8 @@ #include "google/protobuf/text_format.h" #include "ortools/base/commandlineflags.h" #include "ortools/base/init_google.h" -#include "ortools/base/types.h" #include "ortools/base/logging.h" +#include "ortools/base/types.h" #include "ortools/constraint_solver/routing.h" #include "ortools/constraint_solver/routing_index_manager.h" #include "ortools/constraint_solver/routing_parameters.h" diff --git a/ortools/routing/samples/cvrptw_soft_capacity.cc b/ortools/routing/samples/cvrptw_soft_capacity.cc index 26949634d86..4b865182c35 100644 --- a/ortools/routing/samples/cvrptw_soft_capacity.cc +++ b/ortools/routing/samples/cvrptw_soft_capacity.cc @@ -28,8 +28,8 @@ #include "google/protobuf/text_format.h" #include "ortools/base/commandlineflags.h" #include "ortools/base/init_google.h" -#include "ortools/base/types.h" #include "ortools/base/logging.h" +#include "ortools/base/types.h" #include "ortools/constraint_solver/routing.h" #include "ortools/constraint_solver/routing_index_manager.h" #include "ortools/constraint_solver/routing_parameters.h" diff --git a/ortools/routing/samples/cvrptw_with_breaks.cc b/ortools/routing/samples/cvrptw_with_breaks.cc index eb28108c6e1..3803712a9c1 100644 --- a/ortools/routing/samples/cvrptw_with_breaks.cc +++ b/ortools/routing/samples/cvrptw_with_breaks.cc @@ -35,8 +35,8 @@ #include "google/protobuf/text_format.h" #include "ortools/base/commandlineflags.h" #include "ortools/base/init_google.h" -#include "ortools/base/types.h" #include "ortools/base/logging.h" +#include "ortools/base/types.h" #include "ortools/constraint_solver/routing.h" #include "ortools/constraint_solver/routing_enums.pb.h" #include "ortools/constraint_solver/routing_index_manager.h" diff --git a/ortools/routing/samples/cvrptw_with_precedences.cc b/ortools/routing/samples/cvrptw_with_precedences.cc index 37b029c4eb1..c8aa3b974db 100644 --- a/ortools/routing/samples/cvrptw_with_precedences.cc +++ b/ortools/routing/samples/cvrptw_with_precedences.cc @@ -30,8 +30,8 @@ #include "google/protobuf/text_format.h" #include "ortools/base/commandlineflags.h" #include "ortools/base/init_google.h" -#include "ortools/base/types.h" #include "ortools/base/logging.h" +#include "ortools/base/types.h" #include "ortools/constraint_solver/routing.h" #include "ortools/constraint_solver/routing_index_manager.h" #include "ortools/constraint_solver/routing_parameters.h" diff --git a/ortools/routing/samples/cvrptw_with_refueling.cc b/ortools/routing/samples/cvrptw_with_refueling.cc index e0a1673e56a..353d48a9e2c 100644 --- a/ortools/routing/samples/cvrptw_with_refueling.cc +++ b/ortools/routing/samples/cvrptw_with_refueling.cc @@ -27,8 +27,8 @@ #include "google/protobuf/text_format.h" #include "ortools/base/commandlineflags.h" #include "ortools/base/init_google.h" -#include "ortools/base/types.h" #include "ortools/base/logging.h" +#include "ortools/base/types.h" #include "ortools/constraint_solver/routing.h" #include "ortools/constraint_solver/routing_index_manager.h" #include "ortools/constraint_solver/routing_parameters.h" diff --git a/ortools/routing/samples/cvrptw_with_resources.cc b/ortools/routing/samples/cvrptw_with_resources.cc index 6719f613cf0..f7a859756a2 100644 --- a/ortools/routing/samples/cvrptw_with_resources.cc +++ b/ortools/routing/samples/cvrptw_with_resources.cc @@ -29,8 +29,8 @@ #include "google/protobuf/text_format.h" #include "ortools/base/commandlineflags.h" #include "ortools/base/init_google.h" -#include "ortools/base/types.h" #include "ortools/base/logging.h" +#include "ortools/base/types.h" #include "ortools/constraint_solver/routing.h" #include "ortools/constraint_solver/routing_index_manager.h" #include "ortools/constraint_solver/routing_parameters.h" diff --git a/ortools/routing/samples/cvrptw_with_stop_times_and_resources.cc b/ortools/routing/samples/cvrptw_with_stop_times_and_resources.cc index fb4de1d465a..95071c9fa61 100644 --- a/ortools/routing/samples/cvrptw_with_stop_times_and_resources.cc +++ b/ortools/routing/samples/cvrptw_with_stop_times_and_resources.cc @@ -28,8 +28,8 @@ #include "google/protobuf/text_format.h" #include "ortools/base/commandlineflags.h" #include "ortools/base/init_google.h" -#include "ortools/base/types.h" #include "ortools/base/logging.h" +#include "ortools/base/types.h" #include "ortools/constraint_solver/routing.h" #include "ortools/constraint_solver/routing_index_manager.h" #include "ortools/constraint_solver/routing_parameters.h" diff --git a/ortools/routing/samples/cvrptw_with_time_dependent_costs.cc b/ortools/routing/samples/cvrptw_with_time_dependent_costs.cc index fb1195d3858..e4f45e743c9 100644 --- a/ortools/routing/samples/cvrptw_with_time_dependent_costs.cc +++ b/ortools/routing/samples/cvrptw_with_time_dependent_costs.cc @@ -27,8 +27,8 @@ #include "google/protobuf/text_format.h" #include "ortools/base/commandlineflags.h" #include "ortools/base/init_google.h" -#include "ortools/base/types.h" #include "ortools/base/logging.h" +#include "ortools/base/types.h" #include "ortools/constraint_solver/routing.h" #include "ortools/constraint_solver/routing_index_manager.h" #include "ortools/constraint_solver/routing_parameters.h" diff --git a/ortools/routing/solomon_parser.cc b/ortools/routing/solomon_parser.cc index 3adafb8ff9a..f1d6e675abf 100644 --- a/ortools/routing/solomon_parser.cc +++ b/ortools/routing/solomon_parser.cc @@ -21,11 +21,11 @@ #include "absl/strings/match.h" #include "absl/strings/str_split.h" #include "absl/strings/string_view.h" -#include "ortools/base/types.h" #include "ortools/base/logging.h" #include "ortools/base/map_util.h" #include "ortools/base/numbers.h" #include "ortools/base/path.h" +#include "ortools/base/types.h" #include "ortools/base/zipfile.h" #include "ortools/util/filelineiter.h" diff --git a/ortools/routing/solomon_parser.h b/ortools/routing/solomon_parser.h index a12d586022c..1281356a222 100644 --- a/ortools/routing/solomon_parser.h +++ b/ortools/routing/solomon_parser.h @@ -50,8 +50,8 @@ #include #include "absl/strings/string_view.h" -#include "ortools/base/types.h" #include "ortools/base/macros.h" +#include "ortools/base/types.h" #include "ortools/routing/simple_graph.h" namespace operations_research { diff --git a/ortools/routing/solomon_parser_test.cc b/ortools/routing/solomon_parser_test.cc index b3b6f50709c..4d5fc64761b 100644 --- a/ortools/routing/solomon_parser_test.cc +++ b/ortools/routing/solomon_parser_test.cc @@ -20,8 +20,8 @@ #include "gtest/gtest.h" #include "ortools/base/commandlineflags.h" #include "ortools/base/file.h" -#include "ortools/base/types.h" #include "ortools/base/path.h" +#include "ortools/base/types.h" ABSL_FLAG(std::string, test_srcdir, "", "REQUIRED: src dir"); diff --git a/ortools/routing/tsplib_parser_test.cc b/ortools/routing/tsplib_parser_test.cc index f1c1d5ec296..36cfc489726 100644 --- a/ortools/routing/tsplib_parser_test.cc +++ b/ortools/routing/tsplib_parser_test.cc @@ -25,10 +25,10 @@ #include "gtest/gtest.h" #include "ortools/base/filesystem.h" #include "ortools/base/helpers.h" -#include "ortools/base/types.h" #include "ortools/base/map_util.h" #include "ortools/base/memfile.h" #include "ortools/base/path.h" +#include "ortools/base/types.h" #include "ortools/base/zipfile.h" #if defined(_MSC_VER) diff --git a/ortools/routing/tsptw_parser_test.cc b/ortools/routing/tsptw_parser_test.cc index 8540440796e..dc928b42b76 100644 --- a/ortools/routing/tsptw_parser_test.cc +++ b/ortools/routing/tsptw_parser_test.cc @@ -18,8 +18,8 @@ #include "absl/flags/flag.h" #include "gtest/gtest.h" #include "ortools/base/helpers.h" -#include "ortools/base/types.h" #include "ortools/base/path.h" +#include "ortools/base/types.h" #if defined(_MSC_VER) #define ROOT_DIR "../../../../../../../" diff --git a/ortools/sat/cp_model_presolve.cc b/ortools/sat/cp_model_presolve.cc index 771d42ccaaa..21ad52a6cb7 100644 --- a/ortools/sat/cp_model_presolve.cc +++ b/ortools/sat/cp_model_presolve.cc @@ -8451,6 +8451,37 @@ void CpModelPresolver::DetectDuplicateConstraints() { " time=", wall_timer.Get(), "s"); } +namespace { + +// Add factor * subset_ct to the given superset_ct. +void Substitute(int64_t factor, + const absl::flat_hash_map& subset_coeff_map, + const Domain& subset_rhs, const Domain& superset_rhs, + LinearConstraintProto* mutable_linear) { + int new_size = 0; + const int old_size = mutable_linear->vars().size(); + for (int i = 0; i < old_size; ++i) { + const int var = mutable_linear->vars(i); + int64_t coeff = mutable_linear->coeffs(i); + const auto it = subset_coeff_map.find(var); + if (it != subset_coeff_map.end()) { + coeff -= factor * it->second; + if (coeff == 0) continue; + } + + mutable_linear->set_vars(new_size, var); + mutable_linear->set_coeffs(new_size, coeff); + ++new_size; + } + mutable_linear->mutable_vars()->Truncate(new_size); + mutable_linear->mutable_coeffs()->Truncate(new_size); + FillDomainInProto( + superset_rhs.AdditionWith(subset_rhs.MultiplicationBy(-factor)), + mutable_linear); +} + +} // namespace + void CpModelPresolver::DetectDominatedLinearConstraints() { if (context_->time_limit()->LimitReached()) return; if (context_->ModelIsUnsat()) return; @@ -8459,9 +8490,23 @@ void CpModelPresolver::DetectDominatedLinearConstraints() { WallTimer wall_timer; wall_timer.Start(); - // We will reuse the constraint <-> variable graph as a storage for the - // inclusion detection. - InclusionDetector detector(context_->ConstraintToVarsGraph()); + // Because we only deal with linear constraint and we want to ignore the + // enforcement part, we reuse the variable list in the inclusion detector. + // Note that we ignore "unclean" constraint, so we only have positive + // reference there. + class Storage { + public: + explicit Storage(CpModelProto* proto) : proto_(*proto) {} + int size() const { return static_cast(proto_.constraints().size()); } + absl::Span operator[](int c) const { + return absl::MakeSpan(proto_.constraints(c).linear().vars()); + } + + private: + const CpModelProto& proto_; + }; + Storage storage(context_->working_model); + InclusionDetector detector(storage); detector.SetWorkLimit(context_->params().presolve_inclusion_work_limit()); // Because we use the constraint <-> variable graph, we cannot modify it @@ -8477,8 +8522,11 @@ void CpModelPresolver::DetectDominatedLinearConstraints() { const ConstraintProto& ct = context_->working_model->constraints(c); if (ct.constraint_case() != ConstraintProto::kLinear) continue; - // TODO(user): We can deal with enforced constraints in some situation. - if (!ct.enforcement_literal().empty()) continue; + // We only look at long enforced constraint to avoid all the linear of size + // one or two which can be numerous. + if (!ct.enforcement_literal().empty()) { + if (ct.linear().vars().size() < 3) continue; + } if (!LinearConstraintIsClean(ct.linear())) { // This shouldn't happen except in potential corner cases were the @@ -8514,7 +8562,11 @@ void CpModelPresolver::DetectDominatedLinearConstraints() { // the common positions. Note that assuming subset has been gcd reduced, // there is not point considering factor_b != 1. bool perfect_match = true; + + // Find interesting factor of the subset that cancels terms of the superset. int64_t factor = 0; + int64_t min_pos_factor = std::numeric_limits::max(); + int64_t max_neg_factor = std::numeric_limits::min(); // Lets compute the implied domain of the linear expression // "superset - subset". Note that we actually do not need exact inclusion @@ -8530,11 +8582,19 @@ void CpModelPresolver::DetectDominatedLinearConstraints() { const int var = superset_lin.vars(i); int64_t coeff = superset_lin.coeffs(i); const auto it = coeff_map.find(var); + if (it != coeff_map.end()) { const int64_t subset_coeff = it->second; + + const int64_t div = coeff / subset_coeff; + if (div > 0) { + min_pos_factor = std::min(div, min_pos_factor); + } else { + max_neg_factor = std::max(div, max_neg_factor); + } + if (perfect_match) { if (coeff % subset_coeff == 0) { - const int64_t div = coeff / subset_coeff; if (factor == 0) { // Note that factor can be negative. factor = div; @@ -8550,104 +8610,122 @@ void CpModelPresolver::DetectDominatedLinearConstraints() { coeff -= subset_coeff; } if (coeff == 0) continue; - if (coeff > 0) { - diff_min_activity += coeff * context_->MinOf(var); - diff_max_activity += coeff * context_->MaxOf(var); - } else { - diff_min_activity += coeff * context_->MaxOf(var); - diff_max_activity += coeff * context_->MinOf(var); - } + context_->CappedUpdateMinMaxActivity(var, coeff, &diff_min_activity, + &diff_max_activity); } const Domain diff_domain(diff_min_activity, diff_max_activity); - const Domain subset_ct_domain = ReadDomainFromProto(subset_lin); - const Domain superset_ct_domain = ReadDomainFromProto(superset_lin); + const Domain subset_rhs = ReadDomainFromProto(subset_lin); + const Domain superset_rhs = ReadDomainFromProto(superset_lin); // Case 1: superset is redundant. // We process this one first as it let us remove the longest constraint. - const Domain implied_superset_domain = - subset_ct_domain.AdditionWith(diff_domain) - .IntersectionWith(cached_expr_domain[superset_c]); - if (implied_superset_domain.IsIncludedIn(superset_ct_domain)) { - context_->UpdateRuleStats( - "linear inclusion: redundant containing constraint"); - context_->working_model->mutable_constraints(superset_c)->Clear(); - constraint_indices_to_clean.push_back(superset_c); - detector.StopProcessingCurrentSuperset(); - return; + // + // Important: because of how we computed the inclusion, the diff_domain is + // only valid if none of the enforcement appear in the subset. + // + // TODO(user): Compute the correct infered domain in this case. + if (subset_ct.enforcement_literal().empty()) { + const Domain implied_superset_domain = + subset_rhs.AdditionWith(diff_domain) + .IntersectionWith(cached_expr_domain[superset_c]); + if (implied_superset_domain.IsIncludedIn(superset_rhs)) { + context_->UpdateRuleStats( + "linear inclusion: redundant containing constraint"); + context_->working_model->mutable_constraints(superset_c)->Clear(); + constraint_indices_to_clean.push_back(superset_c); + detector.StopProcessingCurrentSuperset(); + return; + } } // Case 2: subset is redundant. - const Domain implied_subset_domain = - superset_ct_domain.AdditionWith(diff_domain.Negation()) - .IntersectionWith(cached_expr_domain[subset_c]); - if (implied_subset_domain.IsIncludedIn(subset_ct_domain)) { - context_->UpdateRuleStats( - "linear inclusion: redundant included constraint"); - context_->working_model->mutable_constraints(subset_c)->Clear(); - constraint_indices_to_clean.push_back(subset_c); - detector.StopProcessingCurrentSubset(); - return; + if (superset_ct.enforcement_literal().empty()) { + const Domain implied_subset_domain = + superset_rhs.AdditionWith(diff_domain.Negation()) + .IntersectionWith(cached_expr_domain[subset_c]); + if (implied_subset_domain.IsIncludedIn(subset_rhs)) { + context_->UpdateRuleStats( + "linear inclusion: redundant included constraint"); + context_->working_model->mutable_constraints(subset_c)->Clear(); + constraint_indices_to_clean.push_back(subset_c); + detector.StopProcessingCurrentSubset(); + return; + } } - // When we have equality constraint, we might try substitution. For now we - // only try that when we have a perfect inclusion with the same coefficients - // after multiplication by factor. - if (perfect_match) { - CHECK_NE(factor, 0); - if (subset_ct_domain.IsFixed()) { - // Rewrite the constraint by removing subset from it and updating - // the domain to domain - factor * subset_domain. - // - // This seems always beneficial, although we might miss some - // oportunities for constraint included in the superset if we do that - // too early. - context_->UpdateRuleStats("linear inclusion: subset is equality"); - int new_size = 0; - auto* mutable_linear = - context_->working_model->mutable_constraints(superset_c) - ->mutable_linear(); - for (int i = 0; i < mutable_linear->vars().size(); ++i) { - const int var = mutable_linear->vars(i); - const int64_t coeff = mutable_linear->coeffs(i); + // If the subset is an equality, and we can add a factor of it to the + // superset so that the activity range is guaranteed to be tighter, we + // always do it. This should both sparsify the problem but also lead to + // tighter propagation. + if (subset_rhs.IsFixed() && subset_ct.enforcement_literal().empty()) { + const int64_t best_factor = + max_neg_factor > -min_pos_factor ? max_neg_factor : min_pos_factor; + + // Compute the activity range before and after. Because our pos/neg factor + // are the smallest possible, if one is undefined then we are guaranteed + // to be tighter, and do not need to compute this. + // + // TODO(user): can we compute the best factor that make this as tight as + // possible instead? that looks doable. + bool is_tigher = true; + if (min_pos_factor != std::numeric_limits::max() && + max_neg_factor != std::numeric_limits::min()) { + int64_t min_before = 0; + int64_t max_before = 0; + int64_t min_after = CapProd(best_factor, subset_rhs.FixedValue()); + int64_t max_after = min_after; + for (int i = 0; i < superset_lin.vars().size(); ++i) { + const int var = superset_lin.vars(i); const auto it = coeff_map.find(var); - if (it != coeff_map.end()) { - CHECK_EQ(factor * it->second, coeff); - continue; - } - mutable_linear->set_vars(new_size, var); - mutable_linear->set_coeffs(new_size, coeff); - ++new_size; + if (it == coeff_map.end()) continue; + + const int64_t coeff_before = superset_lin.coeffs(i); + const int64_t coeff_after = coeff_before - best_factor * it->second; + context_->CappedUpdateMinMaxActivity(var, coeff_before, &min_before, + &max_before); + context_->CappedUpdateMinMaxActivity(var, coeff_after, &min_after, + &max_after); } - mutable_linear->mutable_vars()->Truncate(new_size); - mutable_linear->mutable_coeffs()->Truncate(new_size); - FillDomainInProto(superset_ct_domain.AdditionWith( - subset_ct_domain.MultiplicationBy(-factor)), - mutable_linear); + is_tigher = min_after >= min_before && max_after <= max_before; + } + if (is_tigher) { + context_->UpdateRuleStats("linear inclusion: sparsify superset"); + Substitute(best_factor, coeff_map, subset_rhs, superset_rhs, + context_->working_model->mutable_constraints(superset_c) + ->mutable_linear()); constraint_indices_to_clean.push_back(superset_c); detector.StopProcessingCurrentSuperset(); return; - } else { - // Propagate domain on the superset - subset variables. - // TODO(user): We can probably still do that if the inclusion is not - // perfect. - temp_ct_.Clear(); - auto* mutable_linear = temp_ct_.mutable_linear(); - for (int i = 0; i < superset_lin.vars().size(); ++i) { - const int var = superset_lin.vars(i); - const int64_t coeff = superset_lin.coeffs(i); - const auto it = coeff_map.find(var); - if (it != coeff_map.end()) continue; - mutable_linear->add_vars(var); - mutable_linear->add_coeffs(coeff); - } - FillDomainInProto(superset_ct_domain.AdditionWith( - subset_ct_domain.MultiplicationBy(-factor)), - mutable_linear); - PropagateDomainsInLinear(/*ct_index=*/-1, &temp_ct_); - if (context_->ModelIsUnsat()) detector.Stop(); } - if (superset_ct_domain.IsFixed()) { + } + + // We do a bit more if we have an exact match and factor * subset is exactly + // a subpart of the superset constraint. + if (perfect_match && subset_ct.enforcement_literal().empty() && + superset_ct.enforcement_literal().empty()) { + CHECK_NE(factor, 0); + + // Propagate domain on the superset - subset variables. + // TODO(user): We can probably still do that if the inclusion is not + // perfect. + temp_ct_.Clear(); + auto* mutable_linear = temp_ct_.mutable_linear(); + for (int i = 0; i < superset_lin.vars().size(); ++i) { + const int var = superset_lin.vars(i); + const int64_t coeff = superset_lin.coeffs(i); + const auto it = coeff_map.find(var); + if (it != coeff_map.end()) continue; + mutable_linear->add_vars(var); + mutable_linear->add_coeffs(coeff); + } + FillDomainInProto( + superset_rhs.AdditionWith(subset_rhs.MultiplicationBy(-factor)), + mutable_linear); + PropagateDomainsInLinear(/*ct_index=*/-1, &temp_ct_); + if (context_->ModelIsUnsat()) detector.Stop(); + + if (superset_rhs.IsFixed()) { if (subset_lin.vars().size() + 1 == superset_lin.vars().size()) { // Because we propagated the equation on the singleton variable above, // and we have an equality, the subset is redundant! diff --git a/ortools/sat/cuts.cc b/ortools/sat/cuts.cc index 2003ef4f885..6cf00e497a6 100644 --- a/ortools/sat/cuts.cc +++ b/ortools/sat/cuts.cc @@ -46,6 +46,7 @@ #include "ortools/util/sorted_interval_list.h" #include "ortools/util/strong_integers.h" + namespace operations_research { namespace sat { diff --git a/ortools/sat/inclusion.h b/ortools/sat/inclusion.h index dca046534e9..8783e0514c8 100644 --- a/ortools/sat/inclusion.h +++ b/ortools/sat/inclusion.h @@ -211,6 +211,7 @@ class InclusionDetector { bool stop_with_current_superset_; std::vector signatures_; std::vector> one_watcher_; // Index in candidates_. + std::vector superset_elements_; std::vector is_in_superset_; }; @@ -294,7 +295,6 @@ inline void InclusionDetector::DetectInclusions( stop_with_current_superset_ = false; if (candidate.CanBeSuperset()) { const Candidate& superset = candidate; - const auto& superset_elements = candidate_elements; // Bitset should be cleared. DCHECK(std::all_of(is_in_superset_.begin(), is_in_superset_.end(), @@ -303,12 +303,22 @@ inline void InclusionDetector::DetectInclusions( // Find any subset included in current superset. work_done_ += 2 * superset.size; if (work_done_ > work_limit_) return Stop(); - for (const int e : superset_elements) { + + // We make a copy because process() might alter the content of the + // storage when it returns "stop_with_current_superset_" and we need + // to clean is_in_superset_ properly. + // + // TODO(user): Alternatively, we could clean is_in_superset_ in the + // call to StopProcessingCurrentSuperset() and force client to call it + // before altering the superset content. + superset_elements_.assign(candidate_elements.begin(), + candidate_elements.end()); + for (const int e : superset_elements_) { is_in_superset_[e] = true; } const uint64_t superset_signature = signatures_.back(); - for (const int superset_e : superset_elements) { + for (const int superset_e : superset_elements_) { for (int i = 0; i < one_watcher_[superset_e].size(); ++i) { const int c_index = one_watcher_[superset_e][i]; const Candidate& subset = candidates_[c_index]; @@ -348,7 +358,7 @@ inline void InclusionDetector::DetectInclusions( } // Cleanup. - for (const int e : superset_elements) { + for (const int e : superset_elements_) { is_in_superset_[e] = false; } } diff --git a/ortools/sat/presolve_context.h b/ortools/sat/presolve_context.h index 5e18264f128..02be0f81da2 100644 --- a/ortools/sat/presolve_context.h +++ b/ortools/sat/presolve_context.h @@ -171,6 +171,18 @@ class PresolveContext { return {min_activity, max_activity}; } + // Utility function. + void CappedUpdateMinMaxActivity(int var, int64_t coeff, int64_t* min_activity, + int64_t* max_activity) { + if (coeff > 0) { + *min_activity = CapAdd(*min_activity, CapProd(coeff, MinOf(var))); + *max_activity = CapAdd(*max_activity, CapProd(coeff, MaxOf(var))); + } else { + *min_activity = CapAdd(*min_activity, CapProd(coeff, MaxOf(var))); + *max_activity = CapAdd(*max_activity, CapProd(coeff, MinOf(var))); + } + } + // This methods only works for affine expressions (checked). bool DomainContains(const LinearExpressionProto& expr, int64_t value) const; diff --git a/ortools/sat/samples/step_function_sample_sat.cc b/ortools/sat/samples/step_function_sample_sat.cc index f9eab7fcbdf..3db14df3382 100644 --- a/ortools/sat/samples/step_function_sample_sat.cc +++ b/ortools/sat/samples/step_function_sample_sat.cc @@ -13,10 +13,7 @@ #include -#include - #include "absl/types/span.h" -#include "ortools/base/types.h" #include "ortools/base/logging.h" #include "ortools/sat/cp_model.h" #include "ortools/sat/cp_model.pb.h" diff --git a/ortools/util/adaptative_parameter_value.h b/ortools/util/adaptative_parameter_value.h index 5a260bdee0c..3ee6ea2e0ea 100644 --- a/ortools/util/adaptative_parameter_value.h +++ b/ortools/util/adaptative_parameter_value.h @@ -18,8 +18,6 @@ #include #include -#include "ortools/base/types.h" - namespace operations_research { // Basic adaptive [0.0, 1.0] parameter that can be increased or decreased with a diff --git a/ortools/util/bitset.h b/ortools/util/bitset.h index 90ff980a5a6..694fb4b37f0 100644 --- a/ortools/util/bitset.h +++ b/ortools/util/bitset.h @@ -22,9 +22,9 @@ #include #include -#include "ortools/base/types.h" #include "ortools/base/logging.h" #include "ortools/base/macros.h" +#include "ortools/base/types.h" namespace operations_research { diff --git a/ortools/util/cached_log.h b/ortools/util/cached_log.h index fd2be3f636e..f23ff22923a 100644 --- a/ortools/util/cached_log.h +++ b/ortools/util/cached_log.h @@ -14,13 +14,9 @@ #ifndef OR_TOOLS_UTIL_CACHED_LOG_H_ #define OR_TOOLS_UTIL_CACHED_LOG_H_ -#include - +#include #include -#include "ortools/base/types.h" -#include "ortools/base/types.h" -#include "ortools/base/logging.h" #include "ortools/base/macros.h" namespace operations_research { diff --git a/ortools/util/csharp/proto.i b/ortools/util/csharp/proto.i index 19491b9f38c..7c0e2820669 100644 --- a/ortools/util/csharp/proto.i +++ b/ortools/util/csharp/proto.i @@ -15,8 +15,8 @@ %include "ortools/base/base.i" %{ +#include #include -#include "ortools/base/types.h" %} // SWIG macros to be used in generating C# wrappers for C++ protocol diff --git a/ortools/util/csharp/vector.i b/ortools/util/csharp/vector.i index 2b9551d691a..5addd5254df 100644 --- a/ortools/util/csharp/vector.i +++ b/ortools/util/csharp/vector.i @@ -15,8 +15,8 @@ %include "ortools/base/base.i" %{ +#include #include -#include "ortools/base/types.h" %} // Typemaps to represent arguments of types: diff --git a/ortools/util/filelineiter.h b/ortools/util/filelineiter.h index 81404115963..c56d8f43cdc 100644 --- a/ortools/util/filelineiter.h +++ b/ortools/util/filelineiter.h @@ -26,14 +26,10 @@ #define OR_TOOLS_UTIL_FILELINEITER_H_ #include -#include #include -#include "absl/status/statusor.h" -#include "absl/strings/match.h" #include "ortools/base/file.h" #include "ortools/base/logging.h" -#include "ortools/base/status_macros.h" // Implements the minimum interface for a range-based for loop iterator. class FileLineIterator { diff --git a/ortools/util/fp_utils.cc b/ortools/util/fp_utils.cc index 813305c3cf6..336ce097954 100644 --- a/ortools/util/fp_utils.cc +++ b/ortools/util/fp_utils.cc @@ -18,6 +18,7 @@ #include #include +#include #include #include #include @@ -25,8 +26,6 @@ #include "absl/base/casts.h" #include "absl/base/internal/endian.h" -#include "ortools/base/types.h" -#include "ortools/base/logging.h" #include "ortools/util/bitset.h" namespace operations_research { diff --git a/ortools/util/fp_utils.h b/ortools/util/fp_utils.h index 9be99d77b4d..99cd80924de 100644 --- a/ortools/util/fp_utils.h +++ b/ortools/util/fp_utils.h @@ -24,6 +24,7 @@ #include #include +#include #include #include #include // must be call before fenv_access see: https://github.com/microsoft/STL/issues/2613 @@ -41,8 +42,6 @@ #include #endif -#include "ortools/base/types.h" - #if defined(_MSC_VER) static inline double isnan(double value) { return _isnan(value); } static inline double round(double value) { return floor(value + 0.5); } diff --git a/ortools/util/functions_swig_helpers.h b/ortools/util/functions_swig_helpers.h index d090dd8b4e0..d8db95fb815 100644 --- a/ortools/util/functions_swig_helpers.h +++ b/ortools/util/functions_swig_helpers.h @@ -17,11 +17,10 @@ // This file contains class definitions for the wrapping of C++ std::functions // in Java. It is #included by java/functions.i. +#include #include #include -#include "ortools/base/types.h" - namespace operations_research { namespace swig_util { class LongToLong { diff --git a/ortools/util/java/functions.i b/ortools/util/java/functions.i index 6347bd30f80..2b6c796d1b8 100644 --- a/ortools/util/java/functions.i +++ b/ortools/util/java/functions.i @@ -26,8 +26,9 @@ %include "std_string.i" %{ +#include #include -#include "ortools/base/types.h" + #include "ortools/util/functions_swig_helpers.h" %} diff --git a/ortools/util/java/proto.i b/ortools/util/java/proto.i index 36ec912fbb4..52dd80fdf77 100644 --- a/ortools/util/java/proto.i +++ b/ortools/util/java/proto.i @@ -37,7 +37,7 @@ // @param param_name the parameter name %{ -#include "ortools/base/types.h" +#include %} %define PROTO_INPUT(CppProtoType, JavaProtoType, param_name) diff --git a/ortools/util/java/sorted_interval_list.i b/ortools/util/java/sorted_interval_list.i index a4a9c081949..dfaf7b3d266 100644 --- a/ortools/util/java/sorted_interval_list.i +++ b/ortools/util/java/sorted_interval_list.i @@ -16,8 +16,9 @@ %include "ortools/util/java/vector.i" %{ +#include #include -#include "ortools/base/types.h" + #include "ortools/util/sorted_interval_list.h" %} diff --git a/ortools/util/java/tuple_set.i b/ortools/util/java/tuple_set.i index ee4cf87de4c..92bf3dc5480 100644 --- a/ortools/util/java/tuple_set.i +++ b/ortools/util/java/tuple_set.i @@ -20,8 +20,9 @@ %{ // TODO(user): see if we can remove +#include #include -#include "ortools/base/types.h" + #include "ortools/util/tuple_set.h" %} diff --git a/ortools/util/java/vector.i b/ortools/util/java/vector.i index 72fe0a03ed4..5e75159a0c0 100644 --- a/ortools/util/java/vector.i +++ b/ortools/util/java/vector.i @@ -19,8 +19,8 @@ %include "ortools/base/base.i" %{ +#include #include -#include "ortools/base/types.h" %} // Typemaps to represents arguments of types "const std::vector&" or diff --git a/ortools/util/piecewise_linear_function.cc b/ortools/util/piecewise_linear_function.cc index bdc6a41a497..c4fbcd91c4c 100644 --- a/ortools/util/piecewise_linear_function.cc +++ b/ortools/util/piecewise_linear_function.cc @@ -23,6 +23,7 @@ #include "absl/container/btree_set.h" #include "absl/strings/str_format.h" #include "ortools/base/logging.h" +#include "ortools/util/saturated_arithmetic.h" namespace operations_research { namespace { diff --git a/ortools/util/piecewise_linear_function.h b/ortools/util/piecewise_linear_function.h index a56d9d6e476..6c1724833c8 100644 --- a/ortools/util/piecewise_linear_function.h +++ b/ortools/util/piecewise_linear_function.h @@ -20,18 +20,12 @@ #ifndef OR_TOOLS_UTIL_PIECEWISE_LINEAR_FUNCTION_H_ #define OR_TOOLS_UTIL_PIECEWISE_LINEAR_FUNCTION_H_ -#include +#include #include -#include #include #include #include -#include "ortools/base/types.h" -#include "ortools/base/macros.h" -#include "ortools/base/types.h" -#include "ortools/util/saturated_arithmetic.h" - namespace operations_research { // This structure stores one straight line. It contains the start point, the // end point and the slope. diff --git a/ortools/util/python/proto.i b/ortools/util/python/proto.i index 136801184b9..3a43598623f 100644 --- a/ortools/util/python/proto.i +++ b/ortools/util/python/proto.i @@ -13,7 +13,7 @@ %include "ortools/base/base.i" -%import "ortools/base/types.h" +#include namespace operations_research { %define PY_PROTO_TYPEMAP(PythonModule, PythonType, CppType) diff --git a/ortools/util/python/vector.i b/ortools/util/python/vector.i index 9ea7d128b8c..01faa66135e 100644 --- a/ortools/util/python/vector.i +++ b/ortools/util/python/vector.i @@ -14,7 +14,7 @@ // TODO(user): make this SWIG file comply with the SWIG style guide. %include "ortools/base/base.i" -%import "ortools/base/types.h" +#include // --------- std::vector wrapping ----------