Comment définir des semences pour le générateur de nombres pseudo aléatoires
J'ai besoin d'effectuer quelques tests où j'utilise randn
pseudo générateur de nombre aléatoire. Comment puis-je définir la semence sur mon propre, de sorte que chaque fois que je lance ce test, je vais obtenir les mêmes résultats? (ouais, je sais, c'est un peu bizarre, mais c'est ça le problème).
J'ai trouvé la RANDSTREAM
objet qui a le seed
de la propriété, mais il est en lecture seule. Est-il possible de l'utiliser pour l'amorçage de la génératrice?
- Non, ce n'est pas bizarre. C'est en fait assez important pour les tests et le débogage.
- ouais, surtout quand il s'agit de la répétabilité des résultats...
- Notez que de faire l'inverse, c'est à dire pour éviter de répétabilité à chaque fois que nous le redémarrage de Matlab, la commande est
rng('shuffle')
, qui définit la valeur de départ en fonction de l'heure actuelle.
Vous devez vous connecter pour publier un commentaire.
La vieille façon de faire:
La nouvelle façon:
Notez que si vous utilisez la nouvelle façon,
rand
etrandn
partager le même flux donc, si vous appelez à la fois, vous pouvez trouver différents nombres générés par rapport à l'ancienne méthode (qui a séparé les générateurs). L'ancienne méthode est toujours pris en charge pour cette raison (et l'héritage de code).Voir http://www.mathworks.com/help/techdoc/math/bsn94u0-1.html pour plus d'info.
rng
fonction.RandStream.setGlobalStream
au lieu deRandStream.setDefaultStream
. Apparemment, il va remplacer cette fonction dans les futures versions.Vous pouvez les appeler
rng(mySeed)
pour définir la valeur initiale pour le mondial de flux (testé dans Matlab R2011b). Cela affecte larand
,randn
, etrandi
fonctions.La même page que James lié à des listes de ce que l'alternative recommandée à diverses méthodes (voir la cellule du milieu de la colonne de droite du tableau).
Voici un exemple de code:
Sa sortie est:
Quand vous voulez juste pour réinitialiser le générateur de nombres aléatoires pour certains connus de l'état, il suffit d'utiliser: