diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000000..06ea346a10 --- /dev/null +++ b/.clang-format @@ -0,0 +1,4 @@ +--- +Language: Cpp +BasedOnStyle: Google +... diff --git a/examples/cpp/cvrptw_lib.h b/examples/cpp/cvrptw_lib.h index 887821e6b5..c6c14ca721 100644 --- a/examples/cpp/cvrptw_lib.h +++ b/examples/cpp/cvrptw_lib.h @@ -90,10 +90,9 @@ class RandomDemand { // Service time (proportional to demand) + transition time callback. class ServiceTimePlusTransition { public: - ServiceTimePlusTransition( - int64 time_per_demand_unit, - RoutingNodeEvaluator2 demand, - RoutingNodeEvaluator2 transition_time); + ServiceTimePlusTransition(int64 time_per_demand_unit, + RoutingNodeEvaluator2 demand, + RoutingNodeEvaluator2 transition_time); int64 Compute(RoutingIndexManager::NodeIndex from, RoutingIndexManager::NodeIndex to) const; @@ -106,9 +105,9 @@ class ServiceTimePlusTransition { // Stop service time + transition time callback. class StopServiceTimePlusTransition { public: - StopServiceTimePlusTransition( - int64 stop_time, const LocationContainer& location_container, - RoutingNodeEvaluator2 transition_time); + StopServiceTimePlusTransition(int64 stop_time, + const LocationContainer& location_container, + RoutingNodeEvaluator2 transition_time); int64 Compute(RoutingIndexManager::NodeIndex from, RoutingIndexManager::NodeIndex to) const; diff --git a/examples/cpp/dimacs_assignment.cc b/examples/cpp/dimacs_assignment.cc index cc0570d956..e7c77682e0 100644 --- a/examples/cpp/dimacs_assignment.cc +++ b/examples/cpp/dimacs_assignment.cc @@ -16,8 +16,8 @@ #include #include #include -#include "absl/container/flat_hash_map.h" +#include "absl/container/flat_hash_map.h" #include "absl/strings/str_format.h" #include "examples/cpp/parse_dimacs_assignment.h" #include "examples/cpp/print_dimacs_assignment.h" diff --git a/examples/cpp/dobble_ls.cc b/examples/cpp/dobble_ls.cc index 59306934d7..4768f02734 100644 --- a/examples/cpp/dobble_ls.cc +++ b/examples/cpp/dobble_ls.cc @@ -723,7 +723,8 @@ void SolveDobble(int num_cards, int num_symbols, int num_symbols_per_card) { // Main decision builder that regroups the first solution decision // builder and the combination of local search operators and // filters. - LocalSearchFilterManager* filter_manager = solver.RevAlloc(new LocalSearchFilterManager(filters)); + LocalSearchFilterManager* filter_manager = + solver.RevAlloc(new LocalSearchFilterManager(filters)); DecisionBuilder* const final_db = solver.MakeLocalSearchPhase( all_card_symbol_vars, build_db, solver.MakeLocalSearchPhaseParameters( diff --git a/examples/cpp/fap_parser.h b/examples/cpp/fap_parser.h index 74027507c7..dc88312128 100644 --- a/examples/cpp/fap_parser.h +++ b/examples/cpp/fap_parser.h @@ -22,6 +22,7 @@ #include #include #include + #include "absl/container/flat_hash_map.h" #include "absl/strings/numbers.h" #include "absl/strings/str_split.h" diff --git a/examples/cpp/fap_utilities.h b/examples/cpp/fap_utilities.h index a8195340ab..9c6232edc6 100644 --- a/examples/cpp/fap_utilities.h +++ b/examples/cpp/fap_utilities.h @@ -24,9 +24,9 @@ #include "absl/strings/str_format.h" #include "examples/cpp/fap_parser.h" -#include "ortools/constraint_solver/constraint_solver.h" #include "ortools/base/logging.h" #include "ortools/base/map_util.h" +#include "ortools/constraint_solver/constraint_solver.h" namespace operations_research { diff --git a/examples/cpp/golomb_sat.cc b/examples/cpp/golomb_sat.cc index d8b2a2bd42..b69715f694 100644 --- a/examples/cpp/golomb_sat.cc +++ b/examples/cpp/golomb_sat.cc @@ -97,8 +97,8 @@ void GolombRuler(int size) { if (response.status() == CpSolverStatus::OPTIMAL) { const int64 result = SolutionIntegerValue(response, ticks.back()); const int64 num_failures = response.num_conflicts(); - printf("N = %d, optimal length = %lld (conflicts:%lld, time=%f s)\n", size, result, - num_failures, response.wall_time()); + printf("N = %d, optimal length = %lld (conflicts:%lld, time=%f s)\n", size, + result, num_failures, response.wall_time()); if (size - 1 < kKnownSolutions) { CHECK_EQ(result, kBestSolutions[size - 1]); } diff --git a/examples/cpp/magic_square_sat.cc b/examples/cpp/magic_square_sat.cc index d23ea8dab3..e7b7d0cac9 100644 --- a/examples/cpp/magic_square_sat.cc +++ b/examples/cpp/magic_square_sat.cc @@ -62,7 +62,7 @@ void MagicSquare(int size) { // Sum on columns. for (int i = 0; i < size; ++i) { - builder.AddEquality(LinearExpr::Sum(transposed[i]), sum); + builder.AddEquality(LinearExpr::Sum(transposed[i]), sum); } // Sum on diagonals. @@ -75,7 +75,7 @@ void MagicSquare(int size) { const CpSolverResponse response = SolveCpModel(builder.Build(), &model); if (response.status() == CpSolverStatus::OPTIMAL) { - for (int n = 0; n < size; ++n) { + for (int n = 0; n < size; ++n) { std::string output; for (int m = 0; m < size; ++m) { absl::StrAppendFormat(&output, "%3d ", @@ -89,8 +89,8 @@ void MagicSquare(int size) { LOG(INFO) << CpSolverResponseStats(response); } -} // namespace sat -} // namespace sat +} // namespace sat +} // namespace operations_research int main(int argc, char **argv) { absl::SetFlag(&FLAGS_logtostderr, true); diff --git a/examples/cpp/max_flow.cc b/examples/cpp/max_flow.cc index 4f212c5d5e..0b119f34de 100644 --- a/examples/cpp/max_flow.cc +++ b/examples/cpp/max_flow.cc @@ -12,6 +12,7 @@ // limitations under the License. #include "ortools/graph/max_flow.h" + #include "ortools/base/logging.h" namespace operations_research { diff --git a/examples/cpp/min_cost_flow.cc b/examples/cpp/min_cost_flow.cc index 3ef937a812..2e57a31770 100644 --- a/examples/cpp/min_cost_flow.cc +++ b/examples/cpp/min_cost_flow.cc @@ -12,6 +12,7 @@ // limitations under the License. #include "ortools/graph/min_cost_flow.h" + #include "ortools/base/logging.h" namespace operations_research { diff --git a/examples/cpp/network_routing_sat.cc b/examples/cpp/network_routing_sat.cc index 6d339dc6f5..198555c2c4 100644 --- a/examples/cpp/network_routing_sat.cc +++ b/examples/cpp/network_routing_sat.cc @@ -478,9 +478,10 @@ class NetworkRoutingSolver { for (int demand_index = 0; demand_index < num_demands; ++demand_index) { paths.clear(); const Demand &demand = demands_array_[demand_index]; - CHECK(DijkstraShortestPath(num_nodes_, demand.source, demand.destination, - [this](int x, int y) { return HasArc(x, y); }, - kDisconnectedDistance, &paths)); + CHECK(DijkstraShortestPath( + num_nodes_, demand.source, demand.destination, + [this](int x, int y) { return HasArc(x, y); }, kDisconnectedDistance, + &paths)); all_min_path_lengths_.push_back(paths.size() - 1); } diff --git a/examples/cpp/sat_runner.cc b/examples/cpp/sat_runner.cc index 7ccb04c51c..fbdb223093 100644 --- a/examples/cpp/sat_runner.cc +++ b/examples/cpp/sat_runner.cc @@ -19,9 +19,9 @@ #include #include "absl/memory/memory.h" +#include "absl/status/status.h" #include "absl/strings/match.h" #include "absl/strings/numbers.h" -#include "absl/status/status.h" #include "absl/strings/str_cat.h" #include "absl/strings/str_format.h" #include "examples/cpp/opb_reader.h" diff --git a/examples/cpp/slitherlink_sat.cc b/examples/cpp/slitherlink_sat.cc index f6895a261a..c359296fa4 100644 --- a/examples/cpp/slitherlink_sat.cc +++ b/examples/cpp/slitherlink_sat.cc @@ -63,7 +63,8 @@ void PrintSolution(const std::vector> &data, const int sum = data[i][j]; first_line += h_arc ? " -----" : " "; second_line += v_arc ? "|" : " "; - second_line += sum == -1 ? " " : absl::StrFormat(" %d ", sum).c_str(); + second_line += + sum == -1 ? " " : absl::StrFormat(" %d ", sum).c_str(); third_line += v_arc ? "| " : " "; } const bool termination = v_arcs[num_columns][i]; @@ -153,8 +154,7 @@ void SlitherLink(const std::vector> &data) { for (int x = 0; x < num_columns; ++x) { for (int y = 0; y < num_rows; ++y) { - if (data[y][x] == -1) - continue; + if (data[y][x] == -1) continue; std::vector neighbors; const int top_arc = undirected_horizontal_arc(x, y); neighbors.push_back(horizontal_arcs[2 * top_arc]); @@ -243,8 +243,8 @@ void SlitherLink(const std::vector> &data) { LOG(INFO) << CpSolverResponseStats(response); } -} // namespace sat -} // namespace operations_research +} // namespace sat +} // namespace operations_research int main() { std::cout << "Tiny problem" << std::endl; diff --git a/examples/cpp/sports_scheduling_sat.cc b/examples/cpp/sports_scheduling_sat.cc index eb2523b92f..a5e57b994b 100644 --- a/examples/cpp/sports_scheduling_sat.cc +++ b/examples/cpp/sports_scheduling_sat.cc @@ -221,8 +221,7 @@ void SecondModel(int num_teams) { for (int team = 0; team < num_teams; ++team) { std::vector possible_opponents; for (int other = 0; other < num_teams; ++other) { - if (team == other) - continue; + if (team == other) continue; possible_opponents.push_back(fixtures[d][team][other]); possible_opponents.push_back(fixtures[d][other][team]); } @@ -233,8 +232,7 @@ void SecondModel(int num_teams) { // Each fixture happens once per season. for (int team = 0; team < num_teams; ++team) { for (int other = 0; other < num_teams; ++other) { - if (team == other) - continue; + if (team == other) continue; std::vector possible_days; for (int d = 0; d < num_days; ++d) { possible_days.push_back(fixtures[d][team][other]); @@ -246,8 +244,7 @@ void SecondModel(int num_teams) { // Meet each opponent once per season. for (int team = 0; team < num_teams; ++team) { for (int other = 0; other < num_teams; ++other) { - if (team == other) - continue; + if (team == other) continue; std::vector first_half; std::vector second_half; for (int d = 0; d < matches_per_day; ++d) { @@ -265,8 +262,7 @@ void SecondModel(int num_teams) { for (int d = 0; d < num_days; ++d) { for (int team = 0; team < num_teams; ++team) { for (int other = 0; other < num_teams; ++other) { - if (team == other) - continue; + if (team == other) continue; builder.AddImplication(fixtures[d][team][other], at_home[d][team]); builder.AddImplication(fixtures[d][team][other], Not(at_home[d][other])); @@ -313,8 +309,8 @@ void SecondModel(int num_teams) { LOG(INFO) << CpSolverResponseStats(response); } -} // namespace sat -} // namespace operations_research +} // namespace sat +} // namespace operations_research static const char kUsage[] = "Usage: see flags.\nThis program runs a sports scheduling problem." diff --git a/examples/cpp/strawberry_fields_with_column_generation.cc b/examples/cpp/strawberry_fields_with_column_generation.cc index 6b70415c20..67b9a10229 100644 --- a/examples/cpp/strawberry_fields_with_column_generation.cc +++ b/examples/cpp/strawberry_fields_with_column_generation.cc @@ -620,15 +620,15 @@ int main(int argc, char** argv) { #endif // USE_GLOP #if defined(USE_XPRESS) if (FLAGS_colgen_solver == "xpress") { - solver_type = operations_research::MPSolver::XPRESS_LINEAR_PROGRAMMING; - //solver_type = operations_research::MPSolver::CPLEX_LINEAR_PROGRAMMING; - found = true; + solver_type = operations_research::MPSolver::XPRESS_LINEAR_PROGRAMMING; + // solver_type = operations_research::MPSolver::CPLEX_LINEAR_PROGRAMMING; + found = true; } #endif #if defined(USE_CPLEX) if (FLAGS_colgen_solver == "cplex") { - solver_type = operations_research::MPSolver::CPLEX_LINEAR_PROGRAMMING; - found = true; + solver_type = operations_research::MPSolver::CPLEX_LINEAR_PROGRAMMING; + found = true; } #endif if (!found) { diff --git a/examples/cpp/uncapacitated_facility_location.cc b/examples/cpp/uncapacitated_facility_location.cc index 7bb3dbe09c..81ff1ea44a 100644 --- a/examples/cpp/uncapacitated_facility_location.cc +++ b/examples/cpp/uncapacitated_facility_location.cc @@ -26,9 +26,9 @@ #include "google/protobuf/text_format.h" #include "ortools/base/commandlineflags.h" -#include "ortools/base/random.h" #include "ortools/base/integral_types.h" #include "ortools/base/logging.h" +#include "ortools/base/random.h" #include "ortools/linear_solver/linear_solver.h" DEFINE_int32(verbose, 0, "Verbosity level."); @@ -41,34 +41,35 @@ namespace operations_research { typedef struct { double x{0}; double y{0}; - } Location; +} Location; typedef struct { int f{-1}; int c{-1}; MPVariable* x{nullptr}; - } Edge; +} Edge; static double Distance(const Location& src, const Location& dst) { - return sqrt((src.x-dst.x)*(src.x-dst.x) + (src.y-dst.y)*(src.y-dst.y)); + return sqrt((src.x - dst.x) * (src.x - dst.x) + + (src.y - dst.y) * (src.y - dst.y)); } -static void UncapacitatedFacilityLocation(int32 facilities, - int32 clients, double fix_cost, +static void UncapacitatedFacilityLocation( + int32 facilities, int32 clients, double fix_cost, MPSolver::OptimizationProblemType optimization_problem_type) { LOG(INFO) << "Starting " << __func__; // Local Constants const int32 kXMax = 1000; const int32 kYMax = 1000; - const double kMaxDistance = 6*sqrt((kXMax*kYMax))/facilities; + const double kMaxDistance = 6 * sqrt((kXMax * kYMax)) / facilities; const int kStrLen = 1024; // char buffer for names - char name_buffer[kStrLen+1]; + char name_buffer[kStrLen + 1]; name_buffer[kStrLen] = '\0'; LOG(INFO) << "Facilities/Clients/Fix cost/MaxDist: " << facilities << "/" << clients << "/" << fix_cost << "/" << kMaxDistance; // Setting up facilities and demand points - MTRandom randomizer(/*fixed seed*/20191029); + MTRandom randomizer(/*fixed seed*/ 20191029); std::vector facility(facilities); std::vector client(clients); for (int i = 0; i < facilities; ++i) { @@ -96,8 +97,8 @@ static void UncapacitatedFacilityLocation(int32 facilities, // Add binary facilities variables std::vector xf{}; for (int f = 0; f < facilities; ++f) { - snprintf(name_buffer, kStrLen, "x[%d](%g,%g)", f, - facility[f].x, facility[f].y); + snprintf(name_buffer, kStrLen, "x[%d](%g,%g)", f, facility[f].x, + facility[f].y); MPVariable* x = solver.MakeBoolVar(name_buffer); xf.push_back(x); objective->SetCoefficient(x, fix_cost); @@ -106,16 +107,17 @@ static void UncapacitatedFacilityLocation(int32 facilities, // Build edge variables std::vector edges; for (int c = 0; c < clients; ++c) { - snprintf(name_buffer, kStrLen, "R-Client[%d](%g,%g)", c, - client[c].x, client[c].y); - MPConstraint* client_constraint = solver.MakeRowConstraint(/* lb */1, - /* ub */infinity, name_buffer); + snprintf(name_buffer, kStrLen, "R-Client[%d](%g,%g)", c, client[c].x, + client[c].y); + MPConstraint* client_constraint = + solver.MakeRowConstraint(/* lb */ 1, + /* ub */ infinity, name_buffer); for (int f = 0; f < facilities; ++f) { double distance = Distance(facility[f], client[c]); if (distance > kMaxDistance) continue; Edge edge{}; snprintf(name_buffer, kStrLen, "x[%d,%d]", f, c); - edge.x = solver.MakeNumVar(/* lb */0, /*ub */1, name_buffer); + edge.x = solver.MakeNumVar(/* lb */ 0, /*ub */ 1, name_buffer); edge.f = f; edge.c = c; edges.push_back(edge); @@ -124,18 +126,19 @@ static void UncapacitatedFacilityLocation(int32 facilities, client_constraint->SetCoefficient(edge.x, 1); // add constraint (2) snprintf(name_buffer, kStrLen, "R-Edge[%d,%d]", f, c); - MPConstraint* edge_constraint = solver.MakeRowConstraint(/* lb */0, - /* ub */infinity, name_buffer); + MPConstraint* edge_constraint = + solver.MakeRowConstraint(/* lb */ 0, + /* ub */ infinity, name_buffer); edge_constraint->SetCoefficient(edge.x, -1); edge_constraint->SetCoefficient(xf[f], 1); } - }// End adding all edge variables + } // End adding all edge variables LOG(INFO) << "Number of variables = " << solver.NumVariables(); LOG(INFO) << "Number of constraints = " << solver.NumConstraints(); // display on screen LP if small enough if (clients <= 10 && facilities <= 10) { std::string lp_string{}; - solver.ExportModelAsLpFormat(/* obfuscate */false, &lp_string); + solver.ExportModelAsLpFormat(/* obfuscate */ false, &lp_string); std::cout << "LP-Model:\n" << lp_string << std::endl; } // Set options and solve @@ -147,41 +150,41 @@ static void UncapacitatedFacilityLocation(int32 facilities, if (result_status != MPSolver::OPTIMAL) { LOG(FATAL) << "The problem does not have an optimal solution!"; } else { - LOG(INFO) << "Optimal objective value = " << objective->Value(); - if (FLAGS_verbose) { - std::vector> solution(facilities); - for (auto& edge : edges) { - if (edge.x->solution_value() < 0.5) continue; - solution[edge.f].push_back(edge.c); - } - std::cout << "\tSolution:\n"; - for (int f = 0; f < facilities; ++f) { - if (solution[f].size() < 1) continue; - assert(xf[f]->solution_value() > 0.5); - snprintf(name_buffer, kStrLen, "\t Facility[%d](%g,%g):", f, - facility[f].x, facility[f].y); - std::cout << name_buffer; - int i = 1; - for (auto c : solution[f]) { - snprintf(name_buffer, kStrLen, " Client[%d](%g,%g)", c, - client[c].x, client[c].y); - if(i++ >= 5) { - std::cout << "\n\t\t"; - i = 1; - } - std::cout << name_buffer; + LOG(INFO) << "Optimal objective value = " << objective->Value(); + if (FLAGS_verbose) { + std::vector> solution(facilities); + for (auto& edge : edges) { + if (edge.x->solution_value() < 0.5) continue; + solution[edge.f].push_back(edge.c); + } + std::cout << "\tSolution:\n"; + for (int f = 0; f < facilities; ++f) { + if (solution[f].size() < 1) continue; + assert(xf[f]->solution_value() > 0.5); + snprintf(name_buffer, kStrLen, "\t Facility[%d](%g,%g):", f, + facility[f].x, facility[f].y); + std::cout << name_buffer; + int i = 1; + for (auto c : solution[f]) { + snprintf(name_buffer, kStrLen, " Client[%d](%g,%g)", c, client[c].x, + client[c].y); + if (i++ >= 5) { + std::cout << "\n\t\t"; + i = 1; + } + std::cout << name_buffer; + } + std::cout << "\n"; } - std::cout << "\n"; } - } - std::cout << "\n"; - LOG(INFO) << ""; - LOG(INFO) << "Advanced usage:"; - LOG(INFO) << "Problem solved in " << solver.DurationSinceConstruction() - << " milliseconds"; - LOG(INFO) << "Problem solved in " << solver.iterations() << " iterations"; - LOG(INFO) << "Problem solved in " << solver.nodes() - << " branch-and-bound nodes"; + std::cout << "\n"; + LOG(INFO) << ""; + LOG(INFO) << "Advanced usage:"; + LOG(INFO) << "Problem solved in " << solver.DurationSinceConstruction() + << " milliseconds"; + LOG(INFO) << "Problem solved in " << solver.iterations() << " iterations"; + LOG(INFO) << "Problem solved in " << solver.nodes() + << " branch-and-bound nodes"; } } @@ -189,46 +192,46 @@ void RunAllExamples(int32 facilities, int32 clients, double fix_cost) { #if defined(USE_CBC) LOG(INFO) << "---- Integer programming example with CBC ----"; UncapacitatedFacilityLocation(facilities, clients, fix_cost, - MPSolver::CBC_MIXED_INTEGER_PROGRAMMING); + MPSolver::CBC_MIXED_INTEGER_PROGRAMMING); #endif #if defined(USE_GLPK) LOG(INFO) << "---- Integer programming example with GLPK ----"; UncapacitatedFacilityLocation(facilities, clients, fix_cost, - MPSolver::GLPK_MIXED_INTEGER_PROGRAMMING); + MPSolver::GLPK_MIXED_INTEGER_PROGRAMMING); #endif #if defined(USE_SCIP) LOG(INFO) << "---- Integer programming example with SCIP ----"; UncapacitatedFacilityLocation(facilities, clients, fix_cost, - MPSolver::SCIP_MIXED_INTEGER_PROGRAMMING); + MPSolver::SCIP_MIXED_INTEGER_PROGRAMMING); #endif #if defined(USE_GUROBI) LOG(INFO) << "---- Integer programming example with Gurobi ----"; UncapacitatedFacilityLocation(facilities, clients, fix_cost, - MPSolver::GUROBI_MIXED_INTEGER_PROGRAMMING); + MPSolver::GUROBI_MIXED_INTEGER_PROGRAMMING); #endif // USE_GUROBI #if defined(USE_CPLEX) LOG(INFO) << "---- Integer programming example with CPLEX ----"; UncapacitatedFacilityLocation(facilities, clients, fix_cost, - MPSolver::CPLEX_MIXED_INTEGER_PROGRAMMING); + MPSolver::CPLEX_MIXED_INTEGER_PROGRAMMING); #endif // USE_CPLEX LOG(INFO) << "---- Integer programming example with CP-SAT ----"; UncapacitatedFacilityLocation(facilities, clients, fix_cost, - MPSolver::SAT_INTEGER_PROGRAMMING); + MPSolver::SAT_INTEGER_PROGRAMMING); } -} // namespace operations_research +} // namespace operations_research int main(int argc, char** argv) { google::InitGoogleLogging(argv[0]); gflags::SetUsageMessage( - std::string("This program solve a (randomly generated)\n") + - std::string("Uncapacitated Facility Location Problem. Sample Usage:\n")); + std::string("This program solve a (randomly generated)\n") + + std::string("Uncapacitated Facility Location Problem. Sample Usage:\n")); gflags::ParseCommandLineFlags(&argc, &argv, true); CHECK_LT(0, FLAGS_facilities) << "Specify an instance size greater than 0."; CHECK_LT(0, FLAGS_clients) << "Specify a non-null client size."; CHECK_LT(0, FLAGS_fix_cost) << "Specify a non-null client size."; FLAGS_logtostderr = 1; operations_research::RunAllExamples(FLAGS_facilities, FLAGS_clients, - FLAGS_fix_cost); + FLAGS_fix_cost); return EXIT_SUCCESS; } diff --git a/examples/cpp/variable_intervals_sat.cc b/examples/cpp/variable_intervals_sat.cc index 1f4de64651..c58af91376 100644 --- a/examples/cpp/variable_intervals_sat.cc +++ b/examples/cpp/variable_intervals_sat.cc @@ -17,14 +17,12 @@ void Solve() { const IntVar start_p1 = cp_model.NewIntVar(Domain(500, 800)); const IntVar duration_p1 = cp_model.NewIntVar(Domain(1, 360)); const IntVar end_p1 = cp_model.NewIntVar(Domain(500, 1000)); - const IntervalVar p1 = - cp_model.NewIntervalVar(start_p1, duration_p1, end_p1); + const IntervalVar p1 = cp_model.NewIntervalVar(start_p1, duration_p1, end_p1); const IntVar start_p2 = cp_model.NewIntVar(Domain(500, 800)); const IntVar duration_p2 = cp_model.NewIntVar(Domain(1, 360)); const IntVar end_p2 = cp_model.NewIntVar(Domain(500, 1000)); - const IntervalVar p2 = - cp_model.NewIntervalVar(start_p2, duration_p2, end_p2); + const IntervalVar p2 = cp_model.NewIntervalVar(start_p2, duration_p2, end_p2); cp_model.AddEquality(LinearExpr::Sum({duration_p1, duration_p2}), 360); cp_model.AddLessOrEqual(end_p1, start_p2);