14#ifndef OR_TOOLS_UTIL_ADAPTATIVE_PARAMETER_VALUE_H_
15#define OR_TOOLS_UTIL_ADAPTATIVE_PARAMETER_VALUE_H_
41 : value_(initial_value) {}
43 void Reset() { num_changes_ = 0; }
46 const double factor = IncreaseNumChangesAndGetFactor();
47 value_ =
std::min(1.0 - (1.0 - value_) / factor, value_ * factor);
51 const double factor = IncreaseNumChangesAndGetFactor();
52 value_ =
std::max(value_ / factor, 1.0 - (1.0 - value_) * factor);
58 void Update(
int num_decreases,
int num_increases) {
59 if (num_decreases == num_increases) {
60 num_changes_ += num_decreases + num_increases;
61 }
else if (num_decreases < num_increases) {
62 for (
int i = num_decreases; i < num_increases; ++i)
Increase();
63 num_changes_ += 2 * num_decreases;
65 for (
int i = num_increases; i < num_decreases; ++i)
Decrease();
66 num_changes_ += 2 * num_increases;
70 double value()
const {
return value_; }
74 double IncreaseNumChangesAndGetFactor() {
76 return 1.0 + 1.0 / std::sqrt(num_changes_ + 1);
80 int64_t num_changes_ = 0;
AdaptiveParameterValue(double initial_value)
void Update(int num_decreases, int num_increases)
The vehicle routing library lets one model and solve generic vehicle routing problems ranging from th...