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 :

generateur pseudo aléatoire uniforme


Sujet :

C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 11
    Par défaut generateur pseudo aléatoire uniforme
    je cherche un generateur de variable pseudo alétoire uniforme entre 0 et 1
    merci

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    C'est quoi "uniforme" ? Cela veut dire quoi pour toi ?

    sinon, rand() fournit un générateur pseudo aléatoire congruent.

    Tu peux aussi regarder dans le chapitre 9 de Introduction à la Cryptographie qui traite des générateurs de nombres aléatoires.

    Au fait, tu ne trouveras pas de générateurs de nombres réels entre 0 et 1. Tu trouveras des générateurs de nombres entiers dont les bornes sont connues et après, ce sera à toi de faire un changement de repère.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 11
    Par défaut
    en fait je genere des variables aléatoires entre 0 et 1 qui est U et puisque je travail avec une loi exponentielle donc j'ai X=-1/lambda* log(U)
    donc il me donne un resultat qui est #-inf

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par thasseda Voir le message
    en fait je genere des variables aléatoires entre 0 et 1 qui est U et puisque je travail avec une loi exponentielle donc j'ai X=-1/lambda* log(U)
    donc il me donne un resultat qui est #-inf
    J'avoue, j'ai pas bien compris

    Et tu ne réponds pas à ma question:
    Citation Envoyé par ram-0000 Voir le message
    C'est quoi "uniforme" ? Cela veut dire quoi pour toi ?
    Sinon, quelques URL :
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Citation Envoyé par thasseda Voir le message
    en fait je genere des variables aléatoires entre 0 et 1 qui est U et puisque je travail avec une loi exponentielle donc j'ai X=-1/lambda* log(U)
    donc il me donne un resultat qui est #-inf

    Ben c'est sur que si U = 0 là sa va pas le faire...

  6. #6
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    ça doit être l'ensemble E = ]0,1]

  7. #7
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Ouai peut être sauf que si il descend très proche de zéro, les types primitifs le supporteront pas..

  8. #8
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 122
    Billets dans le blog
    148
    Par défaut
    En prenant cette fonction de base tu dois arriver à faire un truc bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    float random( const float min, const float max)
    {
          return min + rand()/(float)RAND_MAX * ( max - min );
    }
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  9. #9
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Pseudo aléatoire, oui.

    Oui mais est ce que c'est un générateur uniforme comme demandé ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  10. #10
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour,
    FAQ et une doc de Jean-Marc Bourguet assez intéressante à lire.
    Boost.Random propose aussi des choses.

    Pour ton problème sur X=-1/lambda* log(U), l'origine n'est pas dans U mais dans log(U). Dès que ton tirage sur U va être petit, X va tendre vers l'infini -> d'où l'erreur du #-inf. Soit tu veux estimer ta moyenne et ta variance par du calcul 'bourrin' (somme/n et somme(ecart)/n) et alors il te faut passer par une librairie qui te permettent de gérer les grands nombres, soit tu creuse l'aspect mathématique pour trouver une autre méthode d'estimation.

  11. #11
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    sinon, rand() fournit un générateur pseudo aléatoire congruent.
    Rien ne l'impose.

    Citation Envoyé par Goten Voir le message
    Ouai peut être sauf que si il descend très proche de zéro, les types primitifs le supporteront pas..
    S'il part d'un entier et qu'il divise par RAND_MAX, il n'y a que pour 0 qu'il va y avoir un problème: log(1.0/RAND_MAX) ça fait pas -22.

  12. #12
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Utilise Boost.Random, ça fait tout proprement.

  13. #13
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Citation Envoyé par ram-0000 Voir le message
    sinon, rand() fournit un générateur pseudo aléatoire congruent.
    Rien ne l'impose.
    Peut être mais c'est souvent le cas
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  14. #14
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Sauf que son problème est d'estimer la moyenne et la variance d'une variable aléatoire qui suit une loi X= (-1/lambda)*log(U) avec lambda constante et U une variable aléatoire uniforme entre 0 et 1. Quelque soit le générateur qu'il utilise pour U, il va avoir des problèmes dès qu'il va faire un tirage avec u trop petit -> log(u) va dépasser.
    A mon avis, il faut creuser sur les algos mathématiques d'estimation de moyennes et de variance et ne pas essayer de la calculer à partir de tirage.

    Question bête : as-tu représenté ta courbe pour avoir au moins une idée intuitive de ce que tu cherches?

  15. #15
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    Peut être mais c'est souvent le cas
    Je viens de regarder 3 implémentations, c'est vrai pour une seule d'entre elle -- et pas la plus commune des 3. Les deux autres sont basées sur un générateur à concurence linéaire avec des modifications (différentes dans les deux) destinées à en éliminer les défauts principaux.

  16. #16
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Typiquement, rand, c'est un mersenne twister, donc uniforme.

  17. #17
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par loufoque Voir le message
    Typiquement, rand, c'est un mersenne twister, donc uniforme.
    Tu peux donner une implémentation qui soit typique d'après toi? Je doute que Windows ait un mersenne twister pour rand() -- son RAND_MAX à 32767 me fait penser à l'utilisation du générateur de la norme C, un par congruence linéaire dont on jette les bits de poids faibles -- et j'ai regardé les implémentions de Linux (congruence linéaire trafiqué), Solaris (qui a celui de la norme C) et FreeBSD (un par congruence linéaire). J'ai du mal à appeler typique quelque chose qui ne soit vrai sur aucune de ces plateformes.

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    S'il part d'un entier et qu'il divise par RAND_MAX, il n'y a que pour 0 qu'il va y avoir un problème: log(1.0/RAND_MAX) ça fait pas -22.
    Tu parles de quelle base du log?

  19. #19
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par reptils Voir le message
    Tu parles de quelle base du log?
    e (puisqu'on est dans du code C++).

  20. #20
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Il me semblait que c'était un mersenne twister. C'est vraiment archi nul rand() du coup...

Discussions similaires

  1. générateur de nombres pseudo-aléatoire
    Par salseropom dans le forum C
    Réponses: 3
    Dernier message: 22/08/2006, 13h21
  2. séquence binaire pseudo-aléatoire (C++)
    Par nhsbet dans le forum C++
    Réponses: 2
    Dernier message: 17/02/2006, 09h21
  3. Générateur de nombres pseudo-aléatoires
    Par gege2061 dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 25/08/2005, 13h38
  4. [Nombres pseudo-aléatoires]Génération de bits
    Par kaisse dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 25/02/2004, 20h12
  5. Algorithmes de generateur pseudo-aleatoire
    Par funx dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 06/09/2002, 18h33

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