【发布时间】:2019-03-30 13:58:09
【问题描述】:
我正在运行蒙特卡洛模拟,生成 100,000 条随机路径。我的问题是我想找到一种方法将这些相同的 100,000 条随机路径保留在其他变量的循环中。本质上,我希望我的随机数生成器在每次运行 100,000 次迭代时重置。目前,我的代码看起来像这样:
vector<double>Rand_Var(double time)
{
static mt19937 generator;
normal_distribution<>ND(0., 1.);
ND(generator);
double phi;
vector<double> rand(time + 1);
for (int i = 1; i <= time; i++)
{
phi = ND(generator);
rand[i] = phi;
}
return rand;
}
然后在main() 进行测试我有:
for (int l = 0; l < 5; l++)
{
for (int i = 0; i <= 1; i++)
{
vector<double>rand_val = Rand_Var(time_opt);
cout << rand_val[4] << endl;
}
}
我得到以下输出:
-0.214253
1.25608
-1.82735
0.919376
1.45366
-0.791957
0.530696
0.0751259
-0.559636
-0.709074
然而,我想得到的是:
-0.214253
1.25608
-0.214253
1.25608
-0.214253
1.25608
-0.214253
1.25608
-0.214253
1.25608
这可能吗?
【问题讨论】:
-
您是否尝试过重新播种到相同的种子? (即:将当前时间存储在一个变量中,然后每次您想要重置时都使用该时间重复调用
.seed()?) -
为什么每次使用 rand 列表时都要重建它。当我看到第一个函数时,我想,'好吧,他只生成一次随机数,昂贵但肯定能工作'。但你每次都重建
-
@scohe001 -- 将其作为答案。
-
@pm100 这看起来是个不错的答案。
-
您是否希望
Rand_Var始终为传入的相同time返回相同的向量?