【发布时间】:2017-01-20 16:15:00
【问题描述】:
我有以下代码:
#include <iostream>
#include <vector>
#include <random>
// #include "halton.cpp"
#include "sobol.cpp"
int main()
{
int n=5000;
double* thisV;
thisV = i8_sobol_generate(1,n,0);
std::mt19937 generator;
std::normal_distribution<double> distribution(0,1.0);
for (int i=0; i<n; i++) {
generator.seed(thisV[i]);
std::cout << distribution(generator) << std::endl;
}
return 0;
}
我在site (Sobol) 上使用以下代码生成了一个低差异序列。 我用它来播种生成器。但是输出有点奇怪。有人可以帮我吗?
输出:
1.12279
0.302805
1.12279
0.302805
1.12279
0.302805
1.12279
0.302805
1.12279
0.302805
1.12279
0.302805
1.12279
0.302805
1.12279
0.302805
...
【问题讨论】:
-
thisV[i]中的值是否正确? -
我没有安装你的库,但我可以告诉你,每次迭代都为生成器播种可能不是你想要做的。播种一次,让它运行它的过程。如果您坚持使用自己的生成器,请不要费心通过
std::mt19937并实现自己的生成器类。 -
@KamilKoczurek:是的,thisV 有一个正确的 sobol 序列。
-
@FrançoisAndrieux:我认为你给了我正确的方法。是否有一些关于实现自己的生成器类的信息?
-
事实证明,您无法使用 C++ 分布的正常(有效)方式从 Sobol 序列生成自定义分布。您必须使用其他更原始的方法。在这里查看我的答案stats.stackexchange.com/a/222538/122461
标签: c++ sequence normal-distribution seeding