首先,我不是最擅长数学的,所以请原谅任何与此相关的无知。我试图在多次执行中保持基于概率的随机性,但我失败了。我在 JSONObject 中有这个输入
{
"option1": 25,
"option2":25,
"option3" :10,
"option4" :40
}
这是我的函数,它根据分配的概率从上面的 JSONObject 中选择一个值:
public static String selectRandomoptions(JSONObject options) {
String selectedOption = null;
if (options != null) {
int maxChance = 0;
for (String option : options.keySet()) {
maxChance += options.getInt(option);
}
if (maxChance < 100) {
maxChance = 100;
}
Random r = new Random();
Integer randomValue = r.nextInt(maxChance);
int chance = 0;
for (String option : options.keySet()) {
chance += options.getInt(option);
if (chance >= randomValue) {
selectedOption = options.toLowerCase();
break;
}
}
}
}
如果我在单次执行中调用它 x 次(测试 100 多次调用),该函数的行为在合理的误差范围内,问题是我每小时运行一次以在事件驱动中生成一些示例数据应用程序来验证我们的分析过程/数据,但我们需要它在某种程度上是可预测的,至少在合理的范围内?
有人知道我该如何处理吗?我宁愿不必坚持任何事情,但如果它有意义或减少复杂性/时间,我不反对。
最佳答案
Random.nextInt()
返回的值是均匀分布的,所以这应该不是问题。
如果您想使随机结果可重复,那么您可能需要使用 Random
with seed .
关于java - 如何在 Java 中保持多次执行的概率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44271753/