我创建了一个模拟环境,其中涉及多个随机部分。我从正态分布、均匀分布和对数正态分布中抽取数字。在大多数情况下,这运行良好,但是,当我决定一个接一个地进行 100 次模拟时,我得到了错误:R6010 Abort() 已被调用。在我的控制台中,我收到错误:mersenne_twister::seed 的参数无效。但是,我只使用标准的伪随机数生成器 rand()。我绝不会打电话给 mersene_twister。所以这可能是来自 std::normal_distribution 的一种方法。
此外,我不播种为什么我的种子值在 X 次迭代后无效,而不是第一次 X 次迭代?
有没有人有这个错误的经验?有没有人有任何建议如何解决这个问题
ps srand(time(0)) 仅在 main 开始时被调用一次。而所有随机数都是在第二类“random_num”中生成的。Pss 我知道这可能不是生成随机数的最佳方式,但它足以满足我的目的。
为 RNG 请求的代码:
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;
}