我正在尝试模拟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 ×1