我正在研究分配问题。例如:我要调用一个函数,这个函数应该触发第二个函数。第二个功能可以是 3(三)个选项之一。我想要:函数 A 应该有 10% 的时间被调用 函数 B 应该有 20% 的时间被调用 函数 C 应该有 70% 的时间被调用
有 2 个选项 (70%-30%),很容易。我生成一个随机整数 Math.round(Math.random()*100),然后检查结果是否 < 30。结果 < 30 转到一个函数,其余的转到另一个函数,它平衡到 70/30。
但是,当涉及到有两个以上的选项时,我遇到了逻辑问题。
这是大纲:
//Initialize variables
var twentyPercentCount = 0;
var seventyPercentCount = 0;
var tenPercentCount = 0;
//Iterate 10,000 times
for (var i = 0; i < 10000; i++) {
// generate whole integer 0-99
// logic
}
console.log("number of times value is < 20: " + twentyPercentCount);
console.log("number of times value is < 70: " + seventyPercentCount);
console.log("remaining ten percent range: " + tenPercentCount);
我目前正在尝试的是:
var twentyPercentCount = 0;
var seventyPercentCount = 0;
var tenPercentCount = 0;
var distributionArray = [10, 20, 100];
for (var i = 0; i < 10000; i++) {
var rnd = Math.round(Math.random() * 100);
// find first element > the random number
let chosenNum = distributionArray.find((element) => element >= rnd);
if (chosenNum == 100) {
seventyPercentCount += 1;
} else if (chosenNum == 20) {
twentyPercentCount += 1;
} else {
tenPercentCount += 1;
}
}
console.log("number of values less than 10: " + twentyPercentCount);
console.log("number of values less than 20: " + twentyPercentCount);
console.log("70 percent range: " + seventyPercentCount);
结果
**number of values less than 10: 943
number of values less than 20: 943
70 percent range: 8025**
问题是 10% 和 20% 的桶仍然相等。我知道这是我的逻辑缺陷,但无法克服。
开心每一天1111
相关分类