增加随机化的重量

Nat*_*nby 3 javascript jquery

我很难找到任何有助于解决这个问题的资源:

假设我想生成一个介于1和5之间的随机数,但希望将随机化加权到底端(就像生成一对夫妇可能拥有的随机数量的孩子一样,更可能是1比5).我应该从哪里开始?这会涉及创建一个复杂的函数来映射该曲线,还是有一种方法可以帮助解决这个问题?

对于非常简单的集合,我想我可以创建一个数组,所以对于上面的例子我可以做,例如:

var children = [1,1,1,1,2,2,2,3,4,5];
return children[Math.floor(Math.random() * children.length)];
Run Code Online (Sandbox Code Playgroud)

但这缺乏灵活性,并假设数据集是在脚本中手动创建的.

Iva*_*kir 5

"儿童出生概率"具有高斯分布,这是二项分布的"连续极限".那么使用二项分布呢?

var val = Math.random()*5 + Math.random()*5;
// "val" will be between 0 and 10, but values around 5 are more probable
return 1 + Math.floor(Math.abs(val-5));
Run Code Online (Sandbox Code Playgroud)

只需将其置于功能中并使"5"成为参数.

小测试(http://jsfiddle.net/yt6zvs8n/):

100个输出值:1,1,2,3,2,4,2,2,3,3,1,2,1,4,1,2,3,2,1,4,4,2, 1,4,3,2,2,1,3,2,4,1,3,2,4,2,2,1,2,1,1,1,4,1,4,1,3, 1,2,1,2,1,2,2,3,2,1,3,1,2,1,3,2,1,1,1,1,2,1,1,2,1, 3,4,1,3,1,2,5,1,3,1,3,1,3,1,4,1,3,1,3,2,2,3,1,3,4, 1,3

出现(直方图):38,28,21,12,1