Séquence aléatoire

wilvart Messages postés 47 Date d'inscription samedi 7 janvier 2006 Statut Membre Dernière intervention 13 décembre 2012 - 1 juin 2012 à 17:20
darkbatcher Messages postés 5 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 15 juin 2012 - 14 juin 2012 à 23:49
Salut tout le monde !

J'ai besoin de votre aide pour un problème avec les nombres aléatoires.

J'ai codé un algo simpliste (suffisant pour mon projet) de limite centrale. Dans celui-ci je génère 12 nombres aléatoires que j'additionne ect...

Mon problème est le suivant, lorsque j'exécute mon script (python swig), j'appel ma fonction C++ qui génère toujours la même séquence aléatoire.

En me renseignant, j'ai plus ou moins compris que le problème venait du fait que mon traitement se fait en moins d'une seconde, donc démarre de la même seed à chaque fois...

Je m'embrouille et je sais plus quoi faire, des idées?

PS: Mes include sont bon, etc...

...
res=0
ioMean=0
ioStddev=0
tmpM=0
i = 1

while i < 500:
seed = (i==1)
res = centralLimit.execute(175, 20, seed)
tmpM = ioMean
ioMean  += (res - tmpM) / i
ioStddev += (res - tmpM) * (res - ioMean)
i += 1

print ioMean
ioStddev = sqrt(ioStddev/(500-1))
print ioStddev
...



class CentralLimitAlgorithm : public AbstractAlgorithm
{
public:
static int execute (int mean, int stddev);

private:
};



int CentralLimitAlgorithm::execute (int mean, int stddev)
{

srand(time(NULL));


double res = 0;

for (int i=0; i<12; i++)
{
res += ((double) rand() / (RAND_MAX));
}

res -= 6;	
res /= 6;	
float sigma= res * stddev ;
res += mean + sigma;

return res;
}

3 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
1 juin 2012 à 18:22
Bonjour.

Oui c'est normal. Ton seed étant toujours le même (si tu exécute en moins d'une seconde), tu auras toujours la même séquence. Il te faut utiliser un autre algorithme de génération de nombre aléatoire.

Si tu as accès au C++0x, utilises un mersenne_twister.
(Ex: http://www.johndcook.com/test_TR1_random.html)

Ou alors cherche un générateur de nombre aléatoire sans seed sur le net.
(ex: http://www.bedaux.net/mtrand/)

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
wilvart Messages postés 47 Date d'inscription samedi 7 janvier 2006 Statut Membre Dernière intervention 13 décembre 2012
4 juin 2012 à 12:32
Merci de ton aide, mon boss m'a changé de mission mais je regarde tout ça dès que j'y reviens !
0
darkbatcher Messages postés 5 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 15 juin 2012
14 juin 2012 à 23:49
Hello !

Effectivement comme l'a dit CptPingu, c'est normal puisque tu démarre de la même seed.

Cela dit, il parait plus intelligent de n'appeler srand() qu'une seule fois, srand() est réservée à l'initialisation de la suite. Après rand utilise comme seed le dernier nombre aléatoire produit.

@+
0
Rejoignez-nous