Я написал симуляцию на C++, которая генерирует (1 000 000 )^2 чисел из определенного распределения вероятностей, а затем что-то с ними делает.. До сих пор я использовал экспоненциальное, нормальное, гамма, равномерное распределение и распределение Пуассона. Вот код одного из них:
#include
...main...
srand(time(NULL)) ;
seed = rand();
boost::random::mt19937 igen(seed) ;
boost::random::variate_generator >
norm_dist(igen, boost::random::normal_distribution<>(mu,sigma)) ;
Теперь мне нужно запустить его для бета-версии. Все дистрибутивы, которые я сделал до сих пор, заняли 10 -15 часов. Бета-дистрибутив отсутствует в пакете boost/random, поэтому мне пришлось использовать пакет boost/math/distributions. Я нашел эту страницу на StackOverflow , которая предложила решение. Вот это (копировать -вставить):
#include
using namespace boost::math;
double alpha, beta, randFromUnif;
//parameters and the random value on (0,1) you drew
beta_distribution<> dist(alpha, beta);
double randFromDist = quantile(dist, randFromUnif);
Я скопировал и все заработало. Оценки времени выполнения моей симуляции линейны и точно предсказуемы. Говорят, что это будет длиться 25 дней. Я вижу две возможности :1. предложенный метод уступает тому, который я использовал ранее для других дистрибутивов 2. В дистрибутиве Beta гораздо сложнее генерировать случайные числа из
. Имейте в виду, что у меня ниже минимального понимания кодирования на C++, поэтому вопросы, которые я задаю, могут быть глупыми. Я не могу ждать месяц, пока эта симуляция завершится, могу ли я что-нибудь сделать, чтобы улучшить ее? Возможно, использовать первоначальный метод, который я использовал, и изменить его для работы с пакетом boost/math/distributions? Я даже не знаю, возможно ли это.
Другая часть информации, которая может быть полезна, заключается в том, что параметры одинаковы для всех (1 000 000 )^2 чисел, которые мне нужно сгенерировать. Я говорю это потому, что в бета-дистрибутиве есть неприятный PDF-файл, и, возможно, знание того, что параметры фиксированы, можно как-то использовать для упрощения процесса? Просто случайное предположение.