概率密度算法

时间:2019-03-03 10:10:03

标签: javascript algorithm random

我不确定我所需要的名称是 概率密度 ,但是无论如何。

我想找到一个函数或算法来生成具有指定机会和线性变化的指定范围内的随机数。

例如,指定的范围和机会是:

Chart of chances

范围从-10到15。

机会是:[[-10,5],[-5,0],[3,5],[10,30],[15,0]]

生成数字后的结果可能是该范围内的任何数字,但-5和15除外。因此可能是-10,-9,-8,-7 ...,13、14。

获得-10的机会是5个单位。 -5是0单位。 3是5个单位。

所以-9出现的概率为4个单位,而-8出现的概率为3个单位,等等。

在这种情况下,最常见的数字应该出现在10左右,因为10的机会是30。

1 个答案:

答案 0 :(得分:1)

您可以将概率转换为从0到1的数字,总计为1:

 const chances = [[-10, 5], [-5, 0], [3, 5], [10, 30], [15, 0]];
 const total = chances.reduce((total, [_, v]) => total + v, 0);
 chances.forEach(it => it[1] /= total);

现在您可以生成一个随机数,并找到之前的概率之和大于该数字的第一个值:

let random = Math.random();
const result = chances.find(([_, p]) => (random -= p) < 0)[0];