Skip to content

Commit

Permalink
big cleanup of includes
Browse files Browse the repository at this point in the history
  • Loading branch information
lperron committed Aug 24, 2023
1 parent fa6883d commit af879c6
Show file tree
Hide file tree
Showing 78 changed files with 455 additions and 289 deletions.
89 changes: 41 additions & 48 deletions examples/cpp/binpacking_2d_sat.cc
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,17 @@
#include <vector>

#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.");
Expand All @@ -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 {
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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<BoolVar> 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<BoolVar> 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<BoolVar> 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<BoolVar> 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<IntVar> 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<BoolVar> 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.
Expand All @@ -191,6 +176,14 @@ void LoadAndSolve(const std::string& file_name, int instance) {
absl::GetFlag(FLAGS_params), &parameters))
<< 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);
Expand Down
2 changes: 1 addition & 1 deletion examples/cpp/costas_array_sat.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down
2 changes: 1 addition & 1 deletion examples/cpp/dobble_ls.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down
2 changes: 1 addition & 1 deletion examples/cpp/golomb_sat.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down
2 changes: 1 addition & 1 deletion examples/cpp/magic_sequence_sat.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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.");
Expand Down
2 changes: 1 addition & 1 deletion examples/cpp/magic_square_sat.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down
7 changes: 0 additions & 7 deletions examples/cpp/weighted_tardiness_sat.cc
Original file line number Diff line number Diff line change
Expand Up @@ -11,24 +11,17 @@
// See the License for the specific language governing permissions and
// limitations under the License.

#include <math.h>

#include <algorithm>
#include <cstdint>
#include <numeric>
#include <string>
#include <vector>

#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"
Expand Down
13 changes: 12 additions & 1 deletion ortools/bop/bop_base.cc
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,20 @@
#include <string>
#include <vector>

#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 {
Expand Down
6 changes: 4 additions & 2 deletions ortools/bop/bop_base.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,14 @@
#include <string>
#include <vector>

#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"
Expand All @@ -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
Expand Down
27 changes: 21 additions & 6 deletions ortools/bop/bop_fs.cc
Original file line number Diff line number Diff line change
Expand Up @@ -14,28 +14,43 @@
#include "ortools/bop/bop_fs.h"

#include <algorithm>
#include <cmath>
#include <cstdint>
#include <limits>
#include <memory>
#include <string>
#include <utility>
#include <vector>

#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 {
Expand Down
12 changes: 3 additions & 9 deletions ortools/bop/bop_fs.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,14 @@

#include <cstdint>
#include <memory>
#include <string>

#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"

Expand Down
27 changes: 20 additions & 7 deletions ortools/bop/bop_lns.cc
Original file line number Diff line number Diff line change
Expand Up @@ -14,23 +14,36 @@
#include "ortools/bop/bop_lns.h"

#include <algorithm>
#include <cmath>
#include <deque>
#include <memory>
#include <string>
#include <vector>

#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 {
Expand Down
Loading

0 comments on commit af879c6

Please sign in to comment.