Dépiper un dé pipé
Bonjour
On se méfie d'un dé à six faces, qu'on soupçonne d'être fortement pipé.
On note $X$ la loi du dé : $\forall\,k\in\llbracket 1,6\rrbracket,\;\mathbb{P}(X=k)>0$.
On lance le dé jusqu'à obtenir six résultats successifs différents, et on ne retient de tout cela que le résultat du dernier lancé.
On est d'accord qu'on a ainsi rendu le dé honnête?
Deuxième question: quelle est l'espérance du temps d'attente de cette première succession de six résultats différents?
On se méfie d'un dé à six faces, qu'on soupçonne d'être fortement pipé.
On note $X$ la loi du dé : $\forall\,k\in\llbracket 1,6\rrbracket,\;\mathbb{P}(X=k)>0$.
On lance le dé jusqu'à obtenir six résultats successifs différents, et on ne retient de tout cela que le résultat du dernier lancé.
On est d'accord qu'on a ainsi rendu le dé honnête?
Deuxième question: quelle est l'espérance du temps d'attente de cette première succession de six résultats différents?
Réponses
-
Bonjour.
On n'a pas changé le dé, on ne l'a pas rendu honnête.
Mais le tirage non plus : les numéros les plus probables ayant tendance à sortir les premiers seront rarement les sixièmes.
Cordialement. -
Vais-je savoir faire ça ?
Trouver la loi de la dernière face d’une série de six faces distinctes consécutives.Comme les lancers sont indépendants, je m’interroge…
Par contre, si une face ne sort jamais ($p_i=0$ pour au moins un $i$ ce n’est pas dans les hypothèses) alors on ne joue pas avec ce dé.Édit : essayons avec une pièce où on a la probabilité $p$ pour Pile et $q$ pour Face.On souhaite connaître la loi de Pile/Face lorsque l’on jette la pièce et qu’on regarde Pile alors qu’avant on n’a eu que des Faces (et vice versa). -
Si je ne me trompe pas, j’ai échangé $p$ et $q$, non ? 😀
-
Oui ça marche jmf, à condition de recommencer une nouvelle série depuis rien après chaque échec (tirer une face déjà sortie dans la série).
-
Tel que je le comprends, ça ne marche pas.
import numpy.random as nr
rng=nr.default_rng()
# Simule un dé pipé qui tombe sur 1 avec une proba 1/20, 2 avec une proba 1/20
# 3 avec une proba 2/20, 4 avec une proba 3/20, 5 avec une proba 4/20
# et 6 avec une proba 9/20
def de():
a=rng.integers(20)
if a==0:
return 1
elif a==1:
return 2
elif a==2 or a==3:
return 3
elif a==4 or a==5 or a==6:
return 4
elif a==7 or a==8 or a==9 or a==10:
return 5
else:
return 6
# Simule les lancers jusqu'à en avoir 6 successifs différents, et renvoie le dernier
def T():
(x,y,z,u,v,w)=(de(),de(),de(),de(),de(),de())
while len(set([x,y,z,u,v,w]))<6:
(x,y,z,u,v,w)=(y,z,u,v,w,de())
return wSur 6000 appels de T, le nombre de 1,2,...,6 obtenus est : 1170, 1230, 1010, 1051, 948, 591. Ça ne m'a pas l'air très uniforme.Edit : la balise code n'a pas l'air de marcher. Si un modérateur passe par là...
-
Il faut recommencer dès que ça foire, Guego.
Algebraic symbols are used when you do not know what you are talking about.
-- Schnoebelen, Philippe -
Recommencer quoi dès que quoi foire ?
-
Je ne comprends pas ce que vous dites : pourquoi « recommencer » ? Ou plutôt n’est-ce pas déjà écrit dans l’énoncé ?
Si j’ai bien compris : on jette le dé jusqu’au avoir 123456 ou 524316 ou 256413 par exemple (avec interdiction d’avoir une telle série avant car on se serait alors arrêté). -
Dès qu’une occurrence apparaît en double.
#!/usr/bin/python3
Sortie :
from random import choice
dé=(1,2,3,3,4,4,4,5,5,5,5,6,6,6,6,6,6,6,6,6)
compte={1:0,2:0,3:0,4:0,5:0,6:0}
for _ in range(10000):
while True:
lancers=[]
while True:
d=choice(dé)
if d not in lancers:
lancers.append(d)
if len(lancers)==6:
break
else:
break
if len(set(lancers))==6:
compte[d]+=1
break
print(compte)> ./dépipé.py
Ça ressemble plus à une loi uniforme.
{1: 1619, 2: 1652, 3: 1651, 4: 1688, 5: 1693, 6: 1697}
Algebraic symbols are used when you do not know what you are talking about.
-- Schnoebelen, Philippe -
Dès qu’une occurrence apparaît en double.
C'est bien ce que je fais : si je n'ai pas 6 résultats différents, je refais un lancer. Ce que tu dis est qu'il faut refaire 6 lancers, c'est-à-dire ne travailler qu'avec des paquets des 6 qui ne se chevauchent pas ?
Si oui, ça n'était pas très clair dans le message initial.
-
Imaginons la séquence 1233456123
1233 : Ah doublon, on efface tout. Ou encore, on ajoute un point après ce 3 : 1233.456123
Et donc 3.45612 n'est pas une séquence valide.
Mais 456123 est une séquence valide.
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. Benjamin Franklin -
Ha…
par exemple si « xxxxx123456 » est sortie (et donne 6, donc) alors on interdit d’avoir 6 avec un autre « xxxx123456 » mais on l’accepte avec par exemple « xxx432156 », c’est ça ?
-
Si il y a seulement deux faces avec probabilité $p$ pour la face $1$, $(1-p)$ pour la face $2$.Alors la probabilité du tirage $112$ est $p^2(1-p)$Celle du tirage $221$ est $(1-p)^2p$, donc c'est différent si $p \neq 1/2,0$ ou $1$.Mais si on recommence dès que l'on a deux fois la même face, alors la probabilité de $12$ est $p(1-p)$ et celle de $21$ est $(1-p)p$, donc c'est la même probabilité.
-
@Jmf je crois plutôt qu'il faut procéder comme ont dit nicolas.patrois et marco autrement ton dé reste pipé. Regarde ce qu'il se passe avec l'exemple plus simple de marco, tu verras que ça ne marche pas si tu attends 2 lancés successifs distincts.
Pour revenir à ton cas ce qu'il faut faire c'est supprimer l'issue si on a un doublon. Par exemple 1,2,3,2 je m'arrête car doublon. Mais 1,2,6,4,5,3 c'est bon. Là ce n'est plus pipé.
En ce qui concerne la deuxième question, étant donné que la probabilité d'obtenir une séquence de 6 résultats distincts est $6! \prod_{k=1}^6 P(X=k)$ on peut poser $p:=6! \prod_{k=1}^6 P(X=k)$ et le temps d'attente suit une loi géométrique de paramètre $p$ dont l'espérance est $1/p$. -
Pour dépiper un dé on fait une course: On prend 6 copies du même dé (ce qui revient à faire des listes de 6 lancers consécutifs du même dé).On regarde la première liste où l'un des dés tombe sur un as mais pas les autres. Le numéro du dé en question est alors le numéro du tirage. On peut ensuite recommencer (on suppose tout de même que la probabilité de tirer un as n'est pas nulle, sinon on prend une autre face).Une fonction est un ensemble $f$ de couples tel que pour tous $x,y,z$, si $(x,y)\in f$ et $(x,z)\in f$ alors $y = z$.
-
Pour le dé avec deux faces, j’ai démontré qu’en effet on obtient pas 1/2 pour chaque. On a même échange des probabilités de chaque face.
-
@jmf : ça ne fonctionnera pas de cette manière, comme l'expliquait gerard0. Imagine que ton dé donne $1$ avec proba $1-\epsilon$ et toute autre valeur avec proba $\frac1{5\epsilon}$. Lorsque $\epsilon \to 0$, tous les échecs seront provoqués par un double 1 avec très grande probabilité. La probabilité de finir la première série de $6$ valeurs distinctes avec $1$ sera donc négligeable. Il faut repartir de zéro après un échec pour éviter ce problème, comme sur l'exemple de lourran.
-
Ha ! Le temps de poster et je ne fais pas gaffe aux messages tombés entre temps.En effet, je viens de voir le message de Lourrran.Si on 132454, on arrête tout et on recommence ?
remarque : si on accepte la règle du jeu de départ (qui ne normalise pas le dé), a-t-on un moyen simple de connaître la loi du tirage ? (Des matrices là-dedans ?) -
La méthode de jmf ne convient pas, c'est certain.
La méthode rectifiée selon les directives de Nicolas.Patrois convient-elle ?Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. Benjamin Franklin -
Notons $q_k = k! \sum\limits_{1 \leq i_1 < \dots < i_k \leq 6} p(i_1)\dots p(i_k)$ la probabilité d'avoir $(X_1,\dots,X_k)$ distincts.La probabilité de réussir une série de $6$ valeurs distinctes est $q_6$, donc :
- le nombre de séries ratées aura pour espérance $\frac1{q_6}-1$ (loi géométrique) ;
- la longueur moyenne d'une série ratée est $\frac1{1-q_6}\sum_{k=2}^6 k(q_{k-1} - q_k)$.
L'espérance du nombre total de lancers avec la méthode de jmf corrigée sera donc : $$6 + \frac{1}{q_6}\sum_{k=2}^6 k(q_{k-1}-q_k).$$ - le nombre de séries ratées aura pour espérance $\frac1{q_6}-1$ (loi géométrique) ;
-
@lourrran : pour la méthode de jmf corrigée, les séries sont indépendantes donc ça revient à calculer $$\pi_k = P\left(X_6 = k \mid X_1,\dots,X_6 \text{ sont distincts}\right).$$Faisons-le pour $k = 6$, les autres cas étant symétriques : $$\pi_6 = \frac{\sum_{\sigma \in \mathfrak S_5} p\big(\sigma(1)\big)\cdots p\big(\sigma(5)\big)p(6)}{\sum_{\sigma \in \mathfrak S_6} p\big(\sigma(1)\big)\cdots p\big(\sigma(6)\big)} = \frac{5!\, p(1)\cdots p(6)}{6!\, p(1)\cdots p(6)} = \frac16.$$
-
ok ok, la méthode initiale (disons méthode 0) de dépipage ne fonctionne pas, et ça se voit très bien avec le cas d'une pièce comme l'on fait remarquer plusieurs personnes. Je me suis enduit d'erreur tout seul.
Méthode 1: on effectue six lancés, puis six autres, puis six autres, jusqu'à voir apparaître 6 lancés différents. Et on retient le tout dernier résultat. et là le numéro tiré suit une loi uniforme?
Méthode 2: on attend de voir apparaître six lancés différents, sachant qu'on recommence à zéro si on tombe sur un numéro déjà sorti.
méthode 0 : $\fbox{1,2,3}$, $\fbox{5,1,6,2,3,4}$ : 9 lancés, résultat retenu 4
méthode 1 : $\fbox{1,2,3,5,1,6}$ $\fbox{1,2,3,4,5,6}$ : 12 lancés, résultat retenu 6
méthode 2 : $\fbox{1,2,3,5,1}$ $\fbox{6,1,2,3,4,5}$ : 11 lancés, résultat retenu 5 -
merci @lourran @Pomme de terre et les autres
@lourran ce que tu appelles "méthode de jmf corrigée" c'est bien la méthode 2 ci-dessus? -
Oui, la méthode 2.
La méthode 1 me paraît bonne, et plus facile à prouver que la 2.Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. Benjamin Franklin -
En tout cas, il faut presque deux fois plus de lancers dans le cas 2 :
#!/usr/bin/python3 from random import choice dé=(1,2,3,3,4,4,4,5,5,5,5,6,6,6,6,6,6,6,6,6) compte={1:0,2:0,3:0,4:0,5:0,6:0} l=0 n=10000 for _ in range(n): while True: lancers=[] while True: d=choice(dé) l+=1 if d not in lancers: lancers.append(d) if len(lancers)==6: break else: break if len(set(lancers))==6: compte[d]+=1 break print("cas 1") print(l,n,compte) compte={1:0,2:0,3:0,4:0,5:0,6:0} l=0 for _ in range(n): while True: lancers=[choice(dé) for _ in range(6)] l+=6 if len(set(lancers))==6: compte[lancers[-1]]+=1 break print("cas 2") print(l,n,compte)
Le résultat :cas 1 13092378 10000 {1: 1585, 2: 1679, 3: 1698, 4: 1684, 5: 1685, 6: 1669} cas 2 24330906 10000 {1: 1648, 2: 1695, 3: 1662, 4: 1709, 5: 1600, 6: 1686}
Algebraic symbols are used when you do not know what you are talking about.
-- Schnoebelen, Philippe -
@nicolas.patrois
Ton cas 1 correspond à ce que j'ai appelé "méthode 2" (recommencer à zéro si lancé est en doublon) et ton cas 2 à la méthode 1(blocs de 6 lancés successifs) -
#R-4.1.3 p0<-function(p,n){l<-c(0,0,0,0,0,0);i<-0;p<-p/sum(p);p<-cumsum(p) while(i<n){i<-i+1;m<-c() while(length(m)<6 || length(unique(m[(length(m)-5):length(m)]))<6){a<-runif(1);m<-c(m,1+sum(a>p))} a<-m[length(m)];l[a]<-l[a]+1} return(l)} p1<-function(p,n){l<-c(0,0,0,0,0,0);i<-0;p<-p/sum(p);p<-cumsum(p) while(i<n){i<-i+1;k<-0 while(k<1){m<-runif(6,0,1);mm<-c() for(j in 1:6){mm<-c(mm,1+sum(m[j]>p))} if(length(unique(mm))==6){k<-mm[6]}} l[k]<-l[k]+1} return(l)} p2<-function(p,n){l<-c(0,0,0,0,0,0);i<-0;p<-p/sum(p);p<-cumsum(p) while(i<n){i<-i+1;m<-c() while(length(m)<6){a<-runif(1);m<-c(m,1+sum(a>p)) if(length(unique(m))<length(m)){m<-c()}} a<-m[6];l[a]<-l[a]+1} return(l)} > p<-c(1,2,10,3,7,6) > p0(p,60000) [1] 11919 11591 7478 10779 8921 9312 > p1(p,60000) [1] 10060 9927 9891 9924 10081 10117 > p2(p,60000) [1] 9961 9981 10020 9954 9983 10101
Effectivement, les méthodes 1 et 2 semblent fonctionner
Edit : Je précise effectivement que p2 semble effectuer environ 45% de lancers de dés en moins que p1, avec les poids que j'ai choisi.
Si je modifie les poids avec une face "très lourde" (ex : p<-c(1,2,50,3,7,6) ), j'obtiens même 56% de lancers en moins.
A voir avec des poids encore plus lourds ! -
Bonjour,$\def\esp#1{\mathrm{E}\left(#1\right)}$ Jusqu'à maintenant, personne n'a ne serait-ce qu'évoqué les beaux Réliens, les $\Omega$ et autres magnifiques choses qui sont infligées aux étudiants dès que l'on évoque les probas-stats. Seraient-ils à ce point inutiles ?Le coeur de l'affaire, c'est la notion d'indépendance et donc la description des points de renouvellement du processus. De ce point de vue, les deux processus " 1" et " 2" sont absolument identiques. En fait, ils ne se distinguent que par des détails de programmation. Lorsque l'on procède à un bloc de six lancers successifs et que, au k-ième lancer on constate une collision avec les résultats déjà obtenus, on a le choix entre faire effectivement les 6-k lancers restants (qui ne changeront rien au fait qu'une collision a déjà eu lieu), ou ne pas les faire mais les compter quand même dans $L_{1}$, ou bien ne pas les compter dans $L_{2}$ (qu'on les fasse ou non). Cela donne, comme déjà dit par @Pomme_de_terre (msg-2352927)\[ \esp{L_{1}}=N\times\frac{6}{q_{6}}\;;\;\esp{L_{2}}=N\times\left(6+\frac{1}{q_{6}}\sum_{k=2}^{6}k\left(q_{k-1}-q_{k}\right)\right) \]Avec les données choisies par @nicolas_patrois (msg-2352905), cela donne respectivement \[ N\times2469.136\;;\;N\times1333.014 \] soit un " bon accord pifométrique" avec les résultats expérimentaux (2433 et 1309). On sait que l'on peut utiliser l'indicateur $\chi^{2}$ de Pearson pour tester l'accord entre les valeurs expérimentales des nombres de visites avec leurs valeurs théoriques, soit $N/6$.Cela donneadd((j-N/6)\textasciicircum 2/(N/6), j=[1585, 1679, 1698, 1684, 1685, 1669]) $\mapsto5.067$add((j-N/6)\textasciicircum 2/(N/6), j=[1648, 1695, 1662, 1709, 1600, 1686]) $\mapsto4.670$Comme l'espérance du $\chi^{2}$ est $5$, et sa variance $10.002\simeq10$, les résultats sont presque " trop beaux" .Par comparaison la série p0(p,60000) de @Zgrb (msg-2352952) donne un $\chi^{2}$ réduit de 467... valeur horrible, en effet !Mais il ne faudrait pas en conclure que l'une des méthodes est $2469/1333$ fois " meilleure" que l'autre. En effet, il n'y a pas que les appels au générateur aléatoire qui ont un coût. Les structures de données utilisées (append, détection de collision, etc) ont elles aussi leur importance: il serait intéressant de comparer les durées d'exécution.
Cordialement, Pierre. -
Ça vaut ce que ça vaut (pas lourd mais quand même) :
> time ./dépipé.py cas 1 13402899 10000 {1: 1546, 2: 1683, 3: 1659, 4: 1723, 5: 1679, 6: 1710} real 0m42,990s user 0m34,489s sys 0m0,156s > time ./dépipé.py cas 2 24722604 10000 {1: 1593, 2: 1650, 3: 1715, 4: 1678, 5: 1722, 6: 1642} real 1m2,682s user 0m46,698s sys 0m0,282s
Algebraic symbols are used when you do not know what you are talking about.
-- Schnoebelen, Philippe -
J'ai l'impression qu'il faut traduire cela par 34 secondes utiles pour l'un et 47 secondes utiles pour l'autre, ratio= 1.38. Tandis que 'real' mesure en plus ce que nicolas.patrois faisait d'autre avec son ordi (durées 43s versus 62s), soit 9 secondes versus 15 secondes (cum grano salis).
-
Les 62 secondes réelles, c’est à cause de mon vieux tromblon.
Algebraic symbols are used when you do not know what you are talking about.
-- Schnoebelen, Philippe
Connectez-vous ou Inscrivez-vous pour répondre.
Bonjour!
Catégories
- 163.2K Toutes les catégories
- 9 Collège/Lycée
- 21.9K Algèbre
- 37.1K Analyse
- 6.2K Arithmétique
- 53 Catégories et structures
- 1K Combinatoire et Graphes
- 11 Sciences des données
- 5K Concours et Examens
- 11 CultureMath
- 47 Enseignement à distance
- 2.9K Fondements et Logique
- 10.3K Géométrie
- 65 Géométrie différentielle
- 1.1K Histoire des Mathématiques
- 69 Informatique théorique
- 3.8K LaTeX
- 39K Les-mathématiques
- 3.5K Livres, articles, revues, (...)
- 2.7K Logiciels pour les mathématiques
- 24 Mathématiques et finance
- 314 Mathématiques et Physique
- 4.9K Mathématiques et Société
- 3.3K Pédagogie, enseignement, orientation
- 10K Probabilités, théorie de la mesure
- 773 Shtam
- 4.2K Statistiques
- 3.7K Topologie
- 1.4K Vie du Forum et de ses membres