BOOST::RANDOM pas random du tout :( - C++ - Programmation
Marsh Posté le 24-01-2008 à 13:31:19
Il faut utiliser un random seed différent pour chaque instance du programme.
Marsh Posté le 24-01-2008 à 14:19:30
ah mince je pensai qu'il le faisait tout seul
Jvais voir si je trouve comment on seed avec boost ...
Merci
Marsh Posté le 24-01-2008 à 14:42:41
bon je sais pas si c'est l'idéal mais ca à l'air de marcher comme ca :
generator_coo.seed(time(NULL));
Si tu as mieux a proposer Elmoricq je suis tout ouï, sinon merci bien pour ton aide
Marsh Posté le 24-01-2008 à 14:56:44
C'est pas mal si tu ne lances pas plusieurs instances du programme dans la même seconde.
Marsh Posté le 19-11-2013 à 14:27:37
Je re-ouvre le sujet
Et si justement on lance plusieurs instances à la fois?
Voila mon code (rapide!):
Code :
|
J'ai l'impression que dans ce cas la,
Code :
|
n'est pas assez rapide (change toutes les secondes) ...
Une idée??
Merci, merci,
Nane
Marsh Posté le 20-11-2013 à 00:59:06
En C++11, on a maintenant <random>
Code :
|
A+,
Marsh Posté le 31-01-2014 à 10:33:20
Citation : Et si justement on lance plusieurs instances à la fois? |
Si tu lances les instances en parallèle avec MPI, tu peux multiplier le "time(NULL)" par le rang de ton process, genre
Code :
|
(où myrank est le rang de ton process, et 360000 est arbitraire...)
(mais bon tu ne les lances ptete pas avec MPI et j'arrive après la guerre)
Marsh Posté le 01-02-2014 à 14:24:07
L'algorithme qui calcule les nombres aléatoires n'est pas fait pour que tu changes de seed à chaque fois.
Si tu veux simuler 1000 nombres aléatoires et que tu les simules avec 1000 seeds différents, ils perdent leur caractère aléatoire.
Donc la bonne manière de faire à mon avis est de poser la seed de départ comme time() au démarrage de ton programme et de ne plus la changer par la suite
Marsh Posté le 24-01-2008 à 13:20:25
Salut à tous!
J'utilise la fonction random de la librairie boost pour générer des nombres aléatoires .... qui ne le sont pas
En fait chaque fois que je relance le programmes, tous ces nombres sont identiques ... Alors certes, le résultat final n'est pas faux, mais du coup je tombe toujours sur le même ce qui n'est pas très crédible pour quelque chose qui est supposé être aléatoire...
J'aimerai donc savoir si c'était un problème du à la fonction elle même ou bien est ce moi qui ne l'ai pas bien utilisé?
Je fais comme ca :
typedef boost::mt19937 base_generator_type;
base_generator_type generator_com_met;
typedef boost::uniform_int<> distribution_type_com_met;
typedef boost::variate_generator<base_generator_type&, distribution_type_com_met> gen_type_com_met;
...
gen_type_coo die_gen_coo(generator_coo, distribution_type_coo(0, coo.size()-1));
boost::generator_iterator<gen_type_coo> die_coo(&die_gen_coo);
variable=*die_coo++;
C'est faux ca???
Merci d'avance