Нужен массив случайных чисел с неравномерным распределением
Подскажите, пожалуйста, несложный способ сгенерировать массив случайных чисел 0-1 с неравномерным распределением (подсобрать их к началу, например) имея только генератор в диапазоне 0-1 и элементарные функции. Чем больше число, тем меньше должна быть вероятность его появления.
Хочу просимулировать время решения проблемы при обращении в техподдержку.
Посмотрел несколько вопросов, но путного ответа не нашёл.
Ответы (1 шт):
Для того, чтобы сгенерировать нестандартное распределение, во многих случаях можно использовать метод обратного преобразования Смирнова.
Для его использования подбираем несложную функцию, которая описывает желаемое распределение. Например, равномерное распределение - это прямая y=x (в этом случае ничего делать не нужно). Пусть мы хотим плавное распределение в диапазоне 0..1, при котором 50% чисел будут меньше 0.1, а 80% чисел будут меньше 0.5. Чуть поиграв, выберем функцию f=x^(1/3) (красная линия). Плотность распределения выше там, гдe функция быстрее растёт (значение производной больше) - в данном случае в начале диапазона.
Теперь найдём обратную функцию - F=x^3 - синяя линия. (если исходная была y=f(x), то выразим x через y, это не всегда возможно)
График обратной функции является отражением исходной отноительно прямой y=x. Это свойство можно использовать, если распределение задано не единой функцией, а, например, набором отрезков.
Теперь сгенерируем набор равномерно распределённых случайных чисел и применим к каждому результату обратную функцию. Получится набор с желаемым распределением. Пример гистограммы распределения для 3000 точек ниже, примерно 80% значений меньше 0.5 (2373 в данной генерации)
Как иллюстрация к сигмоиде из комментария к вопросу:


