[英]C++ std::mt19937 and rng state save/load & portability
我希望能夠保存並加載RNG的狀態,這樣我就可以從給定的點(應用程序保存/快照)重現相同的隨機值。
我看到有一個運算符<<和>>重載,它似乎將字符串保存為一系列數字。
是的, operator<<
和operator>>
是導入或導出隨機數生成器狀態的唯一方法。 如果您願意,可以輕松地將文本表示轉換為二進制文件。
反序列化和序列化mt19937
狀態應該在實現之間可移植。 只要您確保流中充滿相同的語言環境,標准就可以很好地定義通過流操作符讀取和寫入引擎狀態的結果。
有關operator<<
和operator>>
的要求,請參見§26.5.1.5,關於mersenne_twister_engine的文本表示 ,請mersenne_twister_engine
,其中mt19937
是明確定義的typedef。
除了上一個答案:
通過op <<導出文本表示只有在使用相同的語言環境通過op >>回讀時才會保存正確的RNG狀態。 更改區域設置將導致問題
default_random_engine
的選擇是實現定義的。 它是一個typedef,但允許在不同平台上設置為不同的真實引擎(第26.5.5節)。 因此,使用op <<和op >>來保存/恢復狀態幾乎禁止使用默認引擎
雖然生成器的指定非常嚴格,但我不認為平台之間的分布必須相同。 在這里,保存狀態對可重復性可能沒什么幫助
我建議將這份文件放在手邊,以防萬一http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.