在 OCaml 的 StdLib 中序列化 "Module Random" 的当前状态

Serializing the current state of "Module Random" in OCaml's StdLib

我一定已经阅读了关于标准库模块 RandomRandom.State 的 OCaml 手册页六次(可能更频繁),但我不知道如何序列化PRNG 当前的内部状态。

这是我到目前为止学到的东西:

我能做什么?请帮忙!

您可以使用 Marshal 模块序列化(和反序列化)状态,例如,

let save_random_state out = 
   Marshal.to_channel out (Random.get_state ()) []

let load_random_state inp = 
   Random.set_state (Marshal.from_channel inp)

但是,如果您只想让 Random 模块生成相同的伪随机数序列,那么最好只使用相同的状态进行初始化,即使用相同的种子,例如,如果您将开始你的程序,

let () = Random.set_state (Random.State.make [|42|])

您将获得程序的确定性行为,因为 Random 模块将始终生成相同的数字。