小编Jac*_*eve的帖子

从初始化程序调用时,Ruby随机数生成器会出现偏差

我正在尝试模拟Monty Hall问题,其中要求用户选择三个门中的一个,然后提供切换门.我正在寻找一个随机变化的选择,应该在50%的转换范围内,而50%的停留时间.

class Scenario
  def initialize
    # switched?
  end

  def switched?
    @sw ||= [true, false].sample
  end
end

results = { switched: [], stayed: [] }

1000.times do
  s = Scenario.new

  if s.switched?
    results[:switched].push(s)
  else
    results[:stayed].push(s)
  end
end

puts results[:switched].count
puts results[:stayed].count
Run Code Online (Sandbox Code Playgroud)

当我检查结果哈希时,在此示例中,数组计数按预期大约为500/500.

但是,如果我switched?在初始化方法中取消注释,结果往往会被拆分为750/250左右.结果仍然是随机的(例如738到262),但它们总是倾向于成为这个问题的错误解决方案.

我也尝试过使用其他机制rand(2).zero?来生成数据,但是会出现同样的问题.

为什么或如何在初始化程序中调用此memoized函数会导致随机变化到目前为止,但始终关闭?

ruby

3
推荐指数
1
解决办法
107
查看次数

标签 统计

ruby ×1