Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 22 additions & 14 deletions ortools/routing/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,9 @@ cc_library(
"//ortools/constraint_solver:cp",
"//ortools/util:bitset",
"//ortools/util:saturated_arithmetic",
"@abseil-cpp//absl/algorithm:container",
"@abseil-cpp//absl/container:flat_hash_map",
"@abseil-cpp//absl/container:flat_hash_set",
"@abseil-cpp//absl/log:check",
"@abseil-cpp//absl/types:span",
],
Expand Down Expand Up @@ -220,6 +223,7 @@ cc_library(
deps = [
":filter_committables",
"//ortools/algorithms:binary_search",
"//ortools/base:types",
"//ortools/util:saturated_arithmetic",
"@abseil-cpp//absl/log:check",
"@abseil-cpp//absl/types:span",
Expand Down Expand Up @@ -269,6 +273,7 @@ cc_library(
":types",
":utils",
"//ortools/base:adjustable_priority_queue",
"//ortools/base:base_export",
"//ortools/base:dump_vars",
"//ortools/base:log_severity",
"//ortools/base:map_util",
Expand Down Expand Up @@ -334,6 +339,7 @@ cc_library(
srcs = ["filter_committables.cc"],
hdrs = ["filter_committables.h"],
deps = [
"//ortools/base:types",
"//ortools/util:bitset",
"//ortools/util:saturated_arithmetic",
"@abseil-cpp//absl/log:check",
Expand All @@ -347,6 +353,7 @@ cc_library(
hdrs = ["fourier_solver.h"],
deps = [
"//ortools/base:strong_vector",
"//ortools/base:types",
"//ortools/util:strong_integers",
"@abseil-cpp//absl/algorithm:container",
"@abseil-cpp//absl/container:flat_hash_map",
Expand All @@ -358,20 +365,21 @@ cc_library(
],
)

# cc_test(
# name = "fourier_solver_test",
# srcs = ["fourier_solver_test.cc"],
# deps = [
# ":fourier_solver",
# "//ortools/base:gmock_main",
# "//ortools/util:optional_boolean_cc_proto",
# "@abseil-cpp//absl/algorithm:container",
# "@abseil-cpp//absl/container:flat_hash_map",
# "@abseil-cpp//absl/strings",
# "@abseil-cpp//absl/types:span",
# "@protobuf//:duration_cc_proto",
# ],
# )
cc_test(
name = "fourier_solver_test",
srcs = ["fourier_solver_test.cc"],
deps = [
":fourier_solver",
"//ortools/base:gmock_main",
"//ortools/util:optional_boolean_cc_proto",
"@abseil-cpp//absl/algorithm:container",
"@abseil-cpp//absl/container:flat_hash_map",
"@abseil-cpp//absl/strings",
"@abseil-cpp//absl/types:span",
"@google_benchmark//:benchmark",
"@protobuf//:duration_cc_proto",
],
)

proto_library(
name = "heuristic_parameters_proto",
Expand Down
2 changes: 2 additions & 0 deletions ortools/routing/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
# limitations under the License.

file(GLOB _SRCS "*.h" "*.cc")
list(FILTER _SRCS EXCLUDE REGEX ".*/.*_benchmark.cc")
list(FILTER _SRCS EXCLUDE REGEX ".*/.*_test.cc")
set(NAME ${PROJECT_NAME}_routing)

# Will be merge in libortools.so
Expand Down
27 changes: 11 additions & 16 deletions ortools/routing/constraints.cc
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
#include "absl/log/check.h"
#include "absl/types/span.h"
#include "ortools/base/strong_vector.h"
#include "ortools/base/types.h"
#include "ortools/constraint_solver/constraint_solver.h"
#include "ortools/constraint_solver/constraints.h"
#include "ortools/constraint_solver/interval.h"
Expand Down Expand Up @@ -264,7 +265,7 @@ class ResourceAssignmentConstraint : public Constraint {
dim->CumulVar(model_.End(vehicle))
->SetRange(attributes.end_domain().Min(),
attributes.end_domain().Max());
if (attributes.span_upper_bound() < std::numeric_limits<int64_t>::max()) {
if (attributes.span_upper_bound() < kint64max) {
dim->vehicle_span_variables()[vehicle]->SetMax(
attributes.span_upper_bound());
}
Expand Down Expand Up @@ -359,22 +360,18 @@ class PathSpansAndTotalSlacks : public Constraint {
// for span and total_slack or not.
int64_t SpanMin(int vehicle, int64_t sum_fixed_transits) {
DCHECK_GE(sum_fixed_transits, 0);
const int64_t span_min = spans_[vehicle]
? spans_[vehicle]->Min()
: std::numeric_limits<int64_t>::max();
const int64_t total_slack_min = total_slacks_[vehicle]
? total_slacks_[vehicle]->Min()
: std::numeric_limits<int64_t>::max();
const int64_t span_min =
spans_[vehicle] ? spans_[vehicle]->Min() : kint64max;
const int64_t total_slack_min =
total_slacks_[vehicle] ? total_slacks_[vehicle]->Min() : kint64max;
return std::min(span_min, CapAdd(total_slack_min, sum_fixed_transits));
}
int64_t SpanMax(int vehicle, int64_t sum_fixed_transits) {
DCHECK_GE(sum_fixed_transits, 0);
const int64_t span_max = spans_[vehicle]
? spans_[vehicle]->Max()
: std::numeric_limits<int64_t>::min();
const int64_t total_slack_max = total_slacks_[vehicle]
? total_slacks_[vehicle]->Max()
: std::numeric_limits<int64_t>::min();
const int64_t span_max =
spans_[vehicle] ? spans_[vehicle]->Max() : kint64min;
const int64_t total_slack_max =
total_slacks_[vehicle] ? total_slacks_[vehicle]->Max() : kint64min;
return std::max(span_max, CapAdd(total_slack_max, sum_fixed_transits));
}
void SetSpanMin(int vehicle, int64_t min, int64_t sum_fixed_transits) {
Expand Down Expand Up @@ -545,9 +542,7 @@ class PathSpansAndTotalSlacks : public Constraint {
const int64_t span_max = SpanMax(vehicle, sum_fixed_transits);
const int64_t slack_from_lb = CapSub(span_max, span_lb);
const int64_t slack_from_ub =
span_ub < std::numeric_limits<int64_t>::max()
? CapSub(span_ub, span_min)
: std::numeric_limits<int64_t>::max();
span_ub < kint64max ? CapSub(span_ub, span_min) : kint64max;
for (const int node : path_) {
IntVar* transit_var = dimension_->TransitVar(node);
const int64_t transit_i_min = transit_var->Min();
Expand Down
15 changes: 15 additions & 0 deletions ortools/routing/csharp/routing.i
Original file line number Diff line number Diff line change
Expand Up @@ -224,10 +224,25 @@ using Domain = Google.OrTools.Util.Domain;
%unignore Model::End;
%unignore Model::GetArcCostForVehicle;
%unignore Model::GetDimensionOrDie;
%unignore Model::GetDisjunctionMaxCardinality;
%unignore Model::GetDisjunctionMinCardinality;
%unignore Model::GetDisjunctionSoftMaxCardinality;
%unignore Model::GetDisjunctionSoftMaxPenalty;
%unignore Model::GetDisjunctionSoftMaxPenaltyCostBehavior;
%unignore Model::GetDisjunctionSoftMinCardinality;
%unignore Model::GetDisjunctionSoftMinPenalty;
%unignore Model::GetDisjunctionSoftMinPenaltyCostBehavior;
%unignore Model::GetDisjunctionPenalty;
%unignore Model::GetNumberOfDisjunctions;
%unignore Model::GetMutableDimension;
%unignore Model::IsEnd;
%unignore Model::IsStart;
%unignore Model::IsVehicleUsed;
%unignore Model::MakeDisjunction;
%unignore Model::SetDisjunctionHardMaximum;
%unignore Model::SetDisjunctionHardMinimum;
%unignore Model::SetDisjunctionSoftMaximum;
%unignore Model::SetDisjunctionSoftMinimum;
%unignore Model::NextVar;
%unignore Model::ReadAssignmentFromRoutes;
%unignore Model::RegisterTransitCallback;
Expand Down
5 changes: 3 additions & 2 deletions ortools/routing/decision_builders.cc
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
#include "absl/types/span.h"
#include "ortools/base/map_util.h"
#include "ortools/base/strong_vector.h"
#include "ortools/base/types.h"
#include "ortools/constraint_solver/constraint_solver.h"
#include "ortools/constraint_solver/interval.h"
#include "ortools/routing/lp_scheduling.h"
Expand Down Expand Up @@ -172,7 +173,7 @@ void AppendRouteCumulAndBreakVarAndValues(
int new_num_values = old_num_values;
for (int j = old_num_values; j < vals.size(); ++j) {
// Value kint64min signals an unoptimized variable, skip setting those.
if (vals[j] == std::numeric_limits<int64_t>::min()) continue;
if (vals[j] == kint64min) continue;
// Skip variables that are not bound.
if (vars[j]->Bound()) continue;
vals[new_num_values] = vals[j];
Expand Down Expand Up @@ -667,7 +668,7 @@ class SetCumulsFromGlobalDimensionCosts : public DecisionBuilder {
DCHECK_EQ(cp_variables_.size(), cp_values_.size());
// Value kint64min signals an unoptimized variable, set to min instead.
for (int j = 0; j < cp_values_.size(); ++j) {
if (cp_values_[j] == std::numeric_limits<int64_t>::min()) {
if (cp_values_[j] == kint64min) {
cp_values_[j] = cp_variables_[j]->Min();
}
}
Expand Down
4 changes: 2 additions & 2 deletions ortools/routing/filter_committables.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@

#include "absl/log/check.h"
#include "absl/types/span.h"
#include "ortools/base/types.h"
#include "ortools/util/bitset.h"
#include "ortools/util/saturated_arithmetic.h"

Expand Down Expand Up @@ -276,8 +277,7 @@ class DimensionValues {
void Subtract(const Interval& other) { *this = *this - other; }
// Returns an interval containing all integers: {kint64min, kint64max}.
static Interval AllIntegers() {
return {.min = std::numeric_limits<int64_t>::min(),
.max = std::numeric_limits<int64_t>::max()};
return {.min = kint64min, .max = kint64max};
}
};

Expand Down
Loading
Loading