Я изо всех сил пытаюсь рассчитать предполагаемый шанс пользователя получить предмет. У него есть 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), они сильно отличаются от результатов итерации. Проблема с итерационным решением состоит в том, что когда я увеличиваю один из шансов, результат на самом деле будет ниже из-за неудачи в расчетных шансах. Я мог бы увеличить коррекцию, чтобы решить эту проблему, но при повторном вычислении тех же значений вероятность будет другой, и это также окажет значительное влияние на производительность.
Знаете ли вы какой-нибудь способ рассчитать этот шанс с низким влиянием на производительность и хорошей оценкой, которая остается прежней после его повторного расчета?