Géométriquement le forum Dlz9
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
-40%
Le deal à ne pas rater :
Tefal Ingenio Emotion – Batterie de cuisine 10 pièces (induction, ...
59.99 € 99.99 €
Voir le deal

Aller en bas
Dlzlogic
Dlzlogic
Admin
Messages : 9440
Date d'inscription : 26/04/2019
Age : 79
Localisation : Proville
http://www.dlzlogic.com

A propos de générateurs. Empty A propos de générateurs.

Lun 26 Fév - 16:53
Bonjour,
J'ouvre un nouveau fil pour évoquer un problème dont on parle quelque fois, mais sans rentrer dans le détail : les générateurs de nombres aléatoires.
Sauf erreur, tous les logiciels utilisent la même méthode : une opération arithmétique simple sur des nombres entiers avec un dépassement de capacité, ce qui fait que le résultat n'a aucune relation directe avec le nombre qui l'a généré. Ce nouveau nombre servira à calculer le suivant. En pratique, un nombre N sera toujours suivi du même nombre, par contre, il est impossible de remonter en arrière.
D'où le nom de "pseudo-aléatoire", mais le cycle est suffisamment grand pour que cela ne pose aucun problème pour les traitements non sensibles. Si on veut augmenter le cycle, il suffit d'adopter les nombres de Mersenne, là n'est pas mon propos.
Dlzlogic
Dlzlogic
Admin
Messages : 9440
Date d'inscription : 26/04/2019
Age : 79
Localisation : Proville
http://www.dlzlogic.com

A propos de générateurs. Empty Re: A propos de générateurs.

Lun 26 Fév - 17:05
Donc les valeurs renvoyées par la fonction rand() de base sont des entiers compris entre 0 et RAND_MAX.
RAND_MAX est une constante de mon compilateur, rien ne dit que ce sera le même nom dans un autre compilateur.
On observe que dans de nombreux langages de calcul, la fonction rand() renvoie un flottant compris entre 0 et 1. (Je pense que 1 est exclu). Cela simplifie peut-être la compréhension des programmeurs, mais je n'en suis pas sûr. La division par RAND_MAX est faite en base.
Dlzlogic
Dlzlogic
Admin
Messages : 9440
Date d'inscription : 26/04/2019
Age : 79
Localisation : Proville
http://www.dlzlogic.com

A propos de générateurs. Empty Re: A propos de générateurs.

Lun 26 Fév - 17:30
Donc, quels que soient les détails de la fonction rand(), les résultats sont toujours une liste de nombres. Pour la clarté de l'explication restons sur la fonction de base qui calcule des nombres entiers.
La méthode la plus simple pour obtenir des nombres compris dans un intervalle [0 ; n[ est d'utiliser l'opération modulo.
La liste des nombres obtenus n'a aucune caractéristique particulière, elle ne correspond à aucune mesure de quoi que ce soit, c'est comme le nombre de taches sur un dé à 6 faces ou une marque quelconque sur un dé, quelque soit le nombre de faces. Un tirage que l'on peut en faire est dit suivre la loi uniforme. Chaque face, munie de son graphisme permettant de la repérer, a autant de chance de sortie que chacune des autres. Dans le cas de la liste obtenue avec la fonction rand(), chaque "nombre" est un label, comme sont les numéros de compte en banque.
Les générateurs de nombres aléatoires sont des outils bien pratiques pour faire des simulations. Mais il ne faut surtout pas oublier que ces nombres ne correspondent à rien de particulier.
Dlzlogic
Dlzlogic
Admin
Messages : 9440
Date d'inscription : 26/04/2019
Age : 79
Localisation : Proville
http://www.dlzlogic.com

A propos de générateurs. Empty Re: A propos de générateurs.

Lun 26 Fév - 18:13
Après ces préambules indispensables, voilà le but réel de ce fil.
Il y a quelques temps, je m'étais fait une fonction pour générer de façon aléatoire une liste de valeurs qui pouvait correspondre à des mesures réalistes et non à sortir une liste de nombres qui ne correspondaient à rien de particulier comme le fait la fonction rand(). Il est rare d'avoir besoin de cette fonction, mais elle m'a servi deux ou trois fois. Si ça intéresse quelqu'un je suis prêt à expliquer comment elle fonctionnait. Je l'ai comparée à une fonction écrite avec l'algorithme de Box-Muller, elle était plus rapide et plus facile à justifier.
Mais malheureusement mon disque a cramé et mes sauvegardes étaient plus anciennes.

La lecture du code de Flight dans l'un de ses exercices en généré des nombre suivant la loi normale par un procédé que je ne connaissais pas.
Pour me refaire une fonction Rand_Gauss() j'ai essaye des trucs. J'ai commencé par "très simple" : je lis deux nombres aléatoire avec rand() avec pour borne [0 ; 1 [ et ]-1 ; 0] je les ajoute, j'obtiens ainsi un nombre dans l'intervalle ]-1 ; 1[ et à ma grande surprise j'obtiens une répartition vraiment proche de la répartition normale.

Il me semble me souvenir avoir vu une opération du même genre dans le source d'un langage (peut-être Python) Mais je n'affirme rien.

Toutes les réactions sont les bienvenues.
Dlzlogic
Dlzlogic
Admin
Messages : 9440
Date d'inscription : 26/04/2019
Age : 79
Localisation : Proville
http://www.dlzlogic.com

A propos de générateurs. Empty Re: A propos de générateurs.

Lun 26 Fév - 18:32
Flight a écrit:Bonjour, je vous propose l exercice suivant : on se donne les entiers allant de 1 à n, on effectue un choix aléatoire de r entiers avec remise.
Quelle est la probabilité que la somme des entiers choisis soit supérieure ou égale à q ?   (q > 0)
Je me demande si cette question (son dernier exercice) ne serait pas justement dans le cadre du présent sujet.
Vu les horaires, il ne peut pas avoir lu mon fil.
Dlzlogic
Dlzlogic
Admin
Messages : 9440
Date d'inscription : 26/04/2019
Age : 79
Localisation : Proville
http://www.dlzlogic.com

A propos de générateurs. Empty Re: A propos de générateurs.

Lun 22 Avr - 19:56
Bonjour,
Je fais remonter ce fil parce que j'ai remarqué quelque chose d'étonnant.
Je réalise une simulation basée que le résultat de tirage à pile ou face. La simulation en elle même est sans rapport avec le sujet.
La méthode la plus simple, généralement utilisée est de tirer un nombre et de calcule le résultat module 2. Le résultat sera 0 ou 1. J'obtiens un écart-type de 16 environ.
J'ai refait le calcul en prenant le résultat modulo 100 puis 64 puis 88, dans tous ces cas, j'obtiens un écart-type de 26 environ.

J'avais déjà entendu parler de ce problème, mais je ne connais pas la raison.
avatar
HumHumHum
Messages : 484
Date d'inscription : 23/02/2024

A propos de générateurs. Empty Re: A propos de générateurs.

Mar 23 Avr - 22:47
Bonsoir,

Le résultat sera 0 ou 1. J'obtiens un écart-type de 16 environ.
Obtenir un écart-type de 16 pour une variable qui vaut 0 ou 1, faut être rudement fortiche ! Shocked
Il faudrait préciser ce sur quoi vous obtenez un écart-type, car là c'est complètement incompréhensible. Le mieux serait certainement de donner votre code de simulation.
Nul doute alors que, si le phénomène est réel, il pourra s'expliquer facilement.
Dlzlogic
Dlzlogic
Admin
Messages : 9440
Date d'inscription : 26/04/2019
Age : 79
Localisation : Proville
http://www.dlzlogic.com

A propos de générateurs. Empty Re: A propos de générateurs.

Mar 23 Avr - 22:58
Oh, mais vous êtres très fort. Surtout en informatique. Ce phénomène est réel, bien-sûr qu'on peut l'expliquer, mais je doute fort que ce soit vous.
J'en ai entendu parler, je l'ai constaté il y a un petit moment, mais là c'est très caractéristique : protocole simple, plusieurs essais. Seul un informaticien pourrait répondre.
Faites des essais vous-même je pense que vous obtiendrez le même constat.
Petit indice, l'explication qui était donnée était incontestable, mais j'avoue que je n'y ai pas vraiment cru pour un effet non négligeable. Alors j'ai oublié.
avatar
HumHumHum
Messages : 484
Date d'inscription : 23/02/2024

A propos de générateurs. Empty Re: A propos de générateurs.

Mar 23 Avr - 23:04
Faites des essais vous-même je pense que vous obtiendrez le même constat.
Des essais de quoi ?
protocole simple, plusieurs essais
Si le protocole est simple, vous devez pouvoir l'expliquer simplement, non ?
Encore une fois : pourquoi ne donnez-vous pas votre code ?
Dlzlogic
Dlzlogic
Admin
Messages : 9440
Date d'inscription : 26/04/2019
Age : 79
Localisation : Proville
http://www.dlzlogic.com

A propos de générateurs. Empty Re: A propos de générateurs.

Mar 23 Avr - 23:10
Oh c'est une simulation que j'ai déjà proposée plusieurs fois.
Je ne vous donnerai pas le code, il est trop simple. A vous d'imaginer une utilisation de pile ou face.
avatar
HumHumHum
Messages : 484
Date d'inscription : 23/02/2024

A propos de générateurs. Empty Re: A propos de générateurs.

Mar 23 Avr - 23:54
Simulation de quoi ? Protocole pourquoi faire ?
Franchement, pourquoi venir parler d'un problème que vous rencontrez si vous ne voulez rien explquer de ce problème ?
Je ne vous donnerai pas le code, il est trop simple.
Vous en avez honte ? Il n'y a pas de quoi, les codes simples sont les meilleurs.
avatar
HumHumHum
Messages : 484
Date d'inscription : 23/02/2024

A propos de générateurs. Empty Re: A propos de générateurs.

Mer 24 Avr - 9:20
Bonjour,
En remontant dans le fil :
je lis deux nombres aléatoire avec rand() avec pour borne [0 ; 1 [ et ]-1 ; 0] je les ajoute, j'obtiens ainsi un nombre dans l'intervalle ]-1 ; 1[ et à ma grande surprise j'obtiens une répartition vraiment proche de la répartition normale.
Pourquoi être surpris ? Vous simulez X1+X2-1 où X1 er X2  sont deux variables aléatoires indépendantes de distribution uniforme sur [0,1[. Vous obtenez une distribution en triangle de fonction de densité x |---> 1-|x| sur ]-1, 1[, d'espérance 0 et d'écart-type 1/√6, qui ne passe aucun test sérieux de normalité.


Dernière édition par HumHumHum le Mer 24 Avr - 10:58, édité 1 fois (Raison : Ajout de "indépendantes")
Dlzlogic
Dlzlogic
Admin
Messages : 9440
Date d'inscription : 26/04/2019
Age : 79
Localisation : Proville
http://www.dlzlogic.com

A propos de générateurs. Empty Re: A propos de générateurs.

Mer 24 Avr - 14:58
Bonjour,
Je viens de refaire le test de la fonction dont je parlais
Code:
Test de Tire_Alea
Nombre = 1000  Moyenne = 100.00  emq=0.10  ep=0.07
Médiane = 100.00 Min = 99.75  Max 100.24
    Rapport EMQ/EMA = 1.24  théorique 1.25
Classe 1  nb=   0  0.00%     théorique 0.35%    |
Classe 2  nb=  23  2.30%     théorique    2%    |HHH
Classe 3  nb=  77  7.70%     théorique    7%    |HHHHHHHH
Classe 4  nb= 155  15.50%     théorique   16%    |HHHHHHHHHHHHHHHH
Classe 5  nb= 240  24.00%     théorique   25%    |HHHHHHHHHHHHHHHHHHHHHHHH
Classe 6  nb= 246  24.60%     théorique   25%    |HHHHHHHHHHHHHHHHHHHHHHHHH
Classe 7  nb= 151  15.10%     théorique   16%    |HHHHHHHHHHHHHHHH
Classe 8  nb=  92  9.20%     théorique    7%    |HHHHHHHHHH
Classe 9  nb=  16  1.60%     théorique    2%    |HH
Classe 10 nb=   0  0.00%     théorique 0.35%    |
Moi, je trouve que le test de normalité est plutôt satisfaisant.
avatar
HumHumHum
Messages : 484
Date d'inscription : 23/02/2024

A propos de générateurs. Empty Re: A propos de générateurs.

Mer 24 Avr - 15:10
Bonjour Dlzlogic.
Vous vous êtes trompé. Les résultats que vous présentez ci-dessus ne correspondent absolument pas au porotocole que vous décrivez :
je lis deux nombres aléatoire avec rand() avec pour borne [0 ; 1 [ et ]-1 ; 0] je les ajoute, j'obtiens ainsi un nombre dans l'intervalle ]-1 ; 1[ et à ma grande surprise j'obtiens une répartition vraiment proche de la répartition normale.
Dlzlogic
Dlzlogic
Admin
Messages : 9440
Date d'inscription : 26/04/2019
Age : 79
Localisation : Proville
http://www.dlzlogic.com

A propos de générateurs. Empty Re: A propos de générateurs.

Mer 24 Avr - 15:15
Voilà mon code de la fonction concernée
Code:
float Tire_Alea(float m, float emq)
{
// cette fonction renvoie approximativement une variable aléatoire normale
// utilisable seulement pour des petites simulations simples.
  float s=0;
  int r=rand();      // donc entre 0 et 1
  s = (float)r/RAND_MAX;
  r=rand();
  s -=(float)r/RAND_MAX;  // s compris entre -1 et +1
  s = s * emq * (7.5/3.0) + m;
//  s=(emq * ((s - intervalle/2)/sqrt(2.))) +m;
  return s;
}
Merci de m'indiquer où je me suis trompé.
avatar
HumHumHum
Messages : 484
Date d'inscription : 23/02/2024

A propos de générateurs. Empty Re: A propos de générateurs.

Mer 24 Avr - 23:14
Le problème se situe entre le code Tire_Alea et les résultats affichés dans le message précédent.
Il manque une information : Ce que vous avez fourni à votre "AfficheNormal".
Pouvez vous le donner ?
On remarque que vos résultats sont entre 99.75 et 100.24, avec un écart-type de 0.1 !!!

Voici une simulation claire avec votre protocole :
Code:
def distribution_Dlz(n,b) :
    X=np.random.default_rng().uniform(0,1,n)
    Y=np.random.default_rng().uniform(0,1,n)
    D=X-Y
    _ = plt.hist(D, bins=b, alpha=0.3)
    plt.plot([-1,0,1],[0,2*n/b,0],color="red",lw=5, alpha=0.6)
    plt.title("Histogramme de {} nombres tirés selon \
la distribution de Dlzlogic".format(n))
    plt.show()
La commande
Code:
distribution_Dlz(10000,20)
produit :
A propos de générateurs. Sans_t23
Ça confirme parfaitement ce que j'écrivais plus haut et qui est tout à fait évident quand on réfléchit un peu.
Le rapport  emq/ema vaut √2, à peu près 1.41. √(3/2), à peu près 1.22.
La cloche est en fait un triangle, c'est bien différent d'une distribution normale.


Dernière édition par HumHumHum le Jeu 25 Avr - 18:58, édité 1 fois (Raison : Correction du calcul emq/ema)
Dlzlogic
Dlzlogic
Admin
Messages : 9440
Date d'inscription : 26/04/2019
Age : 79
Localisation : Proville
http://www.dlzlogic.com

A propos de générateurs. Empty Re: A propos de générateurs.

Mer 24 Avr - 23:33
J'ai un peu de mal à comprendre votre message.
Je vous ai déjà dit que la fonction AfficheNormale ne fait qu'un comptage et un affichage. C'est à dire qu'il n'y a aucun traitement, juste du comptége des valeurs numérique d'un fichier.
Vous devriez préciser vos affirmations.
avatar
HumHumHum
Messages : 484
Date d'inscription : 23/02/2024

A propos de générateurs. Empty Re: A propos de générateurs.

Jeu 25 Avr - 19:12
Bonsoir,
Mes affirmations sont très précises : la distribution que vous produisez est une distribution en triangle. Et un triangle, ce n'est pas une cloche de Gauss !
Pourtant, cette distribution feinte assez bien votre "AfficheNormal". L'écart type ou emq est 1/√6, à peu près 0.41. L'ema est 1/3. Le rapport emq/ema est 1.22, pas très loin du 1.25 que vous attendez.
L'"écart probable" est à peu près ep = 0.27. On peut facilement calculer théoriquement :
écart entre 0 et 1 ep : 23.5 %
entre 1ep et 2ep : 16.1%
entre 2 ep et 3ep : 8.7%
entre 3 ep et 1 : 1.7%
après : 0%
On n'est pas très loin des valeurs théoriques attendues pour une loi normale.
Conclusion : la distribution que vous produisez est sensiblement différente d'une distribution normale. Mais votre "AfficheNormale" ne s'en aperçoit pas. Votre "AfficheNormale" n'est donc pas un bon test de normalité.
Dlzlogic
Dlzlogic
Admin
Messages : 9440
Date d'inscription : 26/04/2019
Age : 79
Localisation : Proville
http://www.dlzlogic.com

A propos de générateurs. Empty Re: A propos de générateurs.

Jeu 25 Avr - 19:57
La fonction AfficheNormale n'est pas un test de normalité, c'est une simple visualisation de la répartition.
Au risque de me répéter, toute expérience de même loi honnête et sans faute produira un résultat conforme à la répartition normale.
Que la fonction simplifiée Tire_Alea ne produise pas une répartition normale précise ne me gène pas. C'est rare d'avoir besoin de cette fonction. Celle utilisant BoxMuller convient, si on besoin de quelque-chose de précis. Ou bien, je refais ma fonction utilisant la table de répartition.
Il ne s'agit pas ici de juger AfficheNormale, mais d'observer qu'une opération simple peut servir dans certains cas.
avatar
HumHunHum
Messages : 42
Date d'inscription : 24/04/2024

A propos de générateurs. Empty Re: A propos de générateurs.

Jeu 25 Avr - 20:17
Bonsoir,
HumHumHum a écrit:
Mes affirmations sont très précises : la distribution que vous produisez est une distribution en triangle. Et un triangle, ce n'est pas une cloche  de Gauss !
Vous savez, beaucoup de gens parlent de croissance exponentielle dès qu'il s'agit de dire que ça monte plus vite qu'une droite. D'autres personnes parlent de courbe de Gauss dès qu'ils voit une bosse au milieu de leurs données...  On voit ici clairement qu'observer une opération simple peut être interprétée de manière erronée : un triangle, une cloche, c'est bien pareil.
avatar
HumHunHum
Messages : 42
Date d'inscription : 24/04/2024

A propos de générateurs. Empty Re: A propos de générateurs.

Jeu 25 Avr - 20:22
HumHumHum a écrit: Le rapport emq/ema est 1.22, pas très loin du 1.25 que vous attendez.
Cela montre également que le simple rapport emq/ema n'est pas un bon test de normalité, sauf si on associe automatiquement une bosse à la loi de Gauss.
Dlzlogic
Dlzlogic
Admin
Messages : 9440
Date d'inscription : 26/04/2019
Age : 79
Localisation : Proville
http://www.dlzlogic.com

A propos de générateurs. Empty Re: A propos de générateurs.

Jeu 25 Avr - 21:21
Bon, je vais essayer d'être clair.
D'une part, il y a la théorie des probabilités qui contient 3 notions fondamentales
1- le postulat de la moyenne
2- la loi des grands nombres
3- la loi normale.
Les points 2 et 3 sont les deux théorèmes de Bernoulli. Comme tout théorème honnête, il est démontré et applicable en toute circonstance, si les hypothèses sont celles du théorème.
Le rapport emq/ema est un test de normalité, il y en a d'autres, beaucoup plus compliqués et pas vraiment faciles à utiliser.
Si ce test ne vous convient pas, utilisez-en un autre.
Dans le cas présent, il ne s'agit pas de discuter du test de normalité, mais de constater qu'une opération simple peut simuler une expérience pas trop différente d'une expérience vraiment aléatoire et de même loi.
Je répète qu'il est assez rare d'avoir besoin du résultat d'une expérience qui produit un résultat conforme a la loi normale. Ce qui est beaucoup plus courant est de simuler une expérience et de vérifier qu'elle rentre dans le cadre d'expérience aléatoire sans tricherie, ni faute.

PS j'ai relu le message de Hun. Manifestement la théorie des probabilités lui échappe complètement.
avatar
HumHunHum
Messages : 42
Date d'inscription : 24/04/2024

A propos de générateurs. Empty Re: A propos de générateurs.

Jeu 25 Avr - 22:01
Dlzlogic a écrit:Manifestement la théorie des probabilités lui échappe complètement.
pourquoi répétez-vous ainsi les propos que tant de personnes ont tenus sur vous ?

Dans votre dernier message, il y a tellement d'incohérences avec la théorie des probabilités et les bonnes pratiques scientifiques, à commencer par  la loi normale : ce n'est pas un théorème !
Vous confondez le TCL et la loi normale.
C'est comme si on confondait le théorème de Pythagore et le triangle rectangle...
Le théorème de Pythagore parle de triangle rectangle, mais le triangle rectangle n'est pas un théorème.
Le TCL (ci-dessous) parle de la loi normale (soulignée en rouge), mais la loi normale n'est pas un théorème !!!
Enfin, il suffit de lire n'importe quel cours.
A propos de générateurs. Image210


<< Si ce test ne vous convient pas, utilisez-en un autre.
<< Je répète qu'il est assez rare d'avoir besoin du résultat d'une expérience qui produit un résultat conforme a la loi normale.

Oui, il est préférable d'utiliser un test qui ne contredit pas les conclusions que l'on veut imposer comme indiscutables.
Et par ailleurs, il y a plein de situations où on a besoin des résultats obtenus par une expérience suivant une loi normale (sondages, caractéristiques de machines, etc)
En résumé, il est bien plus facile d'affirmer des faussetés que de justifier ses propos.
avatar
HumHunHum
Messages : 42
Date d'inscription : 24/04/2024

A propos de générateurs. Empty Re: A propos de générateurs.

Jeu 25 Avr - 22:38
Dlzlogic a écrit:1- le postulat de la moyenne
Pourriez vous préciser clairement, précisément, l'énoncé de ce postulat ?
Est-ce le théorème de la loi des grands nombres comme le dit Dattier ici :
forums.futura-sciences.com/discussions-scientifiques/879849-postulat-de-moyenne-raisonnable.html

Bonne soirée.
Dlzlogic
Dlzlogic
Admin
Messages : 9440
Date d'inscription : 26/04/2019
Age : 79
Localisation : Proville
http://www.dlzlogic.com

A propos de générateurs. Empty Re: A propos de générateurs.

Jeu 25 Avr - 22:48
Bonsoir Hun,
Je trouve que vos propos sont toujours négatif et la plupart du temps pour me contredire systématiquement et sans argument. Cela s'appelle de la diffamation.
J'ai connu quelqu'un qui agissait un peu comme vous, jamais rien de positif, c'est à dire que tout le monde se serait bien passé de ses interventions. Par contre, j'ai eu un très grand nombre d'échanges par mail avec lui, bizarrement il était beaucoup plus poli, bien qu'on ne soit pas d'accord sur des choses fondamentales, les échanges étaient possibles.
Vous semblez ignorer le second théorème de Bernoulli. le TCL n'est qu'une sur-couche.
Contenu sponsorisé

A propos de générateurs. Empty Re: A propos de générateurs.

Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum