生成随机数与非均匀分布(Generate random number with a non-unif

2019-08-31 14:10发布

JavaScript的Math.random()返回与“均匀”分布的伪随机数。

我需要生成在歪斜给任一侧上的范围[0,1]的随机数。 (意思是,越来越旁边的数字0或旁边1的机会较高)

理想情况下,我想有一个参数来设置这条曲线。

我认为我可以做Math.random^2得到这样的结果,但什么更复杂的方式是有实现这一目标?

Answer 1:

我想你想用β分布alpha=beta=0.5

这是可能使用反向累积分布变换均匀随机数到β分布。

unif = Math.random()

我不熟悉javascript ,但是这应该是清楚的:

beta = sin(unif*pi/2)^2

PS:您可以生成许多这样的数字和情节直方图

编辑:

用于朝向0歪斜,变换beta值作为-

beta_left = (beta < 0.5) ? 2*beta : 2*(1-beta);

对于向1倾斜,转化为 -

beta_right = (beta > 0.5) ? 2*beta-1 : 2*(1-beta)-1;



Answer 2:

我认为你需要重新考虑你的问题。 泊松处于率,来指定计数分布如的东西多少次我看到每个时间段的平均水平。 它产生正整数所以只是在范围[0,1]的结果是不可能的。 可以请你澄清你想要什么?

无论如何,以产生与泊松率拉姆达一种算法是:

threshold = Math.exp(-lambda)
count = 0
product = 1.0
while (product *= rand) >= threshold {
      count += 1
}
return count

其中“兰特”是函数调用的统一(0,1)。 我不知道的JavaScript,但应该是简单的够你实现。

在回答编辑的问题:

有迹象表明,产生于在有限范围的效果的多个分布,但其中许多人是不适合心脏虚弱,如生家族或Beta分布。

容易的是三角形分布。 SQRT(RAND)会给朝向1聚束的三角形分布,而(1-SQRT(1-RAND))会给接近零成束的三角形分布。

与在m的模式(最频值)的更一般的三角形(其中0 <= M <= 1)可与所生成的

if rand <= m
    return m * Sqrt(rand)
else
    return 1 - ((1 - m) * Sqrt(1 - rand))

需要注意的是兰德的每次调用是一个独立的均匀随机数,这不会,如果你生成一个兰特价值和整个使用它是正确的。



Answer 3:

我只是想出了一个更简单的方式来获得倾斜每一方的随机数,并没有任何相关性。

此方法使用两个JavaScript的常规的随机数。 第一乘以本身(指数越大,越大偏斜效应),而第二选其中分布的侧歪斜到。

function skewedRandom() {
    const a = Math.pow(Math.random(), 2);
    if (Math.random() < 0.5) {
        return a;
    }
    return 1 - a;
}

在这种代码的指数被设置为2的样品直方图10000个执行与在2如上指数:

随着指数3:

而随着指数的10:



Answer 4:

同比可以使用window.crypto.getRandomValues如果可用

<div id="result"></div>

var randVal = new Uint8Array(1);

window.crypto.getRandomValues(randVal);

document.getElementById("result").textContent = randVal[0] / 255;

上的jsfiddle

(如果这是你问什么,我不知道)

或者,也许因为这

<div id="result"></div>

function poissonRandomNumber(lambda) {
    var L = Math.exp(-lambda),
        k = 0,
        p = 1;

    do {
        k = k + 1;
        p = p * Math.random();
    } while (p > L);

    return k - 1;
}

document.getElementById("result").textContent = poissonRandomNumber(100);

还上的jsfiddle



文章来源: Generate random number with a non-uniform distribution