【问题标题】:How to set custom seed for pseudo-random number generator如何为伪随机数生成器设置自定义种子
【发布时间】:2011-06-08 14:23:36
【问题描述】:

在使用randn 伪随机数生成器的情况下,我需要执行一些测试。我怎样才能自己设置种子,所以每次运行这个测试我都会得到相同的结果? (是的,我知道这有点奇怪,但这就是问题所在)。

我找到了具有seed 属性的RANDSTREAM 对象,但它是只读的。有没有办法用它来播种发电机?

【问题讨论】:

  • 不,这并不奇怪。它实际上对测试和调试相当重要。
  • @Jonas,是的,尤其是在结果的可重复性方面......
  • 注意反之亦然,即避免每次重启Matlab时重复,命令为rng('shuffle'),根据当前时间设置种子。

标签: matlab random


【解决方案1】:

老办法:

randn('seed',0)

新方式:

s = RandStream('mcg16807','Seed',0)
RandStream.setDefaultStream(s)

请注意,如果您使用新方法,randrandn 共享同一个流,因此如果您同时调用两者,您可能会发现与旧方法(具有单独的生成器)相比,生成的数字不同。由于这个原因(以及遗留代码),旧方法仍然受支持。

请参阅http://www.mathworks.com/help/techdoc/math/bsn94u0-1.html 了解更多信息。

【讨论】:

  • 请注意,该链接现在显示的是使用 rng 函数的 2011a 版本。
  • 此外,他们现在似乎建议使用RandStream.setGlobalStream 而不是RandStream.setDefaultStream。显然它将在未来的版本中取代该功能。
  • @Gacek 你能帮帮我吗...我按照说明进行操作,但没有得到相同的值
  • @Mazzy,老实说,如果没有看到您的结果和/或代码,我不知道会出现什么问题......
  • 但是没有办法在同一个调用中设置种子并进行随机生成,那么我需要创建一个只有 2 行的函数吗?
【解决方案2】:

您可以调用rng(mySeed) 为全局流设置种子(在 Matlab R2011b 中测试)。这会影响randrandnrandi 函数。

same page that James linked to 将此列为各种旧方法的推荐替代方法(参见表格右列的中间单元格)。

下面是一些示例代码:

长格式; % 以全精度显示数字 格式紧凑; % 去掉输出之间的空行 我的种子 = 10; rng(我的种子); % 设置种子 显示(兰德([1,3])); 显示(兰迪(10,[1,10])); disp(randn([1,3])); 显示(''); rng(我的种子); % 再次设置种子以复制结果 显示(兰德([1,3])); 显示(兰迪(10,[1,10])); disp(randn([1,3]));

它的输出是:

0.771320643266746 0.020751949359402 0.633648234926275 8 5 3 2 8 2 1 7 10 1 0.060379730526407 0.622213879877005 0.109700311365407 0.771320643266746 0.020751949359402 0.633648234926275 8 5 3 2 8 2 1 7 10 1 0.060379730526407 0.622213879877005 0.109700311365407

【讨论】:

    【解决方案3】:
    mySeed=57; % an integer number
    rng(mySeed,'twister') %You can replace 'twister' with other generators
    

    【讨论】:

    • 谢谢。投票给这个!
    【解决方案4】:

    当您只想将 RNG 重置为某个已知状态时,只需使用:

     seed = 0;
     randn('state', seed);
     rand ('state', seed);
     A = round(10*(rand(1,5))); // always will be [10 2 6 5 9]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-26
      • 2011-02-08
      • 2014-09-20
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多