Enoncé de l'exercice :
http://www.silicium.org/forum/viewtopic ... 46&t=39063
Quand on regarde les réponses, plusieurs sont partis sur des
simulations de lois plutôt que sur la
simulation d'un tirage de boules. Effectivement, s'il y a N boules Noires et B boules Blanches, les probabilités d'obtenir à l'étape suivante une boule N ou R sont respectivement N / (N+R) et R / (N+R). On peut alors simuler une loi de Bernoulli (pile ou face) ayant une probabilité de succès p = N / (N+R). C'est ce que l'on retrouve par exemple dans le programme de @caloubugs :
Mais dans ce cas là il y a déjà eu une analyse de l'expérience et finalement il faut s'y connaitre en probas ! Une autre solution est de modéliser l'expérience sans a priori (c'est-à-dire ici répéter X fois "tirer une des boules et ajouter une nouvelle boule de la même couleur"). On aura ainsi un résultat à cette expérience (par exemple NBNNBNNBNN si X=8), ces résultats pouvant être très différents les uns des autres. Quand vous lancez une pièce équilibrée 10 fois, il est possible d'obtenir PPP...P 10 fois et la fois suivante FFF..F 10 fois mais en répétant cette même expérience "lancer 10 fois une pièce", la loi des grands nombres nous dit qu'en moyenne vous aurez autant de Pile que de Face.
C'est la remarque de @badaze qui met le doigt sur la distinction entre simuler un vrai tirage (on doit donc mémoriser toutes les boules) et la simulation d'une loi. Il constate également les écarts qu'il peut y avoir d'une expérience à l'autre mais oublie que c'est la loi des grands nombres qui nous permet malgré tout de donner une réponse sur le long terme :
En fait je ne comprends pas vos solutions. Pour pouvoir simuler un sac contenant des billes il faut qu'à chaque tirage on puisse tirer une boule blanche ou noire. Donc la structure qui les contient doit les contenir de manière unitaire. Comme ce serait le cas avec un vrai sac.
Or de ce que je comprends, vous vous basez tous sur des probabilités alors que d'un tirage à l'autre il peut y avoir de sacrés écarts.
Or dans cet exercice, il n'est pas évident de savoir quelles proportions de N et de B il y aura en moyenne, en ayant répété des centaines de fois l'expérience.
Voici un code APL pour simuler un "vrai" tirage de boules
Ce qui signifie qu'en partant de 2 boules 1 2 (1 représente Noir et 2 Blanc) et en ajoutant 10 fois une boule avec les règles de l'exercice, on est arrivé à 5 boules Noires et 7 boules Blanches. Explication du code :
Code : Tout sélectionner
u←1 2 ⍝ Au démarrage, 1 N et 1 B
?⍴u ⍝ Choisir un nombre entre 1 et la taille de u
1 ⍝ il a choisi 1
u[?⍴u] ⍝ Quelle est la valeur de u qui est à la position ?⍴u =1
1
u←u,u[?⍴u] ⍝ Ajouter à u une boule identique
u
1 2 1 ⍝ il y a maintenant 2 boules N et 1 boule B
u←u,u[?⍴u] ⍝ On recommence
u
1 2 1 2
u←u,u[?⍴u]
u
1 2 1 2 1
u←u,u[?⍴u]
u
1 2 1 2 1 1
En sachant que ⍣ permet d'appliquer un même processus (fonction) plusieurs fois :
signifie partir ⍳2 = 1 2 et répéter 10 fois "tirer une boule dans le sac et en ajouter une de la même couleur".
Il reste à compter le nombre de N et de B et on obtient le code {+/(⍳2)∘.=({⍵,⍵[?⍴⍵]}⍣⍵)⍳2} puisque :
Code : Tout sélectionner
{(⍳2)∘.=({⍵,⍵[?⍴⍵]}⍣⍵)⍳2} 10
1 0 0 1 1 1 1 1 0 1 1 1
0 1 1 0 0 0 0 0 1 0 0 0
permet sur la 1ere ligne de compter le nombre de 1 et sur la seconde ligne le nombre de 2.
Cela répond à l'exercice qui était d'afficher le résultat d'une expérience, par exemple :
Code : Tout sélectionner
tirage 1000
88 914 ⍝ A la fin de l'expérience il y avait 88 boules N et 914 boules B
tirage 1000
370 632 ⍝ A la fin de l'expérience il y avait 370 boules N et 632 boules B
Mais cela ne nous dit pas combien, en moyenne, il y a de boules N et R dans le sac si on répète cette expérience de nombreuses fois (je passe sous silence la notion d'intervalle de confiance (voir message de @caloubugs)).
Code : Tout sélectionner
simul←{(÷+/r)×r←⊃+/tirage¨⍺⍴⍵}
200 simul 100
0.4778431373 0.5221568627
Ce programme répète 200 fois l'expérience où l'on décide d'ajouter 100 boules avec les règles de l'exercice. On obtient alors en moyenne 47,8% de boules N et 52,2% de boules B.
Répéter 1000 fois l'expérience en ajoutant 1000 boules, la proportion de N et B s'équilibre.
En modifiant légèrement simul, on peut représenter le % de Noires dans le sac en répétant 1, 2, ... 1000 fois l'expérience (qui consiste elle-même à ajouter 1000 boules)
Code : Tout sélectionner
simul←{{⊃⍵÷+/⍵}¨+\tirage¨⍺⍴⍵}
]OUTPUT.Plot -type=Line 1000 simul 1000
- Boules noires
- Noires.jpg (18.3 Kio) Vu 12865 fois
Remarque après discussion avec @C.Ret :
En analysant l'épreuve, on constate que cela revient à choisir aléatoirement un nombre de boules (entre 0 et N) d'une certaine couleur et à compléter le sac par des boules de l'autre couleur. Par exemple, si N=10 et en partant toujours d'une boule N et B, on choisira par exemple 7 boules Noires (et donc 10 - 7 = 3 boules blanches) pour arriver à l'événement "8 N et 4 B".
Dans ce cas les calculs sont immédiats (mais on ne voit plus l'évolution du contenu du sac pour arriver au résultat) :
Code : Tout sélectionner
simul←{(⍵ + 2 - B), B← ?⍵+1} ⍝ Nb aléatoire de Blanc entre 1 et ⍵+1 et complément ⍵+2-r pour les Noires
simul 0
1 1
simul 100
38 64
simul 10000
2715 7287