Tirage au sort avec probabilité

clarisse

XLDnaute Nouveau
Tout d'abord, bonjour à tous, je suis nouvelle sur ce forum.

Je travaille actuellement sur un algorithme génétique, et j'ai le problème suivant :

j'ai les deux colonnes suivantes :
- dans la première, une liste de nombre
- dans la deuxième, des probabilités associés à chaque nombre.

J'aimerai générer dans VBA un tirage au sort de nombre de la première colonne, en fonction de leur probabilité associé.

Ou pour ceux qui connaissent les algorithmes génétiques, j'ai envisagé cela pour la selection des individus, peut-être avez vous une meilleure idée...

Merci.
 

ERIC S

XLDnaute Barbatruc
Bonjour

as-tu beaucoup de nombres ?
tes probabilités sont de quel niveau (le %....)?

peux-tu joindre un fichier sans données confidentielles bien sûr

as-tu une description mathématique de l'algorithme que tu veux utiliser ?

Tout cela pour quelqu'un qui n'est pas du domaine, afin de n epas t'envoyer vers une fausse piste

A+
 

clarisse

XLDnaute Nouveau
Merci beaucoup, mais j'ai trouvé la réponse à ce que je cherchais, je vais donc en faire profiter tout le monde :

en fait le but était de sélectionner des 'individus' (donc en fait, sélectionner des références situés dans la première colonne) de façon à ce qu'un individu ait d'autant plus de chance d'être sélectionné que sa probabilité est grande (les probabilités de chaque individu sont comprises strictement entre 0 ou 1, et leur somme est égale à 1)

il suffit donc de rajouter une troisième colonne de probabilité cumulée : (je continue l'explication avec un exemple, c'est plus simple à comprendre)

réf.....proba......cumul des probas
1.........0,3..........0,3
2.........0,4..........0,7
3.........0,1..........0,8
4.........0,2..........1,0

ensuite, on tire un nombre n entre 0 et 1, et :

si 0,0 <= n < 0,3 alors l'individu sélectionné est le 1

si 0,3 <= n < 0,7 alors l'individu sélectionné est le 2

si 0,7 <= n < 0,8 alors l'individu sélectionné est le 3

si 0,8 <= n < 1,0 alors l'individu sélectionné est le 4

cela respecte donc les probabilités de sélectionner chaque individu...

Merci pour avoir répondu à ma question,
bonne journée à tous.
 

CBernardT

XLDnaute Barbatruc
Bonjour Clarisse, EricS et le forum,

Un essai :

1- Les nombres sont placés en colonne A ;
2- les probabilités sont en colonne B ;
3- Un tirage aléatoire en fonction de la probabilité est placé en colonne E ;
4- le nombre de sorties est en cellule D2 ;
5- Les nombres en colonne A peuvent être remplacés par des noms.

Cordialement

Bernard [file name=TirageProbaV1.zip size=12496]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/TirageProbaV1.zip[/file]
 

Pièces jointes

  • TirageProbaV1.zip
    12.2 KB · Affichages: 507

Jack88

XLDnaute Nouveau
Re : Tirage au sort avec probabilité

Bonjour,

Dans un premier temps je voulais remercier Bernard pour son programme et l'aide qu'il m'a apporté jusqu'à maintenant.
Je viens ici car je suis bien bloqué...
Voici mon objectif:
Je cherche à effectuer une sélection aléatoire sans remise sur plusieurs populations à partir d'une taille spécifique d'échantillon.
J'ai donc repris le programme donné ici précédement et essayé de l'améliorer.
J'ai pu faire en sorte d'effectuer plusieurs sélections aléatoire à partir de plusieurs tailles de "tirage".

Néanmoins il me reste deux problèmes:
- La sélection aléatoire se fait avec remise,
- Même si la taille du "tirage" varie la sélection se fait toujours sur la même population.

Dans l'exemple en pièce jointe mes deux population sont séparés par des cellules vides.
Je vois bien qu'il faut modifier "lig = .Range("A1").End(xlDown).Row" pour que lig prenne la valeur de la dernière de chaque population.
J'espère avoir été clair et vous remercie d'avance de l'aide que vous pourrez m'apporter.









