Кажется, что для получения случайных чисел из определенного нормального распределения можно использовать следующий код:
float mean = 0, variance = 1;
boost::mt19937 randgen(static_cast<unsigned int>(std::time(0)));
boost::normal_distribution<float> noise(mean, variance);
variate_generator<mt19937, normal_distribution<float> > nD(randgen, noise);
float random = nD();
Это прекрасно работает, однако, я хотел бы иметь возможность рисовать числа из нескольких распределений, т.е. можно было бы подумать примерно так:
float mean1 = 0, variance1 = 1, mean2 = 10, variance2 = 0.25;
boost::mt19937 randgen(static_cast<unsigned int>(std::time(0)));
boost::normal_distribution<float> noise1(mean1, variance1);
boost::normal_distribution<float> noise2(mean2, variance2);
variate_generator<mt19937, normal_distribution<float> > nD(randgen, noise1);
variate_generator<mt19937, normal_distribution<float> > nC(randgen, noise2);
float random1 = nD();
float random2 = nC();
Однако проблема заключается в том, что nD() и nC() генерируют аналогичные последовательности чисел. Я выдвигаю гипотезу, потому что конструктор для variate_generator, похоже, делает копию randgen, а не использует его явно. Таким образом, создается одна и та же псевдо-случайная последовательность и просто проталкивается через различные преобразования (из-за разных параметров распределений).
Кто-нибудь знает, есть ли способ, в Boost, создать единый генератор случайных чисел и использовать его для нескольких распределений? В качестве альтернативы, позволяет ли создать произвольную библиотеку Boost пользователей создавать один генератор случайных чисел для каждого дистрибутива? Очевидно, я мог написать код, чтобы преобразовать последовательность равномерных случайных чисел в последовательность из произвольного распределения, но я ищу что-то простое и уже встроенное в библиотеку.
Заранее благодарим за помощь.