首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Distributions.jl中播种RNG

在Distributions.jl中播种RNG
EN

Stack Overflow用户
提问于 2022-06-28 22:54:35
回答 1查看 58关注 0票数 1

我有一个函数模块,需要确保所有函数都使用相同的随机值。我目前有两种解决方案,在每次调用时重置种子:

代码语言:javascript
复制
using Distributions

function random_values(n)
    Random.seed!(1)
    rand(Normal(), n)
end

或者类似地,直接实例化它:

代码语言:javascript
复制
using Distributions
    
function random_values(n)
    rand(MersenneTwister(1), Normal(), n)
end

这是可行的,但我有几个函数,代码变得有点冗长。我宁愿在模块级别设置一个种子,以便所有函数都使用相同的。我如何才能最好地做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2022-06-29 21:24:42

我相信你想要的是有两个或两个以上的函数(f1,f2,.)每个调用rand()。您希望它们处于“同步”状态,这样,通过一系列函数调用,每个函数的每个顺序调用都会获得相同的值序列(因此,第三次对f2的调用使用与第三次对f1的调用相同的rand()值)。

为此,最好在将每个函数初始化为相同的种子之后,显式地将一个复制的RNG对象传递给每个函数:

代码语言:javascript
复制
init = 1234
rngvector(n) = [MersenneTwister(init) for _ in 1:n]
RNG = rngvector(3)

function f1(rng, ...)
    x = rand(rng, ...)
    ...
end

function f2(rng, ...)
    x = rand(rng, ...)
    ...
end

f1(RNG[1], ...)

然后将与

代码语言:javascript
复制
f2(RNG[2], ...).

这确实意味着更多的编码,因为您在每个函数中增加了一个参数,但是初始额外的编码给您带来的灵活性和可重复性使您在编写剩下的代码时使用Monte方法可能非常值得。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72793998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档