J'utilise une implémentation en C# de Mersenne Twister que j'ai téléchargée depuis CenterSpace. Je pose deux problèmes:Mersenne Twister: ensemencement et visualisation
- Peu importe comment je sème l'algorithme, il ne passe pas DieHard tests, et je veux dire que je reçois beaucoup de 1 et de 0 pour valeur p. Aussi mon KStest sur 269 p-values est 0. Eh bien, je ne peux pas tout à fait interpréter p-value, mais je pense que quelques 1 et 0 dans le résultat sont de mauvaises nouvelles.
- On m'a demandé de montrer visuellement le caractère aléatoire des nombres. Donc, je trace les chiffres comme ils sont générés, et cela ne semble pas aléatoire du tout. Voici deux captures d'écran du résultat after a few seconds et a few seconds later. Comme vous pouvez le voir sur la deuxième capture d'écran, les chiffres tombent sur des lignes parallèles. J'ai essayé différents algorithmes pour mapper des nombres aux points. Ils se traduisent tous par des lignes parallèles, mais avec des angles différents! Voici comment j'ai mappé des nombres à des points pour ces captures d'écran:
new Point(number % _canvasWidth, number % _canvasHeight)
. Comme vous pouvez le deviner, le résultat visuel dépend de la largeur et de la hauteur du formulaire, et this is un résultat désastreux.
Voici quelques façons que j'ai essayé de semer l'algorithme:
- entrée de l'utilisateur. J'entre des nombres pour ensemencer l'algorithme en tant que tableau int.
- Numéros aléatoires générés par l'algorithme lui-même !!
- Un tableau de
new Guid().GetHashCode()
Qu'est-ce que je manque ici? Comment devrais-je semer l'algorithme? Comment puis-je faire passer le DieHard?
Merci pour la réponse fbrereto. Votre observation sur la largeur et la hauteur égales est très vraie. Je ne sais pas comment j'ai raté cela :) Voici comment j'ai commencé le mappage: var x = (int) (nombre & 0xffff0000); var y = nombre & 0x0000ffff; x = x% _canvasWidth; y = y% _canvasHeight; Ceci est en quelque sorte similaire à votre solution; Cependant, je pense que la fonction mod fausse toujours le résultat. FYI cette cartographie a provoqué des lignes parallèles verticales! –
vous devez décaler vos valeurs x; après le masque de bits, ils se trouveront dans les deux octets supérieurs de votre sortie numérique, qui seront tous de gros chiffres qui pourraient fausser votre mod. – fbrereto
mod montrera probablement toujours un biais lorsque vous tracez les résultats à l'écran. Avec ce que vous essayez de faire, je recommande de ne pas dessiner de grandes coordonnées (celles en dehors de la fenêtre) ou une interpolation linéaire. – fbrereto