random - 你能用几个已知参数构建一个确定性的无限 RNG 吗?
问题描述
我目前正在使用基于锥形的随机游走,在边界处有反射(表示为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 循环了所有可能的状态,它将开始重复,因为它是一个确定性机器。
推荐阅读
- python - Python没有加载json
- c++ - 如何让每个子进程输出一个字符串?
- python - 如何解决库存程序中的搜索库存问题?
- php - php一次更新所有mysql行,但我想一次只更新一个
- html - Angular 9 mat-form-field 没有轮廓,没有标签
- angular - 从外部 URL 重定向回 Angular 应用程序
- java - 休眠 - 无法创建存储过程
- python - kivy FitImage: TypeError: object.__init__() 只接受一个参数(要初始化的实例)
- html - 这个 css 只在大屏幕上工作得很好,当窗口尺寸被修改时,它会变得不方形
- node.js - 快速打字稿中的猫鼬$gt运算符?