我想每次根据概率创建一些数字。
示例:
数字来自:1-5
数字1有可能被创建0.55,
数字2有可能被0.25,
数字3有可能被0.10,
第4号的概率为0.05,
第5号的概率为0.05
在这种情况下,它通常必须创建数字1,通常为2,有时为3,很少为4或5
所以,“方法”:create_the_numbers(int ending_number)
应该像这个pseado-code:
public int create_the_numbers(int ending_number){
return probability(Random.getInt(ending_number))
}
这里有一个关于C#的问题:Probability Random Number Generator
答案 0 :(得分:0)
我相信你在问如何加权概率。一种简单的方法如下:
int getWeightedRandomInt(double... weights) {
final Random random = new Random();
double val = random.nextDouble();
for (int i = 0; i < weights.length; i++) {
if (val < weights[i])
return i;
}
throw new IllegalArgumentException("badly formed weights");
}
通过传递已排序的累积权重来使用它。在您的示例中:
getWeightedRandomInt(0.55, 0.8, 0.9, 0.95, 1.0);
如果您使用的是Java 8:
Arrays.stream(weights).filter(w -> val < w)
.findFirst().orElseThrow(IllegalArgumentException::new);
答案 1 :(得分:0)
以下方法将执行此操作:
private static int get() {
double d = Math.random();
if (d < 0.55) return 1; // 0.55
if (d < 0.80) return 2; // 0.25
if (d < 0.90) return 3; // 0.10
if (d < 0.95) return 4; // 0.05
return 5; // 0.05
}
使用Math.random()
很简单,但有其局限性。阅读javadoc。或者,使用Random
。