Tag: 概率

Ruby:在代码中使用rand(),但编写测试来validation概率

我有一些代码可以根据加权随机提供的东西。 重量更重的东西更有可能随机选择。 现在我是一个很好的rubyist,我想用测试来覆盖所有这些代码。 我想测试根据正确的概率获取的东西。 那么我该如何测试呢? 为随机的东西创建测试会使实际与预期的比较变得非常困难。 我有一些想法,以及为什么它们不会很好用: Stub Kernel.rand在我的测试中返回固定值。 这很酷,但rand()被多次调用,我不确定我是否可以通过足够的控制来测试它以测试我需要的东西。 获取随机项的次数很多次,并将实际比率与预期比率进行比较。 但除非我可以无数次运行它,否则这将永远不会是完美的,如果我在RNG中运气不好,可能会间歇性地失败。 使用一致的随机种子。 这使RNG可重复,但它仍然没有给我任何validation项目A将在80%的时间发生(例如)。 那么我可以使用什么样的方法来编写随机概率的测试覆盖率?

Ruby – 在数组中选取一个元素,有50%的几率获得,有25%的几率获得

没有什么太复杂,基本上我只是想从数组中选择一个元素,好像我正在为每个索引进行硬币抛出,并在我第一次得到头时选择索引。 也没有头意味着我选择最后一个垃圾箱。 我想出了以下内容,并想知道是否有更好/更有效的方法来做到这一点。 def coin_toss(size) random_number = rand(2**size) if random_number == 0 return size-1 else return (0..size-1).detect { |n| random_number[n] == 1 } end end