我想通過使用不同的種子數重置隨機序列。當運行這個測試代碼:設置種子提升::隨機
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;
我得到以下輸出:
# 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
很顯然,我做的事情非常錯誤的。我怎樣才能克服這個問題?
我相信,補種正在對RNG一定的影響,因爲我得到的重複值-0.5887503675和0.2504171986。但不幸的是,根本不是我所期望的。 – 2011-01-24 14:00:29
很高興看到問題解決,但我可以問爲什麼boost :: variate_generator <>`在這種情況下生成`gener`的副本?我認爲OP在編寫`boost :: variate_generator>時傳遞了引用,我是否缺少任何東西?... –
Vokram
2012-08-17 06:49:28