我想选择随机数范围内的数字,但加权接近该范围的一部分。例如:
高出20%。
这个是可能的吗?我该怎么做?
发布于 2012-03-30 17:42:25
这取决于你希望你的概率分布看起来像什么。
例如:
Pick a random number between 1-10
If it is <= 6
Return a random number between 1-5
Else
Return a random number between 6-10
EndIf
选择一个数字在1-5 60%的时间和一个数字在6-10 40%的时间。
发布于 2012-03-30 18:37:52
若要生成概率的钟形曲线,请滚动和和多个骰子。然后减去平均数。如果结果为负值,请重滚。掷的骰子越多,重量越重。
有一种方法,完全未经测试。
float sum;
do {
sum = rollThreeDice(); // returns 3 to 18, with an average is 10.5
sum -= 10.5; // Now the range is 0 to 7.5, with the lower end being more likely.
} while(sum < 0);
return sum;
当然,您可以滚动骰子与任何数目的边,以产生所需的范围。您可以通过选择骰子数量来控制频率曲线。
发布于 2012-03-30 17:44:24
我想到了两个解决办法。首先,随机运行两次:
java.utils.Random randomGenerator = new java.utils.Random();
int random = randomGenerator.nextInt(11);
if(random <= 6) { //This is 20% more
random = randomGenerator.nextInt(5) + 1;
} else {
random = randomGenerator.nextInt(5) + 6;
}
或者,如果您总是有一个静态范围,您可以用数字填充数组,添加更多您想要的数字,并在数组的长度上选择一个随机数。
https://stackoverflow.com/questions/9947685
复制相似问题