概率密度算法

问题描述 投票:-2回答:1

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

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

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

范围从-10到15。

机会是:[[ - 10,5],[ - 5],[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个单位的机会。

javascript algorithm random
1个回答
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];
© www.soinside.com 2019 - 2024. All rights reserved.