我必须阅读标准库模块Random
和Random.State
上的OCaml手册页六次(可能更频繁),但是我不知道如何序列化PRNG的当前内部状态。
这是我到目前为止所学到的:
模块Random
和Random.State
都在从外部抽象/不透明的状态下运行。
两个模块都提供两个/三个初始化器,但是函数导出当前状态...我看不到它们:(
我该怎么办?请帮助!
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
模块将始终生成相同的数字。