amezghal
Messages postés385Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention21 août 2015
-
8 mars 2006 à 13:15
lexsty
Messages postés169Date d'inscriptionsamedi 10 décembre 2005StatutMembreDernière intervention18 juin 2017
-
23 août 2008 à 23:26
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
lexsty
Messages postés169Date d'inscriptionsamedi 10 décembre 2005StatutMembreDernière intervention18 juin 2017 23 août 2008 à 23:26
Bonjour US_30
Merci pour les appréciations.
Le but de cette source n'était pas initialemment de montrer les limites de RND.
C'est en utilisant les résultats donnés par le programme
qu'à ma surprise, le pseudo aléatoire RND à montré ses limites pour simuler la sortie de 6 numéros au Loto.
Bien sûr,comme l'a montré GOBILLOT, plus haut, il n'y a rien d'étonnant à celà.
Pour la programmation , en effet, je n'ai pas cherché en priorité à optimiser le Code.
A plus
JP
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 17 août 2008 à 12:20
Morale de l'histoire : Bien ou mal simulé, on voit qu'avec 1 chance sur 13983816 pour vraiment gagner (6 n°), c'est de la folie pure de jouer au loto ! ...
Une remarque sur la programmation : elle est largement optimisable... Mais l'intérêt de montrer la limite de RND est intéressant.
Amicalement,
Us.
lexsty
Messages postés169Date d'inscriptionsamedi 10 décembre 2005StatutMembreDernière intervention18 juin 2017 31 oct. 2006 à 20:36
Bonjour Gobillot.
J'ai testé le Simulateur de tirages du Loto
en remplaçant la fonction Rnd de Visual Basic
par la tienne que tu appelles Wrnd().
Maintenant on constate par exemple que pour 1.400.000.000
tirages de 6 n°,l'erreur relative entre la théorie et la simulation n'est que de 10 à 15 pour cent quelles que soient
les combinaisons à 6 n° choisies.
Bien sûr en augmentant le nombre de tirages de 6 n°
cette erreur relative doit diminuer encore.
Je vais essayer avec 14.000.000.000 tirages pour le constater.
Merci encore pour ta fonction.
A plus
lexsty
Messages postés169Date d'inscriptionsamedi 10 décembre 2005StatutMembreDernière intervention18 juin 2017 28 oct. 2006 à 06:44
Bonjour Gobillot.
Merci pour ta fonction Wrnd() de période 2^48.
C'est avec plaisir que je vais la tester.
Ca va être bien de constater que la sortie des
combinaisons à six numéros colle enfin plus à la théorie.
A bientôt avec les résultats du test.
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 26 oct. 2006 à 23:37
et aussi de remplacer la fonction Rnd() par une fonction perso
par exemple celle-ci de fréquence 2^48 (donc plus de possibilités)
il suffit de remplacer les Rnd() par WRnd()
Dim WW0 As Currency
Dim WWA As Currency
Dim WWC As Currency
Dim WWM As Currency
Private Sub Form_Load()
WW0 = 28002971
WWA = 32353
WWC = 6534
WWM = 28147497671.0656
End Sub
Private Function WRnd() As Double
Dim x As Currency
x = WWA * WW0 + WWC
WWC = Int(x / WWM)
WW0 = x - WWC * WWM
WRnd = WW0 / WWM
End Function
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 19 oct. 2006 à 08:38
c'était de toutes facon qu'un exemple qui montre que le while n'était pas forcément de mise ici ^^ (sans jeu de mot)
lexsty
Messages postés169Date d'inscriptionsamedi 10 décembre 2005StatutMembreDernière intervention18 juin 2017 18 oct. 2006 à 22:09
Bonjour Renfield.
Merci pour cette solution qui me montre l'existence de l'objet
"Collection" et son fonctionnement.
J'ai utilisé une autre façon d'éviter les rnd multiples.
Je me servirai de ta solution pour une prochaine source.
Encore Merci
A plus.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 18 oct. 2006 à 07:33
une solution pour régler le soucis des rnd multiples, est d'utiliser une liste des valeurs...(basiquement, une collection)
la valeur trouvée par le Rnd ne serait pas le chiffre, mais l'indice de "la boule" dans cette collection.
une foid ainsi piochée, on enlève la boule de la collection.
le prochain rnd se fera sur un élément en moins (1-48)
si on retombais sur un des nombres déjà tombés, cela pointerait sur une boule différente...
donc aucun soucis de ce coté là :
Dim oCol as Collection
For u = 1 To b
If 0 = u Mod 1000 Then
DoEvents
End If
Set oCol = New Collection
For i = 1 To 49
oCol.Add i
Next i
DoEvents
i = Int(1 + Rnd * oCol.Count)
S = oCol(i)
oCol.Remove (i)
i = Int(1 + Rnd * oCol.Count)
V = oCol(i)
oCol.Remove (i)
i = Int(1 + Rnd * oCol.Count)
W = oCol(i)
oCol.Remove (i)
i = Int(1 + Rnd * oCol.Count)
X = oCol(i)
oCol.Remove (i)
i = Int(1 + Rnd * oCol.Count)
Y = oCol(i)
oCol.Remove (i)
i = Int(1 + Rnd * oCol.Count)
Z = oCol(i)
oCol.Remove (i)
...
lexsty
Messages postés169Date d'inscriptionsamedi 10 décembre 2005StatutMembreDernière intervention18 juin 2017 18 oct. 2006 à 00:29
Bonjour.
Je pense qu'il serait plus dans l'esprit de ce site, de justifier les notes bonnes ou mauvaises par un minimum
d'explications sur ce qui a plu ou déplu dans une source.
Sans cela on ne peut pas avancer.
Des commentaires même simples seraient intéressants
Merci.
lexsty
Messages postés169Date d'inscriptionsamedi 10 décembre 2005StatutMembreDernière intervention18 juin 2017 10 mars 2006 à 20:06
Salut Amezghal.
Si tu as trouvé des erreurs dans le code,peux-tu me les communiquer afin que je les corrige.
Merci.
lexsty
Messages postés169Date d'inscriptionsamedi 10 décembre 2005StatutMembreDernière intervention18 juin 2017 10 mars 2006 à 19:56
Pour CCJ je répondrais que s'il est possible à l'aide d'un bon générateur de nombres pseudo aléatoires,de simuler avec précision
le tirage du Loto,il est par contre impossible de prédire la combinaison gagnante.
La seule certitude du Hasard est la Loi Des Grands Nombres.
Au sujet de ta proposition de tenir compte de la position initiale des boules,le problème est si complexe qu'il n'est certainement pas pour moi.
A+ CCJ
lexsty
Messages postés169Date d'inscriptionsamedi 10 décembre 2005StatutMembreDernière intervention18 juin 2017 9 mars 2006 à 21:55
C'est exactement les fréquences que j'ai pû constater pour
ces deux séquences.Pour celle qui sort un peu plus de cinq fois
plus que la normale,j'ai été surpris.
Tes explications sont intéressantes et convaincantes.
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 9 mars 2006 à 15:15
il s'agit ici de tester la fonction Rnd() et non pas de trouver les résultats du loto.
tous les nombres devant sortir avec la même chance, chaque séquence de 6 nombres devraient aussi sortir avec la même chance. vrai ou pas ?
le résultat est troublant...!
y a t-il des séquences privilègiées ?
réponse: OUI
sur 16777216 possibilités, certaines séquences existent, d'autres pas.
la séquence 5-15-25-27-35-45 (l'ordre n'a pas d'importance) sur 13983816 tirages, devrait d'après la théorie, sortir une fois,
or elle sort 5 fois ????
en réalité on fait plus de tirages puisqu'on élimine les nombres déjà sortis, je trouve 88522009 (chaque Rnd est compté) pour 6 chiffres, soit 14753668 combinaisons possibles, déjà c'est plus que 13983816, donc un peu plus d'une chance.
mais on oublie que la séquence a été parcourue 88522009/16777216 = un peu plus de 5 fois,et forcément la même séquence qui existe une fois, revient 5 fois d'où le résultat.
par contre la séquence 1-2-3-4-5-6 n'existe pas d'où le résultat = 0.
si on multiplie le nombre de tirages, on retrouve bien des multiples:
139838160 tirages: (10 fois d'après la théorie)
- 53 fois pour la première séquence
(885217409/16777216) * 1 fois
- 0 fois pour la deuxième
(885217108/16777216) * 0 fois
voilà l'explication, vu la pauvreté de la période, toutes les possibilités ne peuvent pas être représentées
CCJ
Messages postés565Date d'inscriptionmercredi 19 mai 2004StatutMembreDernière intervention30 avril 20081 9 mars 2006 à 12:21
juste une remarque : on obtiendra jamai les bon tirages du loto avec des rnd de vb car les loi de la phisique ki entrent en compte ne sont pas les meme(juste comme ca^^)
Donc plutot ke de faire une source qui sert a rien( c vrai elle sert pa a granche chose en fait) , essay de simuler un tirage loto en fonction de la posistion initiale des boule ;)
lexsty
Messages postés169Date d'inscriptionsamedi 10 décembre 2005StatutMembreDernière intervention18 juin 2017 9 mars 2006 à 07:03
En réponse à Gobillot : Je suis tout à fait d'accord avec la justesse de tes remarques.
Le problème reste quand même que du fait de la faible période
de RND,l'équiprobabilité des combinaisons à 6 n° n'est pas bonne
par exemple entre les combinaisons ( 5-15-25-35-45-27 ) et
( 1-2-3-4-5-6 ).Les écarts constatés sont vraiment importants.
Par contre si l'on teste beaucoup de combinaisons différentes,
la fréquence moyenne pour une sortie à 6 n° se rapproche mieux
de la fréquence théorique.
A plus.
JP.
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 9 mars 2006 à 03:54
Randomize n'est pas nécessaire dans le cas ici présent puisqu'il faut tester tous les cas.
pas la peine non plus de faire un si grand nombre de tirages puisque la période n'est que de 2^24
donc sur 16777216 tirages maximum on doit trouver en théorie:
16777216 / 49 = 342392,1633
ce qui se vérifie après test:
on trouve 2 groupes:
342393 pour les nombres: 1,7,13,19,25,31,37,43
342392 pour tous les autres
donc pas très grande différence, on peut même dire que la répartition est bien équilibrée.
pour tous les tirages supplémentaires, la répartition sera un multiple de ces nombres aux bornes près, c'est à dire que si le nombre de tirage est un multiple de 2^24, les résultats seront exactement un multiple de 342392 ou 342393, Randomize ou pas.
amezghal
Messages postés385Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention21 août 20155 8 mars 2006 à 21:59
y a des erreurs dans votre code pourquoi quelqu'uns donne des mauvaise notes
lexsty
Messages postés169Date d'inscriptionsamedi 10 décembre 2005StatutMembreDernière intervention18 juin 2017 8 mars 2006 à 19:30
Bonjour AMEZGHAL.
RANDOMIZE a toujours été présent et devant RND,bien sûr.
En cherchant, on le trouve après : " ' INITIALISATIONS ".
Merci quand même
Salut.
amezghal
Messages postés385Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention21 août 20155 8 mars 2006 à 13:15
n'oublie d'ajouter la commande RANDOMIZE avant RND
23 août 2008 à 23:26
Merci pour les appréciations.
Le but de cette source n'était pas initialemment de montrer les limites de RND.
C'est en utilisant les résultats donnés par le programme
qu'à ma surprise, le pseudo aléatoire RND à montré ses limites pour simuler la sortie de 6 numéros au Loto.
Bien sûr,comme l'a montré GOBILLOT, plus haut, il n'y a rien d'étonnant à celà.
Pour la programmation , en effet, je n'ai pas cherché en priorité à optimiser le Code.
A plus
JP
17 août 2008 à 12:20
Une remarque sur la programmation : elle est largement optimisable... Mais l'intérêt de montrer la limite de RND est intéressant.
Amicalement,
Us.
31 oct. 2006 à 20:36
J'ai testé le Simulateur de tirages du Loto
en remplaçant la fonction Rnd de Visual Basic
par la tienne que tu appelles Wrnd().
Maintenant on constate par exemple que pour 1.400.000.000
tirages de 6 n°,l'erreur relative entre la théorie et la simulation n'est que de 10 à 15 pour cent quelles que soient
les combinaisons à 6 n° choisies.
Bien sûr en augmentant le nombre de tirages de 6 n°
cette erreur relative doit diminuer encore.
Je vais essayer avec 14.000.000.000 tirages pour le constater.
Merci encore pour ta fonction.
A plus
28 oct. 2006 à 06:44
Merci pour ta fonction Wrnd() de période 2^48.
C'est avec plaisir que je vais la tester.
Ca va être bien de constater que la sortie des
combinaisons à six numéros colle enfin plus à la théorie.
A bientôt avec les résultats du test.
26 oct. 2006 à 23:37
par exemple celle-ci de fréquence 2^48 (donc plus de possibilités)
il suffit de remplacer les Rnd() par WRnd()
Dim WW0 As Currency
Dim WWA As Currency
Dim WWC As Currency
Dim WWM As Currency
Private Sub Form_Load()
WW0 = 28002971
WWA = 32353
WWC = 6534
WWM = 28147497671.0656
End Sub
Private Function WRnd() As Double
Dim x As Currency
x = WWA * WW0 + WWC
WWC = Int(x / WWM)
WW0 = x - WWC * WWM
WRnd = WW0 / WWM
End Function
19 oct. 2006 à 08:38
18 oct. 2006 à 22:09
Merci pour cette solution qui me montre l'existence de l'objet
"Collection" et son fonctionnement.
J'ai utilisé une autre façon d'éviter les rnd multiples.
Je me servirai de ta solution pour une prochaine source.
Encore Merci
A plus.
18 oct. 2006 à 07:33
la valeur trouvée par le Rnd ne serait pas le chiffre, mais l'indice de "la boule" dans cette collection.
une foid ainsi piochée, on enlève la boule de la collection.
le prochain rnd se fera sur un élément en moins (1-48)
si on retombais sur un des nombres déjà tombés, cela pointerait sur une boule différente...
donc aucun soucis de ce coté là :
Dim oCol as Collection
For u = 1 To b
If 0 = u Mod 1000 Then
DoEvents
End If
Set oCol = New Collection
For i = 1 To 49
oCol.Add i
Next i
DoEvents
i = Int(1 + Rnd * oCol.Count)
S = oCol(i)
oCol.Remove (i)
i = Int(1 + Rnd * oCol.Count)
V = oCol(i)
oCol.Remove (i)
i = Int(1 + Rnd * oCol.Count)
W = oCol(i)
oCol.Remove (i)
i = Int(1 + Rnd * oCol.Count)
X = oCol(i)
oCol.Remove (i)
i = Int(1 + Rnd * oCol.Count)
Y = oCol(i)
oCol.Remove (i)
i = Int(1 + Rnd * oCol.Count)
Z = oCol(i)
oCol.Remove (i)
...
18 oct. 2006 à 00:29
Je pense qu'il serait plus dans l'esprit de ce site, de justifier les notes bonnes ou mauvaises par un minimum
d'explications sur ce qui a plu ou déplu dans une source.
Sans cela on ne peut pas avancer.
Des commentaires même simples seraient intéressants
Merci.
10 mars 2006 à 20:06
Si tu as trouvé des erreurs dans le code,peux-tu me les communiquer afin que je les corrige.
Merci.
10 mars 2006 à 19:56
le tirage du Loto,il est par contre impossible de prédire la combinaison gagnante.
La seule certitude du Hasard est la Loi Des Grands Nombres.
Au sujet de ta proposition de tenir compte de la position initiale des boules,le problème est si complexe qu'il n'est certainement pas pour moi.
A+ CCJ
9 mars 2006 à 21:55
ces deux séquences.Pour celle qui sort un peu plus de cinq fois
plus que la normale,j'ai été surpris.
Tes explications sont intéressantes et convaincantes.
9 mars 2006 à 15:15
tous les nombres devant sortir avec la même chance, chaque séquence de 6 nombres devraient aussi sortir avec la même chance. vrai ou pas ?
le résultat est troublant...!
y a t-il des séquences privilègiées ?
réponse: OUI
sur 16777216 possibilités, certaines séquences existent, d'autres pas.
la séquence 5-15-25-27-35-45 (l'ordre n'a pas d'importance) sur 13983816 tirages, devrait d'après la théorie, sortir une fois,
or elle sort 5 fois ????
en réalité on fait plus de tirages puisqu'on élimine les nombres déjà sortis, je trouve 88522009 (chaque Rnd est compté) pour 6 chiffres, soit 14753668 combinaisons possibles, déjà c'est plus que 13983816, donc un peu plus d'une chance.
mais on oublie que la séquence a été parcourue 88522009/16777216 = un peu plus de 5 fois,et forcément la même séquence qui existe une fois, revient 5 fois d'où le résultat.
par contre la séquence 1-2-3-4-5-6 n'existe pas d'où le résultat = 0.
si on multiplie le nombre de tirages, on retrouve bien des multiples:
139838160 tirages: (10 fois d'après la théorie)
- 53 fois pour la première séquence
(885217409/16777216) * 1 fois
- 0 fois pour la deuxième
(885217108/16777216) * 0 fois
voilà l'explication, vu la pauvreté de la période, toutes les possibilités ne peuvent pas être représentées
9 mars 2006 à 12:21
Donc plutot ke de faire une source qui sert a rien( c vrai elle sert pa a granche chose en fait) , essay de simuler un tirage loto en fonction de la posistion initiale des boule ;)
9 mars 2006 à 07:03
Le problème reste quand même que du fait de la faible période
de RND,l'équiprobabilité des combinaisons à 6 n° n'est pas bonne
par exemple entre les combinaisons ( 5-15-25-35-45-27 ) et
( 1-2-3-4-5-6 ).Les écarts constatés sont vraiment importants.
Par contre si l'on teste beaucoup de combinaisons différentes,
la fréquence moyenne pour une sortie à 6 n° se rapproche mieux
de la fréquence théorique.
A plus.
JP.
9 mars 2006 à 03:54
pas la peine non plus de faire un si grand nombre de tirages puisque la période n'est que de 2^24
donc sur 16777216 tirages maximum on doit trouver en théorie:
16777216 / 49 = 342392,1633
ce qui se vérifie après test:
on trouve 2 groupes:
342393 pour les nombres: 1,7,13,19,25,31,37,43
342392 pour tous les autres
donc pas très grande différence, on peut même dire que la répartition est bien équilibrée.
pour tous les tirages supplémentaires, la répartition sera un multiple de ces nombres aux bornes près, c'est à dire que si le nombre de tirage est un multiple de 2^24, les résultats seront exactement un multiple de 342392 ou 342393, Randomize ou pas.
8 mars 2006 à 21:59
8 mars 2006 à 19:30
RANDOMIZE a toujours été présent et devant RND,bien sûr.
En cherchant, on le trouve après : " ' INITIALISATIONS ".
Merci quand même
Salut.
8 mars 2006 à 13:15