[英]percentage distribution - JavaScript Math.random()
我有百分比10% , 20%和70%来决定采取哪种行动。 我有两种方法可以决定:#1让一个新的Math.random()决定每次或#2保持一个Math.random()结果。 查看我在控制台中运行的代码(注意rand1
和rand2
方法):
console.log('chart1');
var chart1;
var rand1 = function() {
if (Math.random() <= 0.1) chart1[0]++;
else if (Math.random() <= 0.2) chart1[1]++;
else chart1[2]++;
};
var runs = 10000;
for (var j = 0; j < 10; j++) {
chart1 = [0,0,0];
for (var i = 0; i < runs; i++) rand1();
var log = [];
for (var k = 0; k < chart1.length; k++) {
log[k] = Math.round(chart1[k] / runs * 100);
}
console.log(log);
}
console.log('chart2');
var chart2;
var rand2 = function() {
var rand = Math.random();
if (rand <= 0.1) chart2[0]++;
else if (rand >= 0.1 && rand <= 0.3) chart2[1]++;
else chart2[2]++;
};
var runs = 10000;
for (var j = 0; j < 10; j++) {
chart2 = [0,0,0];
for (var i = 0; i < runs; i++) rand2();
var log = [];
for (var k = 0; k < chart2.length; k++) {
log[k] = Math.round(chart2[k] / runs * 100);
}
console.log(log);
}
它产生
chart1
[10, 18, 72]
[10, 17, 72]
[11, 17, 72]
[10, 18, 72]
[10, 18, 72]
[10, 18, 72]
[10, 17, 73]
[10, 18, 72]
[10, 18, 72]
[10, 18, 71]
chart2
[9, 20, 71]
[10, 21, 70]
[10, 19, 71]
[10, 20, 70]
[10, 19, 71]
[10, 20, 70]
[10, 20, 70]
[9, 20, 71]
[10, 20, 71]
[9, 20, 71]
,我不明白为什么chart1
趋于..18, 72]
那是因为数学错了。 如果你想在第二次比较中使用一个新的随机数,那么20/90的情况应该是真的,而不是20/100。 所以:
var rand1 = function() {
if (Math.random() < 0.1) chart1[0]++;
else if (Math.random() < 0.222222222222222) chart1[1]++;
else chart1[2]++;
};
如果你不使用一个新的随机数,它就有效,因为你知道当你达到第二个条件时,这个数字在0.1 .. 1.0的范围内,所以如果它小于0.3,则是20/90的情况。 如果您选择一个新的随机数,则该数字的范围为0.0 .. 1.0。
考虑在第一个图表的第二列中生成数字的概率。 首先生成一个以第一列结束的概率为10%的数字。 如果第一列中没有这个数字,其中有90%的可能性,则第二列中有20%的可能性。 您在第二个图表中放置数字的总概率为0.9 * 0.2 = 0.18。 添加一些随机变化,你会得到18左右的东西。
对于第三列,您有100 - 10 - 18 = 72。
如果接受第二个值的概率变为2/9而不是2/10,我们将接受9/10 * 2/9 = 2/10或20%的总概率,这就是你想要的。
嗯...你为什么在if条件下再次调用Math.random()。???? 像这样用。
var rand1 = function(){
var number = Math.random();
if(number <= 0.1) chart1[0]++;
else if(number <= 0.3) chart1[1]++;
else chart1[2]++;
};
现在这将根据需要提供正确的输出
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.