Tirage aléatoire

Signaler
Messages postés
3
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
28 mai 2012
-
Messages postés
3
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
28 mai 2012
-
Bonjour,

J'aimerais éffectuer un tirage aléatoire dans une liste de nombres (par exemple 3, 5, 7, 9, 15 18) mais pondérer le résultat pour que certains sortent plus souvent que d'autres (par exemple le 9 trés souvent et le 18 pratiquement jamais)

Merci de vos réponses 

9 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
en faisant une liste des nombres possibles.
ajouter les nombres plusieurs fois, pour augmenter ses chances d'être choisi aléatoirement.

une fois un de ces nombres trouvés, en supprimer toutes les occurrences, pour ne pas retomber sur ce nombre.
Messages postés
234
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
3 novembre 2011

Comme l'a dit Renfield il faut utiliser le principe de la roue de la fortune.

Dim Roue As New List(Of Integer)

Roue.Add(3)
Roue.Add(3)
Roue.Add(3)
Roue.Add(4)
Roue.Add(4)
Roue.Add(18)

Dim r As New Random
Dim Tirage As Integer = r.Next(0, Roue.Count - 1)

0.5% de probabilités de tirer 3
0.33% de probabilités tirer 4
0.16% de probabilités tirer 18
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
4
Bonjour,

j'appelle ton attention, The Meteorologist, sur le fait que tes pourcentages de probabilité ne sont vrais qu'au tout premier tirage et qu'ils sont ensuite différents.
Commle tu le vois, les probabilités successives (résiduelles) dépendent des tirages successifs précédents.
Messages postés
234
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
3 novembre 2011

jmf0, j'ai du mal à comprendre pourquoi les probabilités changeraient après le premier tirage. Sans doute as-tu raison mais pourrais-tu m'éclairer un peu sur ce sujet ?

Merci
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
4
Parce que tout simplement (relis donc) le même numéro ne peut être tiré qu'une seule fois.
Comme, en plus, le numéro le plus souvent répétéest précisément celui qui a le plus de chances d'être tiré au 1er tirage, ton pourcentage de probabilité est totalement bouleversé lors des tirages suivants.
Le plus simple pour que tu comprennes vite est ceci :
4 numéros 1,2,3 et 4
mais avec au départ :
1,1,1,1,2,2,3,4
selon ton raisonnement le 1 aurait donc 50 % de chances, le 2 25 %, le 3 12,5 % et le 4 12,5% en tirant 2 numéros sur ces 4 numros ?
Voyons donc avec exemples :
exemple 1 : premier tirage : 2 (il avait bien 25% de chances, mais a été tiré d'emblée)
reste alors 1,1,1,1,3 et 4
le 1 n'a plus 50% de chances, mais plus (4/6 %) d'être tiré

Ma   is voilà : exemple 2 : le 1 sort dès le 1er tirage
restent : 2,2,3,4 ===>> 50% pour le 2, 25 % pour le 3 et 25% pour le 4 au 2ème et dernier tirage

ton calcul des chances est donc étrangement lié aux aléas du tout premier tirage (et un alea... c'est un alea).
Le calcul de tes probabilités devrait  en plus inclure également le nombre de tirages parmi x numéros (et calculer une moyenne) car ce nombre de tirages lui-même est important.
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
4
En d'autres termes, ce n'est pas comme à la roulette (où un tirage n'est fait que sur un seul numéro), mais comme une roulette "particulière" sur laquelle
- tu mettrais plusieurs boules
- tu pourrais interdire l'accès (aux autres boules) à tous les numéros identiques à celui déjà occupé par une boule.

Un calcul de probabilités est par contre plus simple sur une machine de type "JackPot" car chaque roue contient tous les numéros (chacun en plus ou moins grand nombre de présence) et qu'il est non seulement permis mais espéré(du moins par le joueur) que chaque roue s'arrêtera sur le même numéro ...
Messages postés
234
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
3 novembre 2011

Merci beaucoup pour ta réponse. Mais pitaya97 n'a pas précisé qu'un numéro ne pouvait être tiré qu'une seule fois. Enfin du moins ce n'est pas comme ça que j'avais compris son post. Quoi qu'il arrive merci pour tes explications ;)
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
4
Il est vrai que pitaya57 est le grand absent dans cette discussion qu'il a ouverte ...
Il est également possible que a "vision" de ce qu'il veut ne soit finalement pas la bonne ..
J'ai en ce qui me concerne, réagi comme Renfield, qui a eu cette réaction :
citation :
"en faisant une liste des nombres possibles.
ajouter les nombres plusieurs fois, pour augmenter ses chances d'être choisi aléatoirement.

une fois un de ces nombres trouvés, en supprimer toutes les occurrences, pour ne pas retomber sur ce nombre."

Il est donc finalement sage d'attendre en effet que notre ami réapparaisse... et nous précise ce qu'il veut.
Amitiés.
Messages postés
3
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
28 mai 2012

Bonjour,

Désolé pour ce silence: ordinateur en panne. Carte mère HS + réinstallation complète.
Et merci de vous être penchés sur mon cas. Mais je crois que j'ai manqué de précision.

Voilà le code que j'ai actuellement (feuille excel 2007 pour visualiser les résultats, que je convertirais en Visual Studio dès que code opérationnel):
J'ai donc un nombre en [B3], je veux en soustraire des nombres tirés au sort (tblListe) jusqu'à arriver à zéro. Jusque là ça fonctionne. Mais il faudrait que certains nombres reviennent plus souvent que d'autres: par exemple tblListe(0) pratiquement jamais et tblListe(7) trés souvent. J'aimerais pondérer chaque valeur de tblListe, pour qu'elle soit tirée plus ou moins souvent. Vos commentaires sur le code sont également les bienvenus.

Private Sub BtnCalcul_Click()
   
Dim flag As Boolean
Dim ligne As Byte
Dim tirage As Single
Dim varX As Single
Dim varX2 As Single  'une fausse copie
Dim tblListe() As Single  'Tableau



'Remplir le tableau :
ReDim tblListe(7)
tblListe(0) = 1
tblListe(1) = 2
tblListe(2) = 3
tblListe(3) = 4
tblListe(4) = 5
tblListe(5) = 6
tblListe(6) = 7
tblListe(7) = 8



flag = False



While flag = False



ligne = 2
varX = [B3]
varX2 = [B3]
Range("C2:E40") = ""





Do
    Randomize
    tirage = tblListe(Int(Rnd * 8))
    varX2 = Round(varX - tirage, 1)
   
    If varX2 < 1 Then
        For t = UBound(tblListe) To 0 Step -1
            If varX >= tblListe(t) Then
                Me.Cells(ligne, 4).Value = tblListe(t)
                Me.Cells(ligne, 5).Value = varX - tblListe(t)
                Me.Cells(ligne, 3).Value = ligne - 1
                If varX - tblListe(t) = 0 Then
                   flag = True
                End If
                Exit Do
            End If
        Next t
        Exit Do
    Else
        varX = varX2
    End If
 
    Me.Cells(ligne, 4).Value = tirage ' pour visualiser les tirages
    Me.Cells(ligne, 5).Value = varX
    Me.Cells(ligne, 3).Value = ligne - 1
    ligne = ligne + 1
  
Loop



Wend



End Sub