从时间开始设置RNG种子

时间:2019-04-09 21:24:01

标签: j

当您打开一个新的J控制台并执行时:

? 1000

您将始终看到相同的结果689(Try it online!)。

这是因为RNG总是以相同的初始种子开始。

我正在寻找一种半随机更改种子的方法。它不一定是安全的(例如,使用毫秒级时间或其他类似方法都可以)。

我假设我会使用9!:45(在this page中进行记录)进行此操作,但是我不确定如何继续。

我也不在乎使用4种RNG中的哪一种。我只是想要一种即使在新的控制台中也可以产生不同的随机效果的方法。

1 个答案:

答案 0 :(得分:4)

您需要设置随机种子的外国人是9!:1Random Seed)。

您可以使用randomize插件中可用的general/misc动词来使用guids随机设置随机种子,如果guid脚本不可用,则使用当前时间。例如:

   9!:0 ''            NB. Query the random seed/link
16807
   require 'numeric'
   randomize ''       NB. Set a new seed for the session
_1672920848 1179844600 923541917 _282857428
   9!:0 ''            NB. Query the random seed/link
_1672920848 1179844600 923541917 _282857428

randomize的定义是:

   randomize
3 : 0
 try.
   require 'guid'
   tmp=. _2 (3!:4) , guids 1
 catch.             NB. general/misc/guid.ijs not available
   tmp=. >:<.0.8*0 60 60 24 31#.0 0 0 0 _1+|.<.}.6!:0 ''
 end.
 ([ 9!:1) {.^:(2~:9!:42'') tmp    NB. set random initial random seed
)