我想随机选择一个10%的时间是“1”,30%的时间是“2”,另外60%的时间是“3”。我想知道在Java中是否有一种方法可以让我根据这些概率随机抽样。
谢谢
发布于 2016-10-22 03:22:47
首先生成一个在0.0和1.0之间均匀分布的双精度数。然后将范围(0.0
在代码中:
double rand = rng.nextDouble();
if (rand < .1) {
return 1;
} else if (rand < .1 + .3) {
return 2;
} else {
return 3;
}
(其中rng是java.util.Random的实例。)
这种方法可以很容易地推广到任意一组目标概率。
发布于 2016-10-22 03:20:29
这种方法适用于每种语言。只需得到一个大的随机数,然后取一些数的mod,并检查范围。
Random rand = new Random();
int r = rand.nextInt(10000000);
int m = r % 10;
if (m < 1) return 1; // 10 %
else if (m < 4) return 2; // 30 %
else return 3; // 60 %发布于 2018-09-12 20:22:55
Java API的标准中没有任何方法。你可以编写你自己的算法,你可以尝试使用MockNeat.probabilities()方法,它完全按照你的要求来做。
例如:
String s = mockNeat.probabilites(String.class)
.add(0.1, "A") // 10% chance to pick "A"
.add(0.2, "B") // 20% chance to pick "B"
.add(0.5, "C") // 50% chance to pick "C"
.add(0.2, "D") // 20% chance to pick "D"
.val();免责声明:我是这个库的作者,所以当我推荐它时,我可能会有偏见。
https://stackoverflow.com/questions/40183948
复制相似问题