【发布时间】:2020-10-05 19:18:22
【问题描述】:
我正在对几个数组进行采样,并希望添加一个种子值,以便在现在和将来每次运行时都获得一致的结果。
我的例子:
constant_seed_value = 123456789
["a","b","c"].sample(seed: constant_seed_value ) should return "a" when run every time.
【问题讨论】:
标签: ruby ruby-on-rails-6
我正在对几个数组进行采样,并希望添加一个种子值,以便在现在和将来每次运行时都获得一致的结果。
我的例子:
constant_seed_value = 123456789
["a","b","c"].sample(seed: constant_seed_value ) should return "a" when run every time.
【问题讨论】:
标签: ruby ruby-on-rails-6
只需将带有种子的Random.new 传递给sample:
%w[a b c].sample(1, random: Random.new(123456789))
#=> ["a"]
【讨论】:
[].sample 之前运行srand 1,它总是返回相同的值。这也是一种可行的方法吗,所以我不需要每次都传递值?
sample 不返回随机值。是要测试一个会返回随机值的方法吗?
您需要将种子设为常量(或将其写入文件并在每次程序运行时读取)。我假设你不在乎种子到底是什么。
如果边计算产生
Random.new_seed
#=> 44220669194288225494276674522501875094
你会写
SEED = 44220669194288225494276674522501875094
程序运行时,您必须将种子初始化为该值。
Random.srand(SEED)
#=> 129123040985656142450143558000073927364
现在让我们计算一些伪随机值。
arr = (1..1000).to_a
arr.sample(4)
#=> [762, 619, 41, 997]
rand
#=> 0.9619996498741139
rand
#=> 0.7952214967836931
现在恢复初始种子,就像我们重新运行程序一样。
Random.srand(SEED)
#=> 190782386885144604306184636344084340916
如果我们重复伪随机值的初始构造,我们会发现它们与我们第一次计算它们时相同。
arr.to_a.sample(4)
#=> [762, 619, 41, 997]
rand
#=> 0.9619996498741139
rand
#=> 0.7952214967836931
【讨论】: