IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Liste de graines pour g�n�rateur Random


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    F�vrier 2014
    Messages
    24
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : F�vrier 2014
    Messages : 24
    Par d�faut Liste de graines pour g�n�rateur Random
    Bonjour, je ne suis pas sur que ce soit la bonne section du forum mais je n'ai pas trouv� mieux. La question est commune au c ou c++ et je pense � tout les g�n�rateurs pseudo al�atoire.
    Pour ma part je code sous linux en c++ et utilise le PRNG standard de stdlib.

    Voila mon probl�me : afin de tester mon programme je lance une s�rie de ~500 ex�cutions ind�pendantes de mon programme. Dans mon programme j'utilise la fonction rand(), pr�alablement initialis� via srand() et l'heure du syst�me, je n'ai donc pas de probl�me ici.
    Mon probl�me est que, si je fait une modification du programme et que je relance une nouvelle s�rie de 500 ex�cutions j'aimerais utiliser LES M�MES graines que la premi�re s�rie, et dans le m�me ordre.

    Je cherche donc une liste de ~500 graines pour en donner une � chaque ex�cution du programme, ma question est comment constituer cette liste ?
    G�n�rer ma liste d'une quelconque mani�re (un premier tirage random, noter l'heure lors de l�ex�cution de la toute premi�re s�rie, ect ...) afin de la stocker quelque part et l'utiliser ensuite �tait ma premi�re id��, mais cette m�thode serait complexe � mettre en oeuvre dans mon cas.

    Il me faudrait donc une mani�re de d�terminer la graine en me basant seulement sur le nombre de lancement du programme. (Par exemple quand je vais lancer pour la 5� fois mon programme au cours d'une m�me s�rie il sait que c'est le 5�). Est ce que le fait de prendre juste ce num�ro et donc d'avoir des graines 1,2,3.....,500 suffit pour avoir une bonne r�partition des nombre al�atoires ou est ce que c'est une mauvaise id�e ? Comment proc�der sinon ?

    Merci d'avance

  2. #2
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    Tu peux avoir un ficheir contenant une graine par ligne, et indiquer au programme ce fichier.
    Tu peux carr�ment donner la graine en argument.

    On est bien d'accord que la graine, c'est la valeur donn�e en argument � srand(), donc time().

    Sache cependant qu'avec le C++, on a (maintenant) [c]#include <random>[c], qu'on trouvais avant dans Boost.
    Tu trouveras sur cppreference toute la documentation, et des exemples.

  3. #3
    Membre Expert
    Homme Profil pro
    �tudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par d�faut
    Hello,

    Citation Envoy� par Blangel Voir le message
    Voila mon probl�me : afin de tester mon programme je lance une s�rie de ~500 ex�cutions ind�pendantes de mon programme. Dans mon programme j'utilise la fonction rand(), pr�alablement initialis� via srand() et l'heure du syst�me, je n'ai donc pas de probl�me ici.
    Mon probl�me est que, si je fait une modification du programme et que je relance une nouvelle s�rie de 500 ex�cutions j'aimerais utiliser LES M�MES graines que la premi�re s�rie, et dans le m�me ordre.
    Dans ce cas utilises le m�me seed � chaque fois : pas d'appel � srand, ou, utilises un seed constant.

    En C
    Code C : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <stdlib.h>
     
    srand(0); // seed == 0 -> tu auras toujours la même suite de nombre aléatoire
    // le seed peut éventuellement venir de la ligne de commande : srand(atoi(argv[1]))
    // avec 500 appels du type :
    // prog.exe 0
    // prog.exe 1
    // ...
     
    int i = rand();

    C++
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <random>
     
    std::minstd_rand gen(0); // ou autre ex: std::mt19937; seed == 0, seed fixé -> même suite de nombre généré.
    // de même le seed peut venir de la ligne de commande
    std::uniform_int_distribution<int> dist(0, 50); // générer des nombres dans intervalle [0; 50]
    auto rnd = std::bind(dist, gen);
     
    int i = rnd();

  4. #4
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    F�vrier 2014
    Messages
    24
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : F�vrier 2014
    Messages : 24
    Par d�faut
    Bonjour et merci de vos r�ponses :

    Citation Envoy� par Iradrille Voir le message

    Dans ce cas utilises le m�me seed � chaque fois : pas d'appel � srand, ou, utilises un seed constant.
    Non, pour une s�rie de 500 ex�cution du programme, il me faut une graine diff�rente � chaque ex�cution. Mais je veux pouvoir lancer une autre s�rie de 500 ex�cutions avec les m�mes seed que la premiere s�rie.


    Tu peux avoir un ficheir contenant une graine par ligne, et indiquer au programme ce fichier.
    Tu peux carr�ment donner la graine en argument.

    On est bien d'accord que la graine, c'est la valeur donn�e en argument � srand(), donc time().

    Sache cependant qu'avec le C++, on a (maintenant) [c]#include <random>[c], qu'on trouvais avant dans Boost.
    Tu trouveras sur cppreference toute la documentation, et des exemples.
    Oui, je suis bien d'accord que ce serait la mani�re la plus simple, le probl�me c'est que je n'ai pas l'acc�s en �criture � tout le code (notamment aux appel � rand()) et que je ne peux pas rajouter d'arguments, le chemin vers le fichier serait donc forc�ment cod� en dur et j'aimerais �viter �a ...

    Est ce que vous pensez que c'est une mauvaise id�e d'utiliser simplement la s�quence 1,2,... 500 ?

  5. #5
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 505
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 505
    Par d�faut
    Est ce que vous pensez que c'est une mauvaise id�e d'utiliser simplement la s�quence 1,2,... 500 ?
    Oui d'un point de vue s�curitaire et statistique, mais sinon, non.

  6. #6
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    F�vrier 2014
    Messages
    24
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : F�vrier 2014
    Messages : 24
    Par d�faut
    Citation Envoy� par bacelar Voir le message
    Oui d'un point de vue s�curitaire et statistique, mais sinon, non.

    S�curitaire je m'en fiche, par contre statistique c'est un probl�me. Le but de lancer un s�quence de 500 ex�cution est justement d'avoir assez d'�chantillons pour faire des statistiques dessus ... vu qu'il s'agit d'un benchmark d'un algorithme probabiliste.

  7. #7
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 505
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 505
    Par d�faut
    On va faire du m�ta.
    Plut�t que d'utiliser la s�quence 0,1,2,3,... comme seed, vous pouvez vous en servir comme le nombre de fois on doit appeler "rand" pour trouver la nouvelle graine.

    Quand 0 on fait :
    std::minstd_rand gen(0)
    ...
    int i = rnd();


    Quand 1 on fait :
    std::minstd_rand gen(0)
    ...
    int i = rnd();
    std::minstd_rand gen_finale(i)


    Quand 2 on fait :
    std::minstd_rand gen(0)
    ...
    rnd();
    int i = rnd();
    std::minstd_rand gen_finale(i)


    Quand N on fait :
    std::minstd_rand gen(0)
    ...
    for(int seq = 0;seq<N-1;seq++){ rnd();}
    int i = rnd();
    std::minstd_rand gen_finale(i)

  8. #8
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    F�vrier 2014
    Messages
    24
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : F�vrier 2014
    Messages : 24
    Par d�faut
    �a m'a l'air int�ressant, je vais donc proc�der comme �a.

    merci !

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 2
    Dernier message: 30/06/2006, 16h46
  2. Récupération liste de fichier pour qmail-inject
    Par segphault dans le forum Linux
    R�ponses: 1
    Dernier message: 07/02/2006, 12h01
  3. tutoriel ou liste des fonctions pour GLADE
    Par debutanteVB.NET dans le forum GTK+ avec C & C++
    R�ponses: 2
    Dernier message: 23/11/2005, 16h08
  4. R�ponses: 2
    Dernier message: 21/11/2005, 15h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo