优雅的几何分布函数(百分比)(JavaScript)

时间:2018-07-22 13:07:16

标签: javascript

对于许多项目,我需要一个随机数。例如,考虑一个视频游戏,在该游戏中,角色找到了一袋部分为空的黄金。要设置袋子中黄金的百分比,我通常会使用Math.floor(Math.random() * 100 + 0.5)。阅读有关几何分布的信息后,我试图制作一个几何分布随机百分比生成器。阅读了数十篇文章后,我将这个功能拼凑在一起:

function geoDistPercent() {
    var rand = Math.random();
    var prob = ???;
    var rate = -Math.log(1 - prob);
    var expr = -Math.log(rand)/rate;
    return Math.floor(min + expr);
}

我为prob = ???尝试了各种数字,但是我找不到增加最大限制的方法。我已经尝试了许多尝试来找到方程式,但是都没有成功。请帮忙!

更新:我刚刚了解到几何分布没有最大值。我需要一种添加方法,这样就不会生成“ 112%”之类的结果。这可以通过添加一个while循环和一些控制流来完成。这是我需要帮助的prob = ???问题。

1 个答案:

答案 0 :(得分:0)

好的,在回顾了很多关于SE的文章和其他帖子之后,我总结了以下解决方案:

function geoDist(min, max, prob) {
    var q = 0;
    var p = Math.pow(prob, 1 / (max - min));
    while (true) {
        q = Math.ceil(Math.log(1-Math.random()) / Math.log(p)) + (min - 1);
        if (q <= max) {
            return q;
        }
    }
}

它需要三个参数:minmax,以及prob:一次尝试就能获得max的概率。对于生成百分比,geoDist(0,100,0.002)的效果非常好。感谢@NathanMerrill和@Bergi提供有用的信息