如何获得三个变量的确切机会?

时间:2018-09-10 14:38:09

标签: java math distribution

我正在努力计算用户获得商品的估计机会。他有15次尝试(可能有所不同),有机会进入一组项目,然后有机会获得确切的项目。我可以看到两种方法,但没有一种是完美的。请看一下:

    int userTries = 15;//Variable holding number of how many tries user has to get an item
    double groupChance = 17;//Chance for user to get any item from the group
    double itemChance = 80;//Chance for user to get specific item from the group

    double simpleChance = groupChance * itemChance * userTries / 100.0;

    int correctionTries = 10000;
    int totalPassed = 0;
    for (int i = 0;i < correctionTries;i++)
    {
        for (int x = 0;x < userTries;x++)
        {
            //Rnd.chance is checking if input chance was rolled, if chance is 17 then this method will return true in 17 tries out of 100
            if (Rnd.chance(groupChance))
                if (Rnd.chance(itemChance))
                {
                    totalPassed++;
                    break;
                }
        }
    }
    double iterationChance = (double) totalPassed / (double) correctionTries * 100.0;
    System.out.println("simple=" + simpleChance + " iteration=" + iterationChance);

当groupChance和itemChance较低时(如1和1),则simpleChance会给出非常好的结果,但是当机会较高时(如17和80),则它们与迭代结果相差很大。迭代解决方案的问题在于,当我增加机会之一时,由于计算的机会运气不好,结果实际上会更低。我可以增加CorrectionTries来解决该问题,但是再次计算相同的值时,机会会有所不同,并且也会对性能产生重大影响。

您是否知道任何方法来计算机会,但对性能的影响较小,并且可以在再次计算后保持良好的估计不变?

1 个答案:

答案 0 :(得分:2)

假设groupChanceitemChance是进入特定人群并获得 特定物品的概率(以百分比为单位)在组中。

如果是这样,那么获得这个特定项目的概率为groupChance/100 * itemChance/100 = 0.17*0.8 = 0.136 = 13.6%

不知道simpleChance应该是什么=>才能在15次尝试后至少获得一次 特定项目?尝试15次后恰好一次?连续获得15次?

  • 如果您想连续获得15次,那么机会是(groupChance/100 * itemChance/100 ) ^ userTries = 0.000000000000101
  • 如果您想在尝试15次后至少获得一次,则机会为1 - ( 1 - groupChance/100 * itemChance/100 ) ^ userTries = 0.88839