首先,我在这个问题上并不关心seed
。
我的问题是,每次我想要在我的职能部门重新开始时,是否应该致电Random.self_init
?
let shuffle l =
Random.self_init ();
let tagl = List.map (fun x -> (Random.bits (), x)) l in
List.map (fun x -> snd x) (List.sort compare tagl);;
例如,在上面的代码中,Random.self_init ()
是否必要?
答案 0 :(得分:6)
每次想要洗牌时都要把它称为熵。最好在程序开始时调用一次。但是如果你想为不同的程序运行获得不同的shuffle,你需要在某个时刻初始化随机生成器。对于某些应用程序,您需要使用自己选择的特定值进行初始化(例如,如果您希望以后能够重现结果)。为此,您可以使用Random.init
或Random.full_init
。
答案 1 :(得分:0)
(* Initialize Random so it won't use the default seed *)
let _ = Random.self_init()
我会在我的类型定义之后和我的函数之前在我使用随机的每个.ml文件中包含这一行,这样每次运行程序时我都会得到不同的随机数。
对于大多数程序,我认为Random.self_init比Random.init和Random.full_init更可取,但正如Jeffrey Scofield所说,如果你想重现你的结果,请使用它们。