Как изменить начальное число в гауссовском распределении (ускорение)

Я нашел этот пример в Как использовать классы нормального распределения boost?

#include <boost/random.hpp>
#include <boost/random/normal_distribution.hpp>

int main() {
    boost::mt19937 rng; // I don't seed it on purpouse (it's not relevant)

    boost::normal_distribution<> nd(0.0, 1.0);

    boost::variate_generator<boost::mt19937&, 
                        boost::normal_distribution<> > var_nor(rng, nd);

    int i = 0; 
    for (; i < 10; ++i) {
        double d = var_nor();
        std::cout << d << std::endl;
    } 
}

Мне было интересно, что я могу добавить в код, чтобы каждый раз генерировать разные случайные числа. Я использую число под названием created d в цикле for, но каждый раз, когда я запускаю программу, я всегда получаю одни и те же числа. Спасибо!!!!


person J.Doe    schedule 04.02.2018    source источник
comment
Почему бы вам не заполнить движок перед тем, как передать его конструктору variate_generator?   -  person Galik    schedule 04.02.2018
comment
Эй, друг, ты имеешь в виду: boost :: mt19937 rng; ? Я должен передать аргумент rng? Это то, что я хотел бы открыть ...   -  person J.Doe    schedule 04.02.2018


Ответы (2)


Я решил таким образом, и, похоже, он работает:

Я добавил библиотеку:

      #include<time.h>

и изменяя только это:

    boost::mt19937 rng(time(0));

таким образом, я предполагаю, что семя - это время компьютера.

person J.Doe    schedule 04.02.2018

Вы засеваете двигатель. См., Например, Этот ответ включает в себя множество разных дистрибутивов: Как использовать случайное ускорение

person sehe    schedule 04.02.2018