Установка семян ГСЧ от времени - PullRequest
2 голосов
/ 10 апреля 2019

Когда вы открываете новую консоль J и выполняете:

? 1000

Вы всегда увидите один и тот же результат, 689 ( Попробуйте онлайн! ).

Это потому, что ГСЧ всегда будет начинаться с одного и того же начального семени.

Я ищу способ изменить семя случайным образом. Это не обязательно должно быть безопасно (например, использовать миллисекунды времени или какой-то подобный метод - хорошо).

Я предполагаю, что сделал бы это, используя 9!:45 (задокументировано на этой странице ), но я не уверен, как поступить.

Мне также все равно, какой из 4 ГСЧ я использую. Я просто хочу, чтобы получался другой случайный результат даже в новой консоли.

1 Ответ

4 голосов
/ 10 апреля 2019

Чужой, который вам нужен для установки случайного семени: 9!:1 ( Случайное семя ).

Вы можете использовать глагол 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
)
...