ant*_*rts 9 c++ random boost seed
我想通过使用不同的种子数重置随机序列.运行此测试代码时:
boost::mt19937 gener(1);
boost::normal_distribution<> normal(0,1);
boost::variate_generator<boost::mt19937&,boost::normal_distribution<> > rng(gener, normal);
cout << rng() << endl;
cout << rng() << endl;
cout << rng() << endl;
gener.seed(2);
cout << rng() << endl;
cout << rng() << endl;
gener.seed(1);
cout << rng() << endl;
gener.seed(2);
cout << rng() << endl;
gener.seed(3);
cout << rng() << endl;
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
# seed(1) via constructor
-2.971829031
1.706951063
-0.430498971
# seed(2)
-2.282022417
-0.5887503675
# seed(1)
0.2504171986
# seed(2)
-0.5887503675
# seed(3)
0.2504171986
Run Code Online (Sandbox Code Playgroud)
显然我做错了.我怎么能克服这个问题?
ant*_*rts 14
跟随Jim,Alan和Igor的建议对代码进行了一些更改:rng.engine().seed()而不是在gener.seed()调用rng.distribution().reset()之后调用rng.engine().seed()它,它就像一个魅力.
非常感谢!
你应该在调用gener.seed()之后调用normal.reset().这是为了确保法线的输出不依赖于gener的任何先前输出.
(分发可能会缓存一些您需要清除的状态.)
| 归档时间: |
|
| 查看次数: |
12439 次 |
| 最近记录: |