Я создал среду моделирования, которая включает несколько стохастических частей. Я рисую числа из нормального, равномерного и логнормального распределения. В большинстве случаев это работает нормально, однако, когда я решаю выполнить 100 симуляций друг за другом, я получаю сообщение об ошибке: R6010 Abort() был вызван. В моей консоли я получаю сообщение об ошибке: неверный аргумент для mersenne_twister::seed. Однако я использую только стандартный генератор псевдослучайных чисел rand(). Ни в коем случае я не вызываю mersene_twister. Так что это, вероятно, метод из std::normal_distribution.
Кроме того, я не понимаю, почему мое начальное значение недействительно после X итераций, а не для первых X итераций?
У кого-нибудь есть опыт с этой ошибкой? Есть ли у кого-нибудь предложения, как это решить
P.S. srand(time(0)) вызывается только один раз, в начале файла main. При этом все случайные числа генерируются во втором классе «random_num». P.s. Я знаю, что это может быть не лучший способ генерировать случайные числа, однако этого достаточно для моей цели.
Запрошенный код для ГСЧ:
double random_num::uniform(int lb, int ub)//Generate uniformly distributed random numbers with lowerbound lb and upperbound ub
{
//srand(time(0));
double number;
number =((double) rand() / (RAND_MAX+1)) * (ub-lb+1) + lb;
return number;
}
double random_num::normal(double mean, double var) //Generate normally distributed random numbers with mean and variance
{
//srand(time(0));
default_random_engine generator (rand());
normal_distribution<double> distribution(mean, var);
return distribution(generator);
}
double random_num::lognormal(double mean, double var, double offset)
{
//srand(time(0));
random_num dummy;
double random;
random = exp(dummy.normal(mean,var))-offset; //Calculate the 3 parameter lognormal
return random;
}
default_random_engine
- это вихрь Мерсенна, и вы задаете егоrand()
здесь. Возможно, в какой-то момент rand() возвращает ноль, отсюда и ошибка. Можете ли вы проверить, прерывается лиdefault_random_engine generator (0);
таким же образом? - person lip   schedule 02.07.2013