Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

生成可重复的随机数

指定生成器算法和种子

本示例显示如何通过首先指定生成器算法和种子来重复生成随机数数组。每次使用相同算法和种子初始化生成器时,始终都可以获得相同的结果。

首先,初始化随机数生成器,以使本示例中的结果具备可重复性。例如,以下代码将种子设定为 1 并将生成器算法设置为梅森旋转。

rng(1,"twister");

然后创建随机数数组。

A = rand(3,3)
A =

    0.4170    0.3023    0.1863
    0.7203    0.1468    0.3456
    0.0001    0.0923    0.3968

重复同样的命令。

A = rand(3,3)
A =

    0.5388    0.2045    0.6705
    0.4192    0.8781    0.4173
    0.6852    0.0274    0.5587

第一次调用 rand 改变了生成器的状态,所以第二次调用的结果不同。

现在使用之前的种子和算法重新初始化生成器。然后将再次生成第一个矩阵 A

rng(1,"twister");
A = rand(3,3)
A =

    0.4170    0.3023    0.1863
    0.7203    0.1468    0.3456
    0.0001    0.0923    0.3968

当您希望实现下列结果时,应同时设置种子和生成器:

  • 应确保如今编写的代码在以后的 MATLAB® 版本中运行时该时可返回相同的结果。

  • 应确保在使用当前版本时,您在以前 MATLAB 版本中编写的代码可返回相同的结果。

  • 在运行他人的随机数代码之后,再重复自己代码的随机数。

请参见 rng 参考页来了解可用的生成器列表。

当您第一次启动 MATLAB 会话或调用 rng("default") 时,MATLAB 使用默认算法和种子初始化随机数生成器。从 R2023b 开始,您可以在 MATLAB 预设项中设置默认算法和种子。如果您不更改这些预设项设置,则与以前的版本一样,rng 将使用种子为 0 的梅森旋转生成器的出厂值 "twister"。有关详细信息,请参阅 随机数生成器的默认设置随机数生成器的可再现性

保存和恢复生成器设置

本示例显示如何通过保存和恢复生成器设置来创建可重复随机数数组。需要保存和恢复生成器设置的最常见原因是为了重现算法或迭代中某一特定点产生的随机数。例如,可以在调试时使用生成器设置作为辅助工具。与重新提供种子(该方法会对生成器进行重新初始化)不同,此方法让您能够随时保存和恢复生成器的设置。

首先,初始化随机数生成器,以使本示例中的结果具备可重复性。

rng(1,"twister");

创建 1 到 10 之间的随机整数值数组。

A = randi(10,3,3)
A = 3×3    
     5     4     2
     8     2     4
     1     1     4

第一次调用 randi 改变了生成器的状态。在第一次调用结构体 s 中的 randi 后,保存生成器设置。

s = rng;

创建另一个由 1 到 10 之间的随机整数值组成的数组。

A = randi(10,3,3)
A = 3×3    
     6     3     7
     5     9     5
     7     1     6

现在,将生成器恢复为在 s 中存储的以前状态,并重新生成第二个数组 A

rng(s);
A = randi(10,3,3)
A = 3×3    
     6     3     7
     5     9     5
     7     1     6

另请参阅

相关主题