【问题标题】:Declaring rng('shuffle','twister') many times through the use of functions degrade computation time通过使用函数多次声明 rng('shuffle','twister') 会降低计算时间
【发布时间】:2014-03-04 09:27:56
【问题描述】:

我有一个优化程序,我在 MATLAB 中有一个主程序和三个子程序(函数)。我在主程序中声明了rng('shuffle','twister'),但我认为我需要在我的函数下声明相同的rng('shuffle','twister'),因为它们也使用随机抽样。我的问题是是否有必要在我的函数中声明rng('shuffle','twister'),因为它大大降低了计算时间。无论如何,我似乎得到了相同的答案。有没有办法解决这个问题?

【问题讨论】:

    标签: matlab function random


    【解决方案1】:

    您无需在函数中重复运行rng(...),如果您希望每次都获得不同的数字,则只需在启动 MATLAB 时运行一次。 MATLAB 中的随机数函数(即randrandnrandi 等)share a global/system-wide generator,所以除非重启 MATLAB,否则无需重新设置种子。

    由于所有这些函数都访问同一个底层流,因此对其中一个函数的调用会影响其他函数在后续调用中生成的值。

    因此,无论您是否为生成器重新设置种子,在不同函数中生成的数字以及对函数的重复调用都会有所不同。


    更多关于this page 中的'shuffle' 选项的信息,这表明频繁重新播种不仅没有用,而且从统计的角度来看它实际上可能是不可取的:

    'shuffle' 是一种非常简单的重新设置随机数生成器的方法。您可能认为在 MATLAB 中使用它来获得“真正的”随机性是一个好主意,甚至是必要的。但是,对于大多数目的,根本没有必要使用“shuffle”。根据当前时间选择种子不会改善您将从 rand、randi 和 randn 获得的值的统计特性,也不会使它们在任何真正意义上“更加随机”。虽然每次启动 MATLAB 时或在运行某种涉及随机数的大型计算之前重新设置生成器的种子是完全可以的,但在会话中过于频繁地重新设置生成器的种子实际上并不是一个好主意,因为这会影响随机数的统计属性。

    【讨论】:

    • 非常感谢您的快速回答和很好的建议!
    • 实际上,多频繁才算太频繁? (每秒/分钟/小时一次?)
    猜你喜欢
    • 2014-11-05
    • 1970-01-01
    • 2017-08-18
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多