Кажется, что можно использовать следующий код для получения случайных чисел из определенного нормального распределения:
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 пользователям для создания одного генератора случайных чисел для каждого распределения? Очевидно, я мог бы написать код для преобразования последовательности однородных случайных чисел в последовательность из произвольного распределения, но я ищу что-то простое и уже встроенное в библиотеку.
Заранее спасибо за помощь.