P.S:pour résumer dans l'exemple de deux populations:
1*Sélection aléatoire sans remise sur population 1 (de A1 à A70) à partir de la taille D2=10;
2*Sélection aléatoire sans remise sur population 2 (de A72 à A111) à partir de la taille D3=20;
Le but final serait de le faire sur 92 population et donc avec 92 tirages différent.
(Le 2nd fichier est un brouillon, s'il peut apporter plus de détails...)
 

Pièces jointes

  • Tirage aléatoire à plusieurs tailles des échantillons.xlsm
    29.3 KB · Affichages: 160
  • Test pour tirage aléatoire des échantillons.xlsx.xlsm
    50.7 KB · Affichages: 108
  • Test pour tirage aléatoire des échantillons.xlsx.xlsm
    50.7 KB · Affichages: 122
  • Test pour tirage aléatoire des échantillons.xlsx.xlsm
    50.7 KB · Affichages: 111

Jack88

XLDnaute Nouveau
Re : Tirage au sort avec probabilité

Juste une petite remarque.
Ici la notion de probabilité n'a pas d'importance.
Chaque valeur des populations ont la même probabilité et les sélections se font de façon indépendante entre chacune d'entre elles.

Merci à vous de prendre le temps de vous pencher sur cette question!
 

Jack88

XLDnaute Nouveau
Re : Tirage au sort avec probabilité

Cette question n'intéresse personne? :confused:

J'essaye pour le moment d'effectuer une itération pour trier mes échantillons séparés par une ligne vide.
Je suis donc partit sur quelquechose du type:

' Selectionne la première cellule du tableau
Range("A1").Select

' Boucle tant que pas vide
Do While Not (IsEmpty(ActiveCell))
lig = lig + 1
Selection.Offset(1, 0).Select
Set Plage = .Range("A2:A" & lig)
For Total = 1 To Round(Application.Sum(Plage.Offset(0, 1)) * 1000, 0)
v = v + 1
Next Total

Mais je bloque sur l'erreur en ligne n°3 de:
ReDim Tablo(Total, 1)
For Each Cell In Plage
For i = 1 To Round(Cell.Offset(0, 1).Value * 1000, 0)
j = j + 1
Tablo(j, 1) = Cell.Value
Next i
Next Cell

Quelqu'un pour me donner une piste?
D'avance merci!
P.S: Je précise que mes connaissance en Vba sont pour le moins limité. Je m'y suis remis depuis quelque jours pour mener à bien ce projet... Merci de votre compréhension.
 

Pièces jointes

  • Test pour tirage aléatoire des échantillons.xlsx.xlsm
    51.5 KB · Affichages: 161
  • Test pour tirage aléatoire des échantillons.xlsx.xlsm
    51.5 KB · Affichages: 135
  • Test pour tirage aléatoire des échantillons.xlsx.xlsm
    51.5 KB · Affichages: 145

Jack88

XLDnaute Nouveau
Re : Tirage au sort avec probabilité

Bon finalement quelqu'un à solutionner mon problème d'une manière bien plus simple sur un autre forum!

Je fais tout de même partager cette solution:

Sub tirer_sans_remise(nbre, plage, retour)
Dim Dico As Object, Popu As Byte,Col as Byte, Tirage As Double

If nbre = "" Then GoTo vide
Set Dico = CreateObject("scripting.dictionary")
Popu = Range(plage).Count
Col = Range(plage).Column

Randomize
While Dico.Count < nbre
Tirage = Cells(Int(Rnd * Popu) + 1, Col)
If Not Dico.exists(Tirage) Then Dico.Add Tirage, ""
Wend
Range(retour).Resize(nbre, 1) = Application.Transpose(Dico.keys)
Exit Sub

vide:
MsgBox "nombre de sélectonnés vide", vbCritical
End Sub

Sub test1()
tirer_sans_remise [D2], "A1:A70", "G1"
End Sub

Sub test2()
tirer_sans_remise [D3], "A72:A111", "H1"
End Sub
 

Statistiques des forums

Discussions
312 771
Messages
2 091 956
Membres
105 127
dernier inscrit
frada