java - 如何在 Java 中保持多次执行的概率

标签 java math random probability

首先,我不是最擅长数学的,所以请原谅任何与此相关的无知。我试图在多次执行中保持基于概率的随机性,但我失败了。我在 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/

相关文章:

java - J2ME 应用程序崩溃

java - 无法从分布式缓存 Hadoop 加载库

algorithm - 为图表的 Y 轴选择有吸引力的线性比例 - 更多

javascript - 围绕一个圆圈移动阴影

c++ - Mersenne Twister & 在 algorithm.h 中接收语义问题

java - 连接到 Amazon RDS Oracle 实例时如何处理 "Got minus one from a read call"错误

Eclipse:构建并符合不同的 JRE 版本

python - NumPy 数组操作数的负指数

c++ - 如何创建没有特定定义的随机分布? Uniform_int_distribution是否从其他类继承?

android - 访问问答游戏数据的最佳方式是什么