Généraliser le cas décrit par Dilip Sarwate
Certaines des méthodes décrites dans les autres réponses utilisent un schéma dans lequel vous lancez une séquence de pièces dans un «tour» et, en fonction du résultat, vous choisissez un nombre compris entre 1 et 7 ou vous éliminez le tour et relancez.n
L'astuce consiste à trouver dans l'expansion des possibilités un multiple de 7 résultats avec la même probabilité et à les comparer les uns contre les autres.pk(1−p)n−k
Le nombre total de résultats n'étant pas un multiple de 7, nous avons quelques résultats que nous ne pouvons pas affecter à un nombre et nous avons une certaine probabilité que nous devions ignorer les résultats et recommencer.
Le cas de l'utilisation de 7 lancers de pièces par tour
Intuitivement, on pourrait dire que lancer les dés sept fois serait très intéressant. Comme nous n'avons besoin que de rejeter 2 possibilités sur . À savoir, les 7 fois têtes et 0 fois les têtes.27
Pour toutes les autres possibilités il existe toujours un multiple de 7 observations avec le même nombre de têtes. Soit 7 caisses à 1 tête, 21 caisses à 2 têtes, 35 caisses à 3 têtes, 35 caisses à 4 têtes, 21 caisses à 5 têtes et 7 caisses à 6 têtes.27−2
Donc, si vous calculez le nombre (en rejetant 0 tête et 7 têtes)X=∑k=17(k−1)⋅Ck
avec Bernoulli variables distribuées (valeur 0 ou 1), alors X modulo 7 est une variable uniforme avec sept résultats possibles.Ck
Comparer différents nombres de lancers de pièces par tour
La question reste de savoir quel serait le nombre optimal de rouleaux par tour. Lancer plus de dés par tour vous coûte plus cher, mais vous réduisez la probabilité de devoir relancer.
L'image ci-dessous montre un calcul manuel pour les premiers nombres de lancers de pièces par tour. (Peut-être y aurait-il une solution analytique, mais je pense qu’il est prudent de dire qu’un système à 7 lancers de pièces constitue la meilleure méthode en ce qui concerne la valeur d’attente pour le nombre nécessaire de lancers de pièces)
# plot an empty canvas
plot(-100,-100,
xlab="flips per turn",
ylab="E(total flips)",
ylim=c(7,400),xlim=c(0,20),log="y")
title("expectation value for total number of coin flips
(number of turns times flips per turn)")
# loop 1
# different values p from fair to very unfair
# since this is symmetric only from 0 to 0.5 is necessary
# loop 2
# different values for number of flips per turn
# we can only use a multiple of 7 to assign
# so the modulus will have to be discarded
# from this we can calculate the probability that the turn succeeds
# the expected number of flips is
# the flips per turn
# divided by
# the probability for the turn to succeed
for (p in c(0.5,0.2,0.1,0.05)) {
Ecoins <- rep(0,16)
for (dr in (5:20)){
Pdiscards = 0
for (i in c(0:dr)) {
Pdiscards = Pdiscards + p^(i)*(1-p)^(dr-i) * (choose(dr,i) %% 7)
}
Ecoins[dr-4] = dr/(1-Pdiscards)
}
lines(5:20, Ecoins)
points(5:20, Ecoins, pch=21, col="black", bg="white", cex=0.5)
text(5, Ecoins[1], paste0("p = ",p), pos=2)
}
Utiliser une règle d'arrêt précoce
Remarque: les calculs ci-dessous, pour la valeur d’attente du nombre de lancers, sont valables pour une pièce équitable , il serait désastreux de le faire pour un différent , mais le principe reste le même (bien que la comptabilité différente du cas est nécessaire)p=0.5p
Nous devrions pouvoir choisir les cas (au lieu de la formule pour ) de manière à pouvoir nous arrêter plus tôt.X
Avec 5 lancers de pièces, nous avons pour les six différents ensembles possibles de têtes et de queues non ordonnés:
1 + 5 + 10 + 10 + 5 + 1 jeux ordonnés
Et nous pouvons utiliser les groupes à dix cas (c'est-à-dire le groupe à 2 têtes ou le groupe à 2 queues) pour choisir (avec une probabilité égale) un nombre. Cela se produit dans 14 cas sur 2 ^ 5 = 32. Cela nous laisse avec:
1 + 5 + 3 + 3 + 5 + 1 jeux ordonnés
Avec un (6 ème) tirage supplémentaire, nous avons pour les sept différents ensembles non ordonnés de têtes et de queues:
1 + 6 + 8 + 6 + 8 + 6 + 1 ensembles ordonnés
Et nous pouvons utiliser les groupes à huit cas (c'est-à-dire le groupe à 3 têtes ou le groupe à 3 queues) pour choisir (avec une probabilité égale) un nombre. Cela se produit dans 14 cas sur 2 * (2 ^ 5-14) = 36 cas. Cela nous laisse avec:
1 + 6 + 1 + 6 + 1 + 6 + 1 jeux ordonnés
Avec un autre (7 e) jeton supplémentaire, nous avons pour les huit différents ensembles non ordonnés de têtes et de queues:
1 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 1 jeux ordonnés
Et nous pouvons utiliser les groupes de sept cas (tous sauf les queues et tous les cas de têtes) pour choisir (avec une probabilité égale) un nombre. Cela se produit dans 42 cas sur 44. Cela nous laisse avec:
1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 jeux ordonnés
(nous pourrions continuer cela mais ce n'est que dans la 49 ème étape que cela nous donne un avantage)
Donc, la probabilité de choisir un nombre
- à 5 tours est1432=716
- at 6 flips is9161436=732
- à 7 tours est11324244=231704
- pas dans 7 flips c'est1−716−732−231704=227
Cela rend la valeur d’attente du nombre de retournements d’un tour conditionnée par le succès et p = 0.5:
5⋅716+6⋅732+7⋅231704=5.796875
La valeur attendue pour le nombre total de retournements (jusqu'à ce qu'il y ait un succès), à condition que p = 0.5, devienne:
(5⋅716+6⋅732+7⋅231704)2727−2=539=5.88889
La réponse de NcAdams utilise une variante de cette stratégie de règle d’arrêt (à chaque fois propose deux nouveaux lancers de pièces) mais ne sélectionne pas de manière optimale tous les lancers.
La réponse de Clid pourrait être similaire, bien qu’il puisse exister une règle de sélection inégale selon laquelle un numéro peut être choisi pour chaque paire de pièces, mais pas nécessairement avec une probabilité égale (une anomalie est corrigée au cours de lancers de pièces ultérieurs).
Comparaison avec d'autres méthodes
D'autres méthodes utilisant un principe similaire sont celles de NcAdams et AdamO.
Le principe est le suivant : Une décision pour un nombre compris entre 1 et 7 est prise après un certain nombre de têtes et de queues. Après un nombre de retournements, pour chaque décision menant à un nombre il existe une décision similaire, tout aussi probable, menant à un nombre (le même nombre de têtes et de queues mais dans un ordre différent). Certaines séries de têtes et de queues peuvent conduire à une décision de recommencer.xij
Pour ce type de méthodes, celle qui est placée ici est la plus efficace car elle prend les décisions le plus tôt possible (dès qu’il est possible d’avoir 7 séquences de probabilités égales de têtes et de queues, après le ème retournement, on peut utiliser de prendre une décision sur un nombre et nous n’avons pas besoin de retourner si nous rencontrons un de ces cas).x
Ceci est démontré par l'image et la simulation ci-dessous:
#### mathematical part #####
set.seed(1)
#plotting this method
p <- seq(0.001,0.999,0.001)
tot <- (5*7*(p^2*(1-p)^3+p^3*(1-p)^2)+
6*7*(p^2*(1-p)^4+p^4*(1-p)^2)+
7*7*(p^1*(1-p)^6+p^2*(1-p)^5+p^3*(1-p)^4+p^4*(1-p)^3+p^5*(1-p)^2+p^6*(1-p)^1)+
7*1*(0+p^7+(1-p)^7) )/
(1-p^7-(1-p)^7)
plot(p,tot,type="l",log="y",
xlab="p",
ylab="expactation value number of flips"
)
#plotting method by AdamO
tot <- (7*(p^20-20*p^19+189*p^18-1121*p^17+4674*p^16-14536*p^15+34900*p^14-66014*p^13+99426*p^12-119573*p^11+114257*p^10-85514*p^9+48750*p^8-20100*p^7+5400*p^6-720*p^5)+6*
(-7*p^21+140*p^20-1323*p^19+7847*p^18-32718*p^17+101752*p^16-244307*p^15+462196*p^14-696612*p^13+839468*p^12-806260*p^11+610617*p^10-357343*p^9+156100*p^8-47950*p^7+9240*p^6-840*p^5)+5*
(21*p^22-420*p^21+3969*p^20-23541*p^19+98154*p^18-305277*p^17+733257*p^16-1389066*p^15+2100987*p^14-2552529*p^13+2493624*p^12-1952475*p^11+1215900*p^10-594216*p^9+222600*p^8-61068*p^7+11088*p^6-1008*p^5)+4*(-
35*p^23+700*p^22-6615*p^21+39235*p^20-163625*p^19+509425*p^18-1227345*p^17+2341955*p^16-3595725*p^15+4493195*p^14-4609675*p^13+3907820*p^12-2745610*p^11+1592640*p^10-750855*p^9+278250*p^8-76335*p^7+13860*p^6-
1260*p^5)+3*(35*p^24-700*p^23+6615*p^22-39270*p^21+164325*p^20-515935*p^19+1264725*p^18-2490320*p^17+4027555*p^16-5447470*p^15+6245645*p^14-6113275*p^13+5102720*p^12-3597370*p^11+2105880*p^10-999180*p^9+371000
*p^8-101780*p^7+18480*p^6-1680*p^5)+2*(-21*p^25+420*p^24-3990*p^23+24024*p^22-103362*p^21+340221*p^20-896679*p^19+1954827*p^18-3604755*p^17+5695179*p^16-7742301*p^15+9038379*p^14-9009357*p^13+7608720*p^12-
5390385*p^11+3158820*p^10-1498770*p^9+556500*p^8-152670*p^7+27720*p^6-2520*p^5))/(7*p^27-147*p^26+1505*p^25-10073*p^24+49777*p^23-193781*p^22+616532*p^21-1636082*p^20+3660762*p^19-6946380*p^18+11213888*p^17-
15426950*p^16+18087244*p^15-18037012*p^14+15224160*p^13-10781610*p^12+6317640*p^11-2997540*p^10+1113000*p^9-305340*p^8+55440*p^7-5040*p^6)
lines(p,tot,col=2,lty=2)
#plotting method by NcAdam
lines(p,3*8/7/(p*(1-p)),col=3,lty=2)
legend(0.2,500,
c("this method calculation","AdamO","NcAdams","this method simulation"),
lty=c(1,2,2,0),pch=c(NA,NA,NA,1),col=c(1,2,3,1))
##### simulation part ######
#creating decision table
mat<-matrix(as.numeric(intToBits(c(0:(2^5-1)))),2^5,byrow=1)[,c(1:12)]
colnames(mat) <- c("b1","b2","b3","b4","b5","b6","b7","sum5","sum6","sum7","decision","exit")
# first 5 rolls
mat[,8] <- sapply(c(1:2^5), FUN = function(x) {sum(mat[x,1:5])})
mat[which((mat[,8]==2)&(mat[,11]==0))[1:7],12] = rep(5,7) # we can stop for 7 cases with 2 heads
mat[which((mat[,8]==2)&(mat[,11]==0))[1:7],11] = c(1:7)
mat[which((mat[,8]==3)&(mat[,11]==0))[1:7],12] = rep(5,7) # we can stop for 7 cases with 3 heads
mat[which((mat[,8]==3)&(mat[,11]==0))[1:7],11] = c(1:7)
# extra 6th roll
mat <- rbind(mat,mat)
mat[c(33:64),6] <- rep(1,32)
mat[,9] <- sapply(c(1:2^6), FUN = function(x) {sum(mat[x,1:6])})
mat[which((mat[,9]==2)&(mat[,11]==0))[1:7],12] = rep(6,7) # we can stop for 7 cases with 2 heads
mat[which((mat[,9]==2)&(mat[,11]==0))[1:7],11] = c(1:7)
mat[which((mat[,9]==4)&(mat[,11]==0))[1:7],12] = rep(6,7) # we can stop for 7 cases with 4 heads
mat[which((mat[,9]==4)&(mat[,11]==0))[1:7],11] = c(1:7)
# extra 7th roll
mat <- rbind(mat,mat)
mat[c(65:128),7] <- rep(1,64)
mat[,10] <- sapply(c(1:2^7), FUN = function(x) {sum(mat[x,1:7])})
for (i in 1:6) {
mat[which((mat[,10]==i)&(mat[,11]==0))[1:7],12] = rep(7,7) # we can stop for 7 cases with i heads
mat[which((mat[,10]==i)&(mat[,11]==0))[1:7],11] = c(1:7)
}
mat[1,12] = 7 # when we did not have succes we still need to count the 7 coin tosses
mat[2^7,12] = 7
draws = rep(0,100)
num = rep(0,100)
# plotting simulation
for (p in seq(0.05,0.95,0.05)) {
n <- rep(0,1000)
for (i in 1:1000) {
coinflips <- rbinom(7,1,p) # draw seven numbers
I <- mat[,1:7]-matrix(rep(coinflips,2^7),2^7,byrow=1) == rep(0,7) # compare with the table
Imatch = I[,1]*I[,2]*I[,3]*I[,4]*I[,5]*I[,6]*I[,7] # compare with the table
draws[i] <- mat[which(Imatch==1),11] # result which number
num[i] <- mat[which(Imatch==1),12] # result how long it took
}
Nturn <- mean(num) #how many flips we made
Sturn <- (1000-sum(draws==0))/1000 #how many numbers we got (relatively)
points(p,Nturn/Sturn)
}
une autre image qui est mise à l'échelle par pour une meilleure comparaison:p∗(1−p)
zoomer en comparant les méthodes décrites dans ce post et les commentaires
le «saut conditionnel de la 7ème étape» est une légère amélioration qui peut être apportée par rapport à la règle d'arrêt précoce. Dans ce cas, vous ne sélectionnez pas les groupes à probabilités égales après le 6ème retournement. Vous avez 6 groupes avec des probabilités égales et 1 groupes avec une probabilité légèrement différente (pour ce dernier groupe vous devez retourner une fois de plus en plus lorsque vous avez 6 têtes ou queues et parce avec la même probabilité après tout)
Écrit par StackExchangeStrike