20 #ifndef OR_TOOLS_UTIL_PIECEWISE_LINEAR_FUNCTION_H_
21 #define OR_TOOLS_UTIL_PIECEWISE_LINEAR_FUNCTION_H_
41 int64_t other_point_x);
44 int64_t
Value(int64_t x)
const;
46 int64_t
start_x()
const {
return start_x_; }
48 int64_t
end_x()
const {
return end_x_; }
54 int64_t
slope()
const {
return slope_; }
79 int64_t SafeValuePostReference(int64_t x)
const;
83 int64_t SafeValuePreReference(int64_t x)
const;
96 int64_t intersection_y_;
121 std::vector<int64_t> points_x, std::vector<int64_t> points_y,
122 std::vector<int64_t> slopes, std::vector<int64_t> other_points_x);
128 std::vector<int64_t> points_x, std::vector<int64_t> points_y,
129 std::vector<int64_t> other_points_x);
137 int64_t initial_level, std::vector<int64_t> points_x,
138 std::vector<int64_t> slopes);
142 int64_t point_x, int64_t point_y, int64_t slope, int64_t other_point_x);
169 int64_t reference, int64_t earliness_slope, int64_t tardiness_slope);
178 int64_t early_slack, int64_t late_slack, int64_t earliness_slope,
179 int64_t tardiness_slope);
191 int64_t
Value(int64_t x)
const;
199 int64_t
GetMaximum(int64_t range_start, int64_t range_end)
const;
203 int64_t
GetMinimum(int64_t range_start, int64_t range_end)
const;
207 int64_t range_start, int64_t range_end, int64_t
value)
const;
211 int64_t range_start, int64_t range_end, int64_t
value)
const;
215 int64_t range_start, int64_t range_end, int64_t value_min,
216 int64_t value_max)
const;
238 const std::vector<PiecewiseSegment>&
segments()
const {
return segments_; }
251 const std::function<int64_t(int64_t, int64_t)>& operation);
254 bool FindSegmentIndicesFromRange(int64_t range_start, int64_t range_end,
255 int* start_segment,
int* end_segment)
const;
256 void UpdateStatus() {
258 is_convex_ = IsConvexInternal();
259 is_non_decreasing_ = IsNonDecreasingInternal();
260 is_non_increasing_ = IsNonIncreasingInternal();
261 is_modified_ =
false;
264 bool IsConvexInternal()
const;
265 bool IsNonDecreasingInternal()
const;
266 bool IsNonIncreasingInternal()
const;
270 std::vector<PiecewiseSegment> segments_;
273 bool is_non_decreasing_;
274 bool is_non_increasing_;
int64_t GetMaximum() const
const std::vector< PiecewiseSegment > & segments() const
static PiecewiseLinearFunction * CreateRightRayFunction(int64_t point_x, int64_t point_y, int64_t slope)
void AddConstantToX(int64_t constant)
static PiecewiseLinearFunction * CreateLeftRayFunction(int64_t point_x, int64_t point_y, int64_t slope)
static PiecewiseLinearFunction * CreateStepFunction(std::vector< int64_t > points_x, std::vector< int64_t > points_y, std::vector< int64_t > other_points_x)
std::pair< int64_t, int64_t > GetSmallestRangeInValueRange(int64_t range_start, int64_t range_end, int64_t value_min, int64_t value_max) const
static const int kNotFound
int64_t Value(int64_t x) const
std::vector< PiecewiseLinearFunction * > DecomposeToConvexFunctions() const
std::string DebugString() const
void Add(const PiecewiseLinearFunction &other)
bool IsNonDecreasing() const
static PiecewiseLinearFunction * CreateOneSegmentFunction(int64_t point_x, int64_t point_y, int64_t slope, int64_t other_point_x)
int64_t GetMinimum() const
void AddConstantToY(int64_t constant)
bool IsNonIncreasing() const
std::pair< int64_t, int64_t > GetSmallestRangeGreaterThanValue(int64_t range_start, int64_t range_end, int64_t value) const
bool InDomain(int64_t x) const
void Subtract(const PiecewiseLinearFunction &other)
std::pair< int64_t, int64_t > GetSmallestRangeLessThanValue(int64_t range_start, int64_t range_end, int64_t value) const
static PiecewiseLinearFunction * CreatePiecewiseLinearFunction(std::vector< int64_t > points_x, std::vector< int64_t > points_y, std::vector< int64_t > slopes, std::vector< int64_t > other_points_x)
static PiecewiseLinearFunction * CreateEarlyTardyFunctionWithSlack(int64_t early_slack, int64_t late_slack, int64_t earliness_slope, int64_t tardiness_slope)
static PiecewiseLinearFunction * CreateFullDomainFunction(int64_t initial_level, std::vector< int64_t > points_x, std::vector< int64_t > slopes)
static PiecewiseLinearFunction * CreateEarlyTardyFunction(int64_t reference, int64_t earliness_slope, int64_t tardiness_slope)
static PiecewiseLinearFunction * CreateFixedChargeFunction(int64_t slope, int64_t value)
void AddConstantToX(int64_t constant)
PiecewiseSegment(int64_t point_x, int64_t point_y, int64_t slope, int64_t other_point_x)
int64_t Value(int64_t x) const
std::string DebugString() const
static bool FindComparator(int64_t point, const PiecewiseSegment &segment)
void ExpandEnd(int64_t end_x)
void AddConstantToY(int64_t constant)
int64_t intersection_y() const
static bool SortComparator(const PiecewiseSegment &segment1, const PiecewiseSegment &segment2)
Collection of objects used to extend the Constraint Solver library.