我有一个带有一个主服务器和(可能)许多客户端(工作者)的计算/模拟系统。所有这些都使用相同的数据,但需要随机数进行计算。
什么是最好的PRNG和播种它的最佳方式,以确保两个客户端不使用相同的周期并计算两次相同的结果。
答案 0 :(得分:2)
随机数的一个好处是你无法保证序列不相同。但是,您可以通过减去时间和系统特有的东西 - MAC地址,名称的哈希值或IP地址来实现这一点。
答案 1 :(得分:1)
一些想法,从客户端的独特内容中获取,例如客户端的MAC地址。
或者,让主人生成一个随机数并将其作为种子传递给客户端。
答案 2 :(得分:1)
基于机器(MAC地址,名称,IP地址)播种的问题是种子在同一台机器上始终是相同的。
通常种子来自当前时间。如果所有工人机器同时启动他们的过程,那么他们将拥有相同的种子。
处理这个问题的最简单方法是将这两个值结合起来。从机器哈希生成种子和当前时间将为每台机器提供一个独特的种子,每次运行后都会更改。
在主服务器上创建随机数生成器的另一个选项,让每个工作者从主服务器获取其种子。
答案 3 :(得分:0)
你需要它们随机吗?
boost-random有一些PRNG,如果你需要,我相信它们有一些很好的理论背景。您可以确保使用不同的种子,让服务器将种子与作品分开。