Случайные числа из биномиального распределения - PullRequest
4 голосов
/ 08 мая 2010

Мне нужно быстро сгенерировать много случайных чисел из биномиальных распределений для совершенно разных размеров проб (большинство, однако, будет небольшим). Я надеялся, что мне не придется кодировать алгоритм вручную (см., Например, это обсуждение в ноябре ), потому что я начинающий программист и не люблю изобретать велосипеды. Похоже, что Boost не предоставляет генератор для биномиально распределенных переменных, но TR1 и GSL делают. Есть ли веская причина для выбора одного над другим, или лучше написать что-то, адаптированное к моей ситуации? Я не знаю, имеет ли это смысл, но я буду чередовать генерацию чисел из равномерных распределений и биномиальных распределений по всей программе, и я хотел бы, чтобы они использовали один и тот же начальный элемент и минимизировали накладные расходы. Я хотел бы несколько советов или примеров того, что я должен рассмотреть.

Ответы [ 2 ]

6 голосов
/ 08 мая 2010

Boost 1.43 поддерживает биномиальное распределение . Вы можете использовать boost::variate_generator для подключения вашего источника случайности к типу дистрибутива, из которого вы хотите сделать выборку.

Таким образом, ваш код может выглядеть примерно так (Отказ от ответственности: не тестировался!):

boost::mt19937 rng;                 // produces randomness out of thin air
                                    // see pseudo-random number generators
const int n = 20;
const double p = 0.5;
boost::binomial<> my_binomial(n,p);      // binomial distribution with n=20, p=0.5
                                         // see random number distributions
boost::variate_generator<boost::mt19937&, boost::binomial<> >
         next_value(rng, my_binomial);     // glues randomness with mapping
int x = next_value();                      // simulate flipping a fair coin 20 times
2 голосов
/ 08 мая 2010

Вы неправильно понимаете модель Boost - вы выбираете тип генератора случайных чисел, а затем распределение для распределения значений, по которым генерируется ГСЧ. В этом ответе есть очень простой пример , в котором используется равномерное распределение, но в других распределениях используется тот же базовый шаблон - генератор и распределение полностью отделены.

...