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

Algorithmes et structures de données Discussion :

Générateur de nombres pseudo-aléatoires


Sujet :

Algorithmes et structures de données

  1. #1
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut Générateur de nombres pseudo-aléatoires
    Bonjour,
    je travail sur les générateurs de nombres pseudo-aléatoires et j'ai lu que le générateur Berkeley UNIX génére des nombres dont les bits de poids faibles n'étaient pas fiables. J'aurai donc voulu savoir combien de bits il fallait supprimer pour obtenir quelque chose de correct (c'est dans un but éducatif donc je ne cherche pas la perfection).

    Merci.

  2. #2
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    L'idee n'est pas de les supprimer, mais de ne pas leur donner d'importance.
    En gros, et pour utiliser la notation C, pour avoir un nombre aleatoire compris entre 0 et N-1 il ne faut pas faire:
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (int)((double)rand() / ((double)RAND_MAX + 1) * N)
    Pour une discussion avancee de la bonne utilisation des generateurs lineaires congruentiels (tel que celui utilise par la librairie standard C), voir les Numerical Recipes, chapitre 7, section 1.

  3. #3
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par DaZumba
    L'idee n'est pas de les supprimer, mais de ne pas leur donner d'importance.
    Le problème c'est que je part de ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Xn+1 = ( 1103515245 * Xn + 12345 ) % 2147483647
    Donc je recode les fonctions de la bibliothèque standard du C rand et srand. Comme les bits de poids faibles ne son pas réellement aléatoires à part les suppimer je peux en faire quoi ?

    Citation Envoyé par DaZumba
    Pour une discussion avancee de la bonne utilisation des generateurs lineaires congruentiels (tel que celui utilise par la librairie standard C), voir les Numerical Recipes, chapitre 7, section 1.
    Je l'ai lu mais ce que j'ai compris ne m'a pas plus avancé (le reste j'ai pas compris )

  4. #4
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par gege2061
    Le problème c'est que je part de ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Xn+1 = ( 1103515245 * Xn + 12345 ) % 2147483647
    Donc je recode les fonctions de la bibliothèque standard du C rand et srand. Comme les bites de poids faibles ne son pas réellement aléatoires à part les suppimer je peux en faire quoi?
    Ah, je n'avais pas compris que tu te place comme créateur du générateur, et pas comme utilisateur. Le fait que les bits de poids faibles ne sont pas très aléatoires est un défaut des algorithmes linéaires congruentiels. En temps que créateur de la bibliothèque, tu ne fais rien, mais tu avertis l'utilisateur des limites du générateur, et tu conseilles la bonne utilisation. Sinon, tu peux implémenter des générateurs plus sophistiqués (cf. les sections suivantes du paragraphe 7 - c'est compréhensible si tu as un peu de maths derrière toi).

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Les générateur aléatoires congruentiels génèrent un hasard faible, c'est pas génial, en fait. Avec cette formule, tu ne peux pas aller vers un hasard fort - qui serait obtenu par un bruit physique -. Il y a d'autres techniques pour diminuer la corrélation de ton bruit, à l'aide d'autres formules.

  6. #6
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    Quitte à réimplémenter un random générator, pourquoi ne pas choisir un Mersenne Twister?

    C'est ce que j'ai implémenté dans ma boite.

  7. #7
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par Nemerle
    Quitte à réimplémenter un random générator, pourquoi ne pas choisir un Mersenne Twister?
    Effectivement il semble assez bon comme générateur

    Mais comme je l'ai dit plus haut c'est à but éducatif donc je ne vais pas présenter tous les types de générateurs possible ! Je suis parti sur les générateurs de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Xn+1 = ( a * xn + b ) % c
    Pour montrer que ce n'est pas si simple (si les valeurs de a, b et c ne sont pas choisies avec précaution c'est la catastrophe !).

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 417
    Points : 372
    Points
    372
    Par défaut
    Il y a un test simple qu'on peut faire pour trouver le meilleur générateur pseudo-aléatoire parmi plusieurs.

    Utilise chaque générateur pour fabriquer un gros fichier d'une taille donnée (la même taille pour tous les générateurs), puis comprime ces fichiers avec les outils de compression habituels. Les fichiers qui sont les plus difficile à comprimer sont ceux qui sont fabriqués par les meilleurs générateurs. Ce sont ceux qui donnent les séquences les moins biaisées.

    Personnellement, j'aime bien le générateur de RC4 qui est de bonne qualité et facile à coder.

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    gege > Ce genre de chose est expliqué sur Wikipedia...
    Le test de DrTopos est assez simple à mettre en place et bien discriminant, ensuite, tu as des tests de corrélation à mettre en place si tu veux aller plus loin, ...

  10. #10
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par Miles
    gege > Ce genre de chose est expliqué sur Wikipedia...
    Quoi dont ?

    Citation Envoyé par Miles
    Le test de DrTopos est assez simple à mettre en place et bien discriminant, ensuite, tu as des tests de corrélation à mettre en place si tu veux aller plus loin, ...
    Effectivement c'est une bonne idée !

  11. #11
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Les générateurs aléatoires par congruence.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Deux générateurs de nombres pseudo-aléatoires
    Par Davidlouiz dans le forum C++
    Réponses: 4
    Dernier message: 04/07/2011, 19h41
  2. Réponses: 3
    Dernier message: 20/04/2011, 13h52
  3. générateur de nombre (pseudo)-aléatoire
    Par mangeclous dans le forum Mathématiques
    Réponses: 0
    Dernier message: 28/08/2009, 05h18
  4. générateur de nombres pseudo-aléatoire
    Par salseropom dans le forum C
    Réponses: 3
    Dernier message: 22/08/2006, 13h21

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