2015-10-19 1 views
2

Comment puis-je forcer le générateur de nombres aléatoires (si possible) avec une graine spécifique dans Scala Breeze, disons que le code scala suivant génère toujours la même séquence seq?Comment initialiser une graine aléatoire spécifique dans Scala Breeze, disons pour la distribution gaussienne?

import breeze.stats.distributions._   
    val g = new Gaussian(0, 1) 
    val seq = gau.sample(3) 

J'utilise scala pour construire un simulateur monte carlo, et je voudrais les résultats de simulation pour être reproductible (par paramétrage d'une graine aléatoire spécifique).

Répondre

1

Créez un RandBasis implicite et faites-le passer à l'endroit où vous créez des générateurs aléatoires. Je devrais probablement améliorer l'API pour cela, mais quelque chose comme:.

implicit val randBasis: RandBasis = new RandBasis(new ThreadLocalRandomGenerator(new MersenneTwister(seed))) 
+0

(que le filetage ne peut pas faire ce que vous voulez que chaque thread obtient la même graine Vous pouvez utiliser quelque chose qui génère des semences sur la base des semences de base. et un indicateur (stable) de l'identité du fil.) – dlwh

+0

Merci Dave pour les détails, en particulier les parties sur le commentaire de fil individuel que je vais aborder ensuite. –