我可以在C中使用多个独立的随机数生成器吗?

Jak*_*all 5 c++ random simulation r random-seed

我有许多独立的随机过程(到达过程说),要求我生成随机数.我想为每个进程使用通用随机数,我可以比较控制这些策略时不同策略的执行情况.

我希望过程A由发电机A控制(使用种子A)我希望过程B由发电机B控制(使用种子B).

等等.

这是否可以在R中实现.我找不到任何人这样做过.我试过了.如果这是一个重复的问题,请原谅我.

谢谢

JAK

Mif*_*iff 4

这是我偶尔想做的事情 - 但还没有想出比下面的拼凑更好的东西(只有当你只使用 1 或 2 个不同的随机分布时,这才真正有用,因为你必须编写每个函数:

#Make a list of seeds - generalises to mkore than 2
seed <- list(NA,NA)
set.seed(1)
seed[[1]] <- .Random.seed
set.seed(2)
seed[[2]] <- .Random.seed

my_runif <- function(...,which.seed=1)
{
  .Random.seed <<- seed[[which.seed]]
  x <-runif(...)
  seed[[which.seed]] <<- .Random.seed
  x
}

##Print some data for comparison
> set.seed(1); runif(10)
 [1] 0.26550866 0.37212390 0.57285336 0.90820779 0.20168193 0.89838968 0.94467527 0.66079779 0.629114040.06178627
> set.seed(2); runif(10)
 [1] 0.1848823 0.7023740 0.5733263 0.1680519 0.9438393 0.9434750 0.1291590 0.8334488 0.4680185 0.5499837

#Test
> my_runif(1,which.seed=1)
[1] 0.2655087
> my_runif(1,which.seed=1)
[1] 0.3721239
> my_runif(1,which.seed=1)
[1] 0.5728534
> my_runif(1,which.seed=2)
[1] 0.1848823
> my_runif(1,which.seed=1)
[1] 0.9082078
Run Code Online (Sandbox Code Playgroud)

我想<<-如果您从另一个函数内部调用 my_runif ,将会中断。

fortunes::fortune("<<-")
Run Code Online (Sandbox Code Playgroud)

ETA:以下内容可能更可靠

my_runif <- function(...,which.seed=1)
{
  assign(".Random.seed", seed[[which.seed]], envir = .GlobalEnv)
  x <-runif(...)
  seed <- seed #Bring into local envir
  seed[[which.seed]] <- .Random.seed
  assign("seed", seed, envir = .GlobalEnv)
  x
}
Run Code Online (Sandbox Code Playgroud)