大多数我见过的退避/延迟算法要么是固定尝试次数,要么是固定超时时间,但两者并存的很少。
我希望在T秒内进行M次尝试,它们之间有指数间隔,并且“T = delay(0) + delay(1) + ... + delay(M-1)”,其中“delay(N) = (e^N - 1) / e”(其中N为重试次数)。
如何计算上述描述中的“e”值,以便在预先指定M和T的情况下恰好执行M次尝试?
大多数我见过的退避/延迟算法要么是固定尝试次数,要么是固定超时时间,但两者并存的很少。
我希望在T秒内进行M次尝试,它们之间有指数间隔,并且“T = delay(0) + delay(1) + ... + delay(M-1)”,其中“delay(N) = (e^N - 1) / e”(其中N为重试次数)。
如何计算上述描述中的“e”值,以便在预先指定M和T的情况下恰好执行M次尝试?
由于“T”是“e”的单调函数,因此您可以执行二进制搜索以找到最适合的值。
这是一个示例Python程序,可通过“T”和“M”找到这样的“e”:
def total_time(e, M):
current = 1
total = 0
for i in range(M):
total += current-1
current *= e
return total
def find_best_e(T, M):
a, b = 0, T
while abs(a-b) > 1e-6:
m = (a+b)/2.0
if total_time(m, M) > T:
b = m
else:
a = m
return (a+b)/2
e = find_best_e(10, 3)
print([e**n-1 for n in range(3)])