14#ifndef OR_TOOLS_UTIL_RUNNING_STAT_H_
15#define OR_TOOLS_UTIL_RUNNING_STAT_H_
34 void Reset(
int window_size);
59 std::deque<int> values_;
66template <
class Number =
double>
80 const int window_size_;
83 std::vector<Number> values_;
97 : window_size_(window_size),
105 window_size_ = window_size;
113 global_sum_ +=
value;
115 values_.push_back(
value);
116 if (values_.size() > window_size_) {
117 local_sum_ -= values_.front();
123 return num_adds_ == 0 ? 0.0 : global_sum_ /
static_cast<double>(num_adds_);
127 return values_.empty() ? 0.0
128 : local_sum_ /
static_cast<double>(values_.size());
137 return values_.size() == window_size_;
140template <
class Number>
142 : window_size_(window_size), values_(), last_index_(0), max_index_(0) {
146template <
class Number>
148 if (values_.size() < window_size_) {
151 if (values_.empty() ||
value >= GetCurrentMax()) {
152 max_index_ = values_.size();
154 values_.push_back(
value);
161 if (
value >= GetCurrentMax()) {
162 max_index_ = last_index_;
163 values_[last_index_] =
value;
165 values_[last_index_] =
value;
166 if (last_index_ == max_index_) {
171 Number max_value = values_[max_index_];
172 for (
int i = 1; i < values_.size(); ++i) {
173 if (values_[i] > max_value) {
174 max_value = values_[i];
180 if (++last_index_ == window_size_) {
185template <
class Number>
188 return values_[max_index_];
#define CHECK_GT(val1, val2)
#define DCHECK_GT(val1, val2)
#define DCHECK(condition)
#define DCHECK_EQ(val1, val2)
double WindowAverage() const
void Reset(int window_size)
bool IsWindowFull() const
double GlobalAverage() const
RunningAverage(int window_size=1)
RunningMax(int window_size)
The vehicle routing library lets one model and solve generic vehicle routing problems ranging from th...