Страницы

Поиск по вопросам

пятница, 3 января 2020 г.

Генерация случайного числа, с неравномерным распределнием

#javascript #алгоритм #случайные_числа


Как можно получить случайное число в диапазоне [0, 100], так чтобы значения в основном
получались рядом с центром диапазона?

То есть значения из диапазона [40, 60] должны получаться чаще чем остальные.

Равномерно распределённое число в этом диапазоне получаю так:

Math.random() * 100

    


Ответы

Ответ 1



Наиболее простой способ — сгенерировать два числа в диапазоне [0, 50] и сложить их Это даст распределение чисел с максимальной вероятностью получить число в центре, и постепенным уменьшением вероятности от центра к краям. Увеличивая число случайных чисел и уменьшая диапазон их генерации (соответственно с двух случайных чисел и диапазона [0, 50] до n случайных чисел и диапазона [0, 100/n]) можно ещё больше увеличить вероятность получения чисел рядом с центром по сравнению с числами возле края: // случайное число в диапазоне [0, maximum] // чем больше numberRandoms, тем с большей вероятностью получаются числа ближе к центру (числу maximum/2) function weightedRandom(maximum, numberRandoms) { let result = 0; for (let i = 0; i < numberRandoms; ++i) result += Math.random() * (maximum / numberRandoms); return result; } console.log(weightedRandom(100, 2)); График распределения получившихся чисел для разных n: Общий случай Имеется генератор равномерно распределённых случайных чисел на отрезке [0, 1] Хочется получить генератор случайных чисел из некоторого распределения Предполагаем, что распределение задано с помощью функции распределения. Тогда можно воспользоваться функцией квантилей, которая является обратной к функции распределения. А именно надо сгенерировать случайное число на отрезке [0, 1] и применить к нему функцию квантилей, получится случайное число, соответствующее имеющейся функции распределения. Хотя код получается очень простым, генерация некоторых распространённых распределений (например, нормального) таким способом не является простой, из-за сложности нахождения функции квантилей.

Комментариев нет:

Отправить комментарий