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

09 Jan 2014

Иногда бывает ну очень нужно сгенерировать какое-то число с вероятностью его появления, к примеру, 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

Теги: математика

Категории: HowTo JFF