Как создать вектор variate_generator? - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь создать вектор форсированных генераторов случайных чисел.

Я попытался создать указатели на функции variate_generators, но без особой удачи.

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

using namespace std;

int main(int argc, const char *argv[])
{
    const double mean = 0.0;
    const double sigma = 1.0;

    // Setup aliases
    typedef boost::normal_distribution<> NormalDistribution;
    typedef boost::mt19937 RandomNumberGenerator;
    typedef boost::variate_generator<RandomNumberGenerator&, NormalDistribution> NormalGenerator;

    vector<NormalGenerator> gen_vec;

    RandomNumberGenerator rng;
    rng.seed(12345);

    NormalDistribution noise_distribution(mean, sigma);

    NormalGenerator rng_eng(rng, noise_distribution); // create RNG

    gen_vec.push_back(rng_eng);

    return 0;
}

Я надеялся использовать gen_vec, чтобы получить функцию, чтобы сгенерировать случайное число для данногоэлемент в векторе.Но когда я пытаюсь скомпилировать, он выдает эту ошибку.

/usr/include/boost/random/detail/pass_through_engine.hpp:27: error: non-static reference member \u2018main(int, const char**)::RandomNumberGenerator& boost::random::detail::pass_through_engine<main(int, const char**)::RandomNumberGenerator&>::_rng\u2019, can't use default assignment operator

Я предполагаю, что это потому, что я неправильно упаковываю variate_generators.

Это то, что я пытаюсь сделать правильногораздо меньше возможно?

1 Ответ

0 голосов
/ 13 февраля 2019

Сначала ваш пример кода компилируется без сообщений об ошибках (GCC 8.2.1, boost 1.69).

Но не делайте этого.Просто используйте boost :: variate_generator <> :: distribution (), чтобы установить новый дистрибутив.

NormalDistribution noise_distribution(mean, sigma);
NormalDistribution other_distribution(5.0, 2.0);
NormalGenerator rng_eng(rng, noise_distribution); // create RNG
// ... generate RNG using noise_distribution
rng_eng.distribution() = other_distribution;
// ... generate RNG using other_distribution
rng_eng.distribution() = noise_distribution;
// ... generate RNG using noise_distribution again
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...