Random

Résolu
sebleboss2002 Messages postés 189 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 3 avril 2005 - 25 févr. 2005 à 18:34
sebleboss2002 Messages postés 189 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 3 avril 2005 - 26 févr. 2005 à 01:31
Voilà, j'ai bien l'impression d'avoir un problème...



Je suis en train de coder un Yams, avec cinq dés donc, et je trouve que
les chiffres qui sortent à chaque tirage sont trop ressemblants...

Exemple, un tour je tire un carré de trois du premier coup, le tour
d'après, idem avec les cinq... Mais également, je n'ai jamais tiré de
trois en même temps que des cinqs ou de 1 avec des six...

Bref, ça fait tout sauf du vrai Random quoi...

Voici mon code :




 Randomize (6)



 valDe1 = Int(Rnd * 6) + 1



 valDe2 = Int(Rnd * 6) + 1



 valDe3 = Int(Rnd * 6) + 1



 valDe4 = Int(Rnd * 6) + 1



 valDe5 = Int(Rnd * 6) + 1





J'ai également essayé en mettant "Randomize" simple au lieu de "Raondomize (6)", mais aucun changement...



Quelqu'un aurait-il la solution ?

8 réponses

crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
26 févr. 2005 à 00:22
Arrêter de mettre un argument dans vos appel à Randomize !! Ca ne serrt a rien (et visiblement ca foire tout !!)
La ligne suivante ...
Randomize
... suffit a rendr ele pseudo-aléatoire suffisamment variable pour qu'on le considère variable !
Alros pourquoi Randomize accepte un argument ? Pour pouvoir ne pas faire d'aléatoire du tout justement !!!! Ca peu paraitre con mais on a parfois besoin que le pseudo-aléatoire ne le soit pas du tout ! Si vous êtes en train de débugger un programme ave cdu random dedans, et bien mieux vaudrait pour vous que le pseudo-aléatoire ne soit pas du tout aléatoire !! Il suffit alors de remplacer la ligne ...
Randomize
... par ca ...
Randomize(1)
... ou ca ...
Randomize (1000)
et vous avez du pseudo-aléatoire figé ! C'est a cela que sert l'argument de Randomize !! Pas a rendre celui-ci plus aléatoire. Quand vous ne mettez pas d'argument à Randomize, il prend l'horloge système comme racine de l'algo de génération de nombre pseudo-aléatoire, donc c'est toujours unique et suffisamment pour que le pseudo-aléatoire paraisse vraiment aléatoire !!

Christophe R
tryborg Messages postés 29 Date d'inscription lundi 31 janvier 2005 Statut Membre Dernière intervention 1 mars 2005
25 févr. 2005 à 19:08
Randomize Timer

Essai, on n' sait jamais

tryborg
jsem2k1 Messages postés 125 Date d'inscription samedi 11 décembre 2004 Statut Membre Dernière intervention 12 août 2008 1
25 févr. 2005 à 22:20
Tu peux aussi essay :
Function Rand()
Randomize (now)
Rand = Int(Rnd * 6) + 1
End Function


valDe
1 = Rand
valDe
2 = Rand
valDe
3 = Rand
valDe
4 = Rand
valDe
5 = Rand

En fait, Randomize ne génaire pas vraimenr des chiffre de facon aléatoire. Ce n'ai qu'une formule qui VB utilise. Morale de l'histoir si on connais la formule on peux prédire le résultat que va sortir lordinateur
le meilleur moyent d'éviter ce la c de taper sur la clock interne a chaque fois en envoyant le paramètre now a la commande Randomize.
sebleboss2002 Messages postés 189 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 3 avril 2005
26 févr. 2005 à 00:03
Alors euh... Après test des deux méthodes :



Avec un Randomize Timer,
je tire toujours des nombres identiques à chaque fois (soit trois as,
soit trois trois...) ou alors des nombres dans une certain interval
(des as, deux et trois, mais pas de quatre cinq et six, ou vice-versa).



