你能用几个已知参数构造一个确定性的无限 RNG 吗?
Can you construct a deterministic infinite RNG with just a few known parameters?
我目前正在使用基于锥体的随机游走,在边界处进行反射(表示为 R[n]
),具有以下属性:
R[n]
始终在用户定义的范围内(称为边界)[a, b]
(或 [-a, a]
,如果这样更容易)
R[0]
由用户定义
|R[n]-R[n-1]|<d
一些d <= b - a
(这是圆锥体属性)
- 如果生成的
R[n]
落在边界外,则将其反射到最近的边界上,这样就不会在边缘累积概率质量
你可以在这里看到这个过程的可视化(图中的 R[0] 是“R”):
如你所见,红点是反射,虚线代表“圆锥体”
由于以下几个原因,这是一个非常好的过程:
- 统一走区间
- 它有一个明确定义的期望值,即
(b-a)/2
- 它不像
Uni[a, b]
那样混乱,这非常适合模拟现实世界中的漂移,例如传感器错误。
然而,这种方法的一个缺陷是重建步行,你需要记录步行的每一个点。我想要一个具有这些属性的进程,但也可以仅使用几个初始参数重新生成。
这可能吗?
您可以使用“少数”参数来完成此操作,前提是这些参数中至少有一个具有无限多的位数。对于无限 PRNG,您需要它能够拥有无限数量的可能状态。
鉴于您的计算机只有有限的内存,那么您将不得不满足于大量但有限的状态。一旦 PRNG 循环遍历所有可能的状态,它将开始重复,因为它是一台确定性机器。
我目前正在使用基于锥体的随机游走,在边界处进行反射(表示为 R[n]
),具有以下属性:
R[n]
始终在用户定义的范围内(称为边界)[a, b]
(或[-a, a]
,如果这样更容易)R[0]
由用户定义|R[n]-R[n-1]|<d
一些d <= b - a
(这是圆锥体属性)- 如果生成的
R[n]
落在边界外,则将其反射到最近的边界上,这样就不会在边缘累积概率质量
你可以在这里看到这个过程的可视化(图中的 R[0] 是“R”):
如你所见,红点是反射,虚线代表“圆锥体”
由于以下几个原因,这是一个非常好的过程:
- 统一走区间
- 它有一个明确定义的期望值,即
(b-a)/2
- 它不像
Uni[a, b]
那样混乱,这非常适合模拟现实世界中的漂移,例如传感器错误。
然而,这种方法的一个缺陷是重建步行,你需要记录步行的每一个点。我想要一个具有这些属性的进程,但也可以仅使用几个初始参数重新生成。
这可能吗?
您可以使用“少数”参数来完成此操作,前提是这些参数中至少有一个具有无限多的位数。对于无限 PRNG,您需要它能够拥有无限数量的可能状态。
鉴于您的计算机只有有限的内存,那么您将不得不满足于大量但有限的状态。一旦 PRNG 循环遍历所有可能的状态,它将开始重复,因为它是一台确定性机器。