20#ifndef OR_TOOLS_UTIL_PIECEWISE_LINEAR_FUNCTION_H_
21#define OR_TOOLS_UTIL_PIECEWISE_LINEAR_FUNCTION_H_
96 int64 intersection_y_;
121 std::vector<int64> points_x, std::vector<int64> points_y,
122 std::vector<int64> slopes, std::vector<int64> other_points_x);
128 std::vector<int64> points_x, std::vector<int64> points_y,
129 std::vector<int64> other_points_x);
137 int64 initial_level, std::vector<int64> points_x,
138 std::vector<int64> slopes);
144 int64 other_point_x);
181 int64 tardiness_slope);
221 int64 value_max)
const;
243 const std::vector<PiecewiseSegment>&
segments()
const {
return segments_; }
259 bool FindSegmentIndicesFromRange(
int64 range_start,
int64 range_end,
260 int* start_segment,
int* end_segment)
const;
261 void UpdateStatus() {
263 is_convex_ = IsConvexInternal();
264 is_non_decreasing_ = IsNonDecreasingInternal();
265 is_non_increasing_ = IsNonIncreasingInternal();
266 is_modified_ =
false;
269 bool IsConvexInternal()
const;
270 bool IsNonDecreasingInternal()
const;
271 bool IsNonIncreasingInternal()
const;
275 std::vector<PiecewiseSegment> segments_;
278 bool is_non_decreasing_;
279 bool is_non_increasing_;
std::pair< int64, int64 > GetSmallestRangeInValueRange(int64 range_start, int64 range_end, int64 value_min, int64 value_max) const
static PiecewiseLinearFunction * CreateEarlyTardyFunction(int64 reference, int64 earliness_slope, int64 tardiness_slope)
static PiecewiseLinearFunction * CreateFullDomainFunction(int64 initial_level, std::vector< int64 > points_x, std::vector< int64 > slopes)
int64 Value(int64 x) const
static PiecewiseLinearFunction * CreatePiecewiseLinearFunction(std::vector< int64 > points_x, std::vector< int64 > points_y, std::vector< int64 > slopes, std::vector< int64 > other_points_x)
void AddConstantToY(int64 constant)
void AddConstantToX(int64 constant)
static PiecewiseLinearFunction * CreateStepFunction(std::vector< int64 > points_x, std::vector< int64 > points_y, std::vector< int64 > other_points_x)
static const int kNotFound
std::vector< PiecewiseLinearFunction * > DecomposeToConvexFunctions() const
std::string DebugString() const
void Add(const PiecewiseLinearFunction &other)
bool IsNonDecreasing() const
static PiecewiseLinearFunction * CreateFixedChargeFunction(int64 slope, int64 value)
bool IsNonIncreasing() const
void Subtract(const PiecewiseLinearFunction &other)
std::pair< int64, int64 > GetSmallestRangeGreaterThanValue(int64 range_start, int64 range_end, int64 value) const
std::pair< int64, int64 > GetSmallestRangeLessThanValue(int64 range_start, int64 range_end, int64 value) const
static PiecewiseLinearFunction * CreateOneSegmentFunction(int64 point_x, int64 point_y, int64 slope, int64 other_point_x)
const std::vector< PiecewiseSegment > & segments() const
static PiecewiseLinearFunction * CreateEarlyTardyFunctionWithSlack(int64 early_slack, int64 late_slack, int64 earliness_slope, int64 tardiness_slope)
static PiecewiseLinearFunction * CreateRightRayFunction(int64 point_x, int64 point_y, int64 slope)
bool InDomain(int64 x) const
static PiecewiseLinearFunction * CreateLeftRayFunction(int64 point_x, int64 point_y, int64 slope)
static bool FindComparator(int64 point, const PiecewiseSegment &segment)
int64 Value(int64 x) const
void AddConstantToY(int64 constant)
void AddConstantToX(int64 constant)
std::string DebugString() const
int64 intersection_y() const
void ExpandEnd(int64 end_x)
PiecewiseSegment(int64 point_x, int64 point_y, int64 slope, int64 other_point_x)
static bool SortComparator(const PiecewiseSegment &segment1, const PiecewiseSegment &segment2)
The vehicle routing library lets one model and solve generic vehicle routing problems ranging from th...