【问题标题】:How to produce reproducible pseudo-random numbers based on a seed for all platforms with the rand crate?如何使用 rand crate 为所有平台生成基于种子的可重现伪随机数?
【发布时间】:2021-05-12 11:16:58
【问题描述】:

这是How can I input an integer seed for producing random numbers using the rand crate in Rust? 的后续行动。在this answer 中指出,如果需要跨构建和架构的可重复性,

然后查看诸如rand_chacharand_pcgrand_xoshiro 之类的板条箱

documentation 中对StdRng 也有同样的说明:

该算法是确定性的,但由于依赖于配置以及未来库版本中可能的替换,因此不应将其视为可重现的。对于安全的可重现生成器,我们建议直接使用 rand_chacha crate。

我查看了这些板条箱,但我还没有找到如何将它们用于我的用例。我正在寻找一个小样本,展示如何使用这些 crate 中的一个来生成一系列伪随机数,这些伪随机数对于给定的种子总是相同的。

【问题讨论】:

  • 嗯,rand_chacha 应该为您提供来自种子 iirc 的序列。
  • 基本上,rand_chacha 中的所有 RNG 结构都实现了SeedableRng trait,所以你可以调用ChaChaRng::from_seed()ChaChaRng::from_seed_u64() 来初始化带有种子的RNG。

标签: random rust random-seed


【解决方案1】:

一个使用rand_chacha::ChaCha8Rng的例子:

use rand_chacha::rand_core::SeedableRng;
use rand_core::RngCore;
use rand_chacha; // 0.3.0

fn main() {
    let mut gen = rand_chacha::ChaCha8Rng::seed_from_u64(10);
    let res: Vec<u64> = (0..100).map(|_| gen.next_u64()).collect(); 
    println!("{:?}", res);
}

Playground

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    • 2022-01-06
    • 2012-11-26
    • 2023-03-21
    • 2016-10-23
    相关资源
    最近更新 更多