Bonjour,
Je tombe actuellement sur un problème lié à un mauvais aléatoire. Pour faire simple, j’ai une marche brownienne auto-évitante, mais elle part toujours dans la même direction.
Jusqu’ici, j’initialisais une graine et un Mersenne et des distributions,
1 2 3 4 5 6 7 | mt19937_64 rng(graine); uniform_real_distribution<real> dist_pos(-1.0l, 1.0l); uniform_real_distribution<real> dist_p(0.l, 1.0l); const real x_rand {dist_pos(rng)},\ y_rand {dist_pos(rng)},\ z_rand {dist_pos(rng)}; |
La graine est donnée à la main (c’est un entier). En pratique, ce n’est pas bon. Ce que je ne comprends vraiment pas, c’est que ça part toujours en x et y négatif, et z nul (en moyenne) – j’aurai très vite vu une erreur si ça avait été x, y et z avec le même comportement, mais là… De plus, j’ai à peu près un hasard (au sens que je n’ai pas toujours les mêmes résultats), mais avec une direction privilégiée (probablement accentué par l’auto-évitement, mais elle existe et me gêne).
Si vous avez une idée, je suis preneur…
Édit : si je fais
1 2 3 | const real z_rand {dist_pos(rng)},\ y_rand {dist_pos(rng)},\ x_rand {dist_pos(rng)}; |
alors ça part en z et y négatifs, et x à peu près nul. Alors que c’est la même commande. Si c’est du bon aléatoire, il ne devrait pas y avoir de problème à utiliser la même graine ??? Je ne tire même pas quelques millions d’essais…