Есть ли способ в Java для генерации случайных чисел после фиксированного среднего и стандартного отклонения? - PullRequest
0 голосов
/ 18 октября 2019

Вопрос

Я знаю, как генерировать случайные числа с фиксированным средним и стандартным отклонением.

Я бы также хотел, чтобы эти значения были ограничены диапазоном (я понимаю, чтоэто означает, что результаты не будут истинным распределением Гаусса в результате, но будут ограниченным распределением Гаусса)

Context

Более широкий вопрос, на который я пытаюсь ответить,

Предположим, у вас есть черный ящик, который раздает обезьяну каждые 10 секунд, высота обезьяны составляет от 24 до 36 дюймов. Высота обезьян, сгенерированных за полчаса, соответствует нормальному распределению со средним значением 30,5 дюймов и стандартным отклонением 2,5. В то время как в комнате есть еще одна коробка, которая заставляет обезьяну исчезать, если ее высота ниже 28 дюймов, это происходит каждые 20 секунд. Напишите программу для подсчета количества обезьян, оставшихся в комнате после n дней (n - это ввод пользователя). Ради логики предположим, что места достаточно для размещения бесконечного числа обезьян, и у них есть еда.

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Метод nextGaussian () возвращает случайные числа со средним значением 0 и стандартным отклонением 1.

Это означает, что числа, возвращаемые функцией nextGaussian (), будут стремиться к «кластеризации» около 0, и это (приблизительно) 70% значений будут находиться в диапазоне от -1 до 1. На основе значений, возвращаемых nextGaussian (), вы можете масштабировать и сдвигать их, чтобы получить другие нормальные распределения:

  • для изменения(среднее) распределения, добавьте требуемое значение;

  • , чтобы изменить стандартное отклонение, умножьте значение.

Примеры:для генерации значений со средним значением 500 и стандартным отклонением 100:

double val = r.nextGaussian() * 100 + 500;

для генерации значений со средним значением 30,5 и стандартным отклонением 2,5:

double val = r.nextGaussian() * 2.5 + 30.5;

с этим70% значений будут находиться в диапазоне от 28 до 33. Поскольку 99,7% значений находятся в диапазоне 3 сигм, высота обезьян составляет от 24 до 36.

0 голосов
/ 18 октября 2019

Как VGR упомянул в их комментарии, вы можете использовать Random.nextGaussian () , чтобы сгенерировать случайное число, распределенное по Гауссу, со средним значением нуля и стандартным отклонением 1. Вы можете повлиятьсреднее значение, добавив к этому значению и повлиять на стандартное отклонение путем умножения. Таким образом, вместе вы можете генерировать случайные числа с вашими выведенными свойствамиВам понадобится

desiredMean + desiredStandardDeviation * Random.nextGaussian()

. Вы заявили о дополнительном требовании, что значения должны находиться в пределах диапазона, вы можете легко достичь этого, просто перекатив новое значение, пока не получите его в этом диапазоне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...