如果我在每个平台上使用相同的种子,随机结果会相同吗?
If I use the same seed on every platform, will the random results be the same?
在关于网络游戏的辩论中,一位用户建议对客户端和服务器对象使用相同的随机种子,这样即使敌人在服务器上随机移动,客户端也会以相同的方式移动。
起初,我想争辩说,相同的种子并不能保证每个平台上的随机结果一致;而且这种网络方法将非常幼稚。但是对种子的了解不够,我不能确定。
为了论证,假设我们正在用C++编码并使用标准的 rand(( 和 srand(( 函数。
对于rand
来说,没有这样的保证。
然而,对于<random>
标题,情况有所不同。
关于 cpp 首选项,它指出
所有引擎都可以专门设定种子、序列化和反序列化,以便与可重复的模拟器一起使用。
您可以使用operator>>
和operator<<
序列化和反序列化引擎的状态,并通过网络发送此状态,并保证在不同平台上的可重现性。这是标准规定的。
-
std::default_random_engine
可以使用引擎盖下的任何发动机,因此没有这样的保证。
发行版 是实现定义的,您需要定义自己的发行版以保证可重复性。
奖励视频链接,其中包含有关<random>
标题的更多详细信息。
相关文章:
- 如何使用要传递给 mt19937 的可选随机种子参数设计函数
- 如何使用可选的随机种子参数创建 roll_die() 函数
- 除了 rand() 之外,是否有任何随机生成器库,开发人员可以手动设置种子?
- 如果我在每个平台上使用相同的种子,随机结果会相同吗?
- 随机化种子值C
- 为什么使用迭代器时必须重新设定随机生成器种子?
- 在给定种子和偏移量的情况下生成下一个伪随机值
- 设置随机种子独立rmath库
- 与C++2011不相关的并行随机种子
- 我应该使用从std::random_device种子的随机引擎,还是每次都使用std::random_device
- 如何生成随机种子/哈希以使Rand实际上是随机的
- 生成一个随机种子给srand()-不是时间(NULL)
- 在哪里初始化随机种子以通过多个随机模块使用
- 为什么起始值会影响种子随机的结果
- 更改程序 C++ 中的随机种子
- C++麦克风输入作为随机种子
- 使用srand作为随机种子时出现重复输出
- 随机生成器,种子不工作
- 多精度随机生成器种子错误
- 在伪随机生成器中使用常量种子从UT和GUI中获得不相同的数字