HowTo, JFF

Числа с произвольным законом распределения

Иногда бывает ну очень нужно сгенерировать какое-то число с вероятностью его появления, к примеру, 0.1. Или любым другим законом распределения.

Как поступать в таком случае?

Нам известно, что генераторы случайных и псевдослучайных чисел плются значениями, которые распределены по случайному закону. Но нам-то что до этого?

Нам нужно генерировать X с указанной вероятностью (0.1)

Вспоминаем, что сумма вероятностей всех событий — 1. Отлично. Теперь нам нужно задать вектор значений (среди которых будет и X), где сумма вероятностей появления элементов равна 1.

И дальше нам нужно отобразить этот вектор на некоторый интервал [1, 10^k].

Посмотрим на примере, зачем это надо.

Если вероятность появления числа X := 0.1, а Y := 0.9 (сумма = 1), то нам нужно два вектора значений: от 1 до 1 и от 2 до 10.

Зачем? Мы будем генерировать числа с диапазоне от 1 до 10. С вероятностью 0,1 числа попадут в интервал от 1 до 1🙂 и с вероятностью 0,9 — от 2 до 10.

С таким де успехом мы можем взять интервалы [1, 10] и [11, 100] и генерировать числа в диапазоне 1:100. Главное, чтобы максимальное число равнялось 10^k и k было больше или равно максимальному количеству десятичных цифр в вероятностях.

Пример кода на python

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s