使用几何分布的随机数生成器

4
我需要一个使用几何分布的随机数生成器。
参考链接:http://en.wikipedia.org/wiki/Geometric_Distribution
我尝试了MathNet.Numerics.Distributions
public void GeometricTest()
{
    var geometric = new Geometric(0.1);
    int back = geometric.Sample();
    Assert.Greater(back, -1);
}

但是测试结果全是负数。有没有人发现我的错误或者给我一些建议,以便采样几何分布的其他方法呢?


2
没时间深入研究,但这可能能回答你的问题:链接 - TylerReid
你能展示一下Sample函数的实现吗? - Muneeb Zulfiqar
谢谢你指出这个 bug。新版本似乎还没有在 nuGet 上发布。也许我只需要添加一个减号... - J Fabian Meier
1
这个问题在v3.0.0-alpha8版本中得到了解决,也包含在NuGet上最新的v3.0.0-beta01包中(截至今天)。然而,在v3.0正式版发布之前,如果你没有启用预发行版包,NuGet将不会列出它们。 - Christoph Rüegg
有关该问题的更一般方法,请参见http://ericlippert.com/2012/02/21/generating-random-non-uniform-data/。 - Eric Lippert
1个回答

5
为了在每次试验中具有概率为p的成功几何分布,假设有一个返回均匀分布(0,1)结果的函数rand,则伪代码如下:
define geometric(p)
  return ceiling(ln(1-rand) / ln(1-p))

这将得出第一次成功之前的尝试次数。如果你想要几次失败后第一次成功的另一个定义,可以减去1或使用 floor 代替 ceiling

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接