File size: 1,039 Bytes
827d9ec |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
import math
from abc import ABC
class ParameterSchedule(ABC):
def compute(self, t):
raise NotImplementedError
class ExponentialInterpolation(ParameterSchedule):
def __init__(self, start, end, alpha):
self.start = start
self.end = end
self.alpha = alpha
def compute(self, t):
if self.alpha != 0:
return self.start + (self.end - self.start) * (
math.exp(self.alpha * t) - 1
) / (math.exp(self.alpha) - 1)
else:
return self.start + (self.end - self.start) * t
class PiecewiseStepFunction(ParameterSchedule):
def __init__(self, thresholds, values):
self.thresholds = thresholds
self.values = values
def compute(self, t):
assert len(self.thresholds) > 0
assert len(self.values) == len(self.thresholds) + 1
idx = 0
while idx < len(self.thresholds) and t > self.thresholds[idx]:
idx += 1
return self.values[idx]
|