Avec une fonction Rand utilisant Randomize (Now), je tire les
mêmes séries de nombre à chaque fois (premier tirage = as, trois, cinq,
quatre, trois. Second tirage = quatre, cinq, quatre, deux, as.
Troisième tirage = trois, deux, as, as, cinq).



Existe-t-il vraiment une fonction permettant de renvoyer un nombre
vraiment au hasard en VB ? Si non, dans quel autre langage aurais-je
plus de chances de trouver une vraie fonction random ?

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tryborg Messages postés 29 Date d'inscription lundi 31 janvier 2005 Statut Membre Dernière intervention 1 mars 2005
26 févr. 2005 à 00:25
Crée un nouveau module et rentre ce code dedans, ce code n'est point de moi, je ne l'ai pas encore testé ...


<HR>
Option Explicit


Public Type RandomDistribution
Value As Single
Weight As Single
Probability As Single

End Type


Public Sub NormalizeDistribution(dist() As RandomDistribution)


Dim i As Long
Dim s As Single
Dim w As Single


s = 0
For i = 0 To UBound(dist)
s = s + dist(i).Weight

Next i


w = 0
For i = 0 To UBound(dist)
w = w + dist(i).Weight
dist(i).Probability = w / s


Next i


End Sub


Public Function Rand(Optional Max As Variant, Optional Min As Variant, Optional Seed As Variant) As Single


Dim Range As Single
Dim Offset As Single


Range = 1
Offset = 0


If Not IsMissing(Max) Then
Range = Max

End If


If Not IsMissing(Min) Then
Range = Range - Min
Offset = Min


End If


If IsMissing(Seed) Then
Rand = Rnd() * Range + Offset


Else
Rand = Rnd(Seed) * Range + Offset

End If


End Function


Public Function CRand(dist() As RandomDistribution) As Single


Dim i As Long
Dim r As Single


r = Rnd()


i = 0
Do While (r > dist(i).Probability) And (i < UBound(dist))
i = i + 1

Loop

If i = 0 Then
CRand = Rand(dist(i).Value)

Else
CRand = Rand(dist(i).Value, dist(i - 1).Value)

End If


End Function


Public Function DRand(dist() As RandomDistribution) As Single


Dim i As Long
Dim r As Single


r = Rnd()
i = 0
Do While (r > dist(i).Probability) And (i < UBound(dist))
i = i + 1

Loop


DRand = dist(i).Value


End Function

<HR>


tryborg
sebleboss2002 Messages postés 189 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 3 avril 2005
26 févr. 2005 à 00:38
Ok Crenaud, tu viens de m'apprendre quelque chose, merci :)

Mais par contre pour mon code euh... Ben avec un Random standard, j'ai
toujours des nombres qui reviennent trop souvent dans ma série de cinq
nombres (genre un carré d'as ou de cinq dès le premier tirage). J'ai
essayé de mettre un Randomize avant le tirage de chaque dé (randomize,
tirage dé1, randomize, tirage dé2, randomize, tirage dé3...), mais cela
n'arrange rien...



Je n'y comprends plus rien...
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
26 févr. 2005 à 01:00
Un randomize suffit normalement ! Voici mes cinquante premier tirage ...
3
4
6
3
5
6
3
1
3
2
5
3
1
6
6
6
5
5
2
3
3
6
3
6
1
5
5
2
5
4
5
3
3
5
1
4
5
4
4
2
4
4
2
4
2
6
3
3
6
1


Ca m'a l'air plutot alétoire ca non !!
Voici le code

Dim i As Long


Randomize


For i = 1 To 50
Debug.Print Int(Rnd * 6) + 1
Next

Christophe R
sebleboss2002 Messages postés 189 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 3 avril 2005
26 févr. 2005 à 01:31
Oui... Vérifié... Les apparitions de *paquets* de trois ou quatres
chiffres identiques successifs doivent être dues au fait qu'il n'y a
que 6 chiffres possibles...

J'vais me coucher moi !



Enfin, merci à tous d'avoir pris le temps de réfléchir à mon problème
Rejoignez-nous