Это встроено во многие фреймворки и библиотеки.
Кроме того, как и в TokenMacGuy нормальный распределение характеризуется не интервалом, на котором оно определено, а двумя параметрами: средним μ и стандартным отклонением σ. с обоими этими параметрами. вы можете ограничить определенный квантиль распределения на определенный интервал, так что 95% всех точек попадают в этот интервал. Но полностью ограничить его любым интервалом, кроме (−∞, ∞), невозможно.
Существует несколько методов генерации значений с нормальным распределением из однородных случайных значений (которые генерируют большинство генераторов случайных или псевдослучайных чисел:
Преобразование Бокса-Мюллера, вероятно, является самым простым, хотя и не совсем быстрым для вычисления. В зависимости от количества цифр, которое вам нужно, его должно быть достаточно, и его, безусловно, очень легко написать.
Другой вариант - полярный метод Марсаглии, который обычно быстрее 1.
Третий метод - это алгоритм зиккурата, который значительно быстрее вычисляется, но гораздо сложнее программировать. Однако для приложений, которые действительно используют много случайных чисел, это может быть лучшим выбором.
Однако в качестве общего совета: не пишите это самостоятельно, если у вас есть доступ к библиотеке, которая уже генерирует для вас нормально распределенные случайные числа.
Для искажения вашего распределения я бы просто использовал обычное нормальное распределение, выбирая μ и σ соответственно для одной стороны вашей кривой, а затем определяя, на какой стороне желаемого значения точка упала, растягивая ее соответствующим образом, чтобы соответствовать желаемому распределению.
Для генерации только целых чисел я предлагаю вам просто округлить до ближайшего целого числа, когда случайное число попадает в желаемый интервал, и отклонить его, если это не так (тогда рисование нового случайного числа). Таким образом, вы не будете искусственно искажать распределение (например, если бы вы ограничивали значения 4 или 10 соответственно).
1 При тестировании с намеренно плохими генераторами случайных чисел (да, хуже, чем RANDU) я заметил, что полярный метод приводит к бесконечному циклу, отклоняющему каждую выборку. Однако этого не произойдет со случайными числами, которые соответствуют их обычным статистическим ожиданиям.
person
Joey
schedule
29.07.2009