具有N个头部概率的硬币鳍状肢
目标是翻转加权硬币,使其在N%的时间内返回头部。
我不是完全难过的。 我可以这样做:
probability = 0.75 # chance of getting heads as decimal num_heads_cases = (100.to_f * probability).to_i cases = num_heads_cases.times.map { :heads }.concat( (100 - num_heads_cases).times.map { :tails } ) is_flip_result_heads = cases.sample == :heads
但我在这里张贴,看看是否有一些核心的ruby / rails方法我忽略了。 我正在寻找类似于以下方法签名的东西:
def random_bool(probability_of_returning_true=0.5)
这类似于被标记为重复的问题,但不是重复的; 那个问题询问如何得到一个随机数 ,而这个问题询问如何获得一个 概率随机的布尔值 。
从“随机数”到“随机布尔”看起来似乎很明显,但显然不是每个人都这样。
def rb(prob=0.5) rand < prob end 10.times.map { rb(0.8) } #=> [true, true, false, false, true, false, true, true, true, true] 100.times.reduce(0) { |t,_| t + (rb(0.8) ? 1 : 0) }/100.0 #=> 0.87 1000.times.reduce(0) { |t,_| t + (rb(0.8) ? 1 : 0) }/1000.0 #=> 0.798 10000.times.reduce(0) { |t,_| t + (rb(0.8) ? 1 : 0) }/10000.0 #=> 0.8003
# prob : Probability (Float between 0 and 1) def flip_weighted_coin(prob) (rand < prob) ? :heads : :tails end