c++ - C++ 需要一种很好的技术来播种不使用 time() 的 rand()
问题描述
我有一个启动许多客户端进程的 bash 脚本。这些是 AI 游戏玩家,我用来测试有很多玩家的游戏,大约有 400 个连接。
我遇到的问题是 AI 播放器使用
srand( time(nullptr) );
但是如果所有玩家几乎在同一时间开始,他们将经常收到相同的 time() 值,这意味着他们都在同一个 rand() 序列上。
测试过程的一部分是确保如果大量客户端几乎同时尝试连接,服务器可以处理它。
我曾考虑过使用类似的东西
srand( (int) this );
或类似的,依靠每个实例都有一个唯一的内存地址的想法。
还有其他更好的方法吗?
解决方案
对伪随机生成器使用随机种子。
std::random_device
是昂贵的随机数据。(昂贵的慢)你用它来播种prng算法。mt19937 是您将需要的最后一个 prng 算法。
如果需要,您可以选择通过分发来跟进它。即,如果您需要生成器提供的值以外的某个范围内的值。
std::random_device rd;
std::mt19937 generator(rd());
推荐阅读
- uml - 在应用程序开始时使用的节点部署的 UML 图上显示
- scrapy - 从索引页面有条件地抓取已抓取的项目
- docker - 如何从 docker 中的两个图像导入,其中两个图像共享相同的基础图像
- blazor - Blazor:从页面更新布局的问题
- meteor - Material-ui v5.0.6 和 Meteor 的性能问题
- ubuntu - 'truffle unpack' 从 WSL ubuntu 进入 windows 目录
- python - 如何为 pydantic 类制作文档字符串?
- python - 在 python 和 pandas 中:编辑器在大列表中挣扎,有什么替代方案?
- python-3.x - Elasticsearch 集群给出 READTIMEOUT 错误
- python - 在 macOS 上安装 SciPy 时未找到 BLAS/LAPACK 库