la suite de variables aléatoires "permutation des cartes obtenue au bout de n répétitions d'échange" ne converge pas vers la distribution uniforme sur l'ensemble des permutations
GaBuZoMeu a écrit:Alors, Beagle, as-tu compris pourquoi ton "évidence", telle que je l'ai explicitée, est fausse :la suite de variables aléatoires "permutation des cartes obtenue au bout de n répétitions d'échange" ne converge pas vers la distribution uniforme sur l'ensemble des permutations
ben je dis tout le monde sans aucune formation mathématique dira que ce procédé bat les cartes = si elles n'étaient pas bien mélangées elles le deviennent de plus en plus.
Dans tes différents exemples il y a une évidence:
-il est évident que la situation que j'ai décrite est évidente, ce qui signifie que le jour où je dois le prouver par le calcul, ben je recommence au moins dix fois le calcul si je ne tombe pas sur un résultat cohérent.
-inversement, dans les situations que tu décrits, il y ades éléments alertes qui font tiquer, si bien que si je dois passer par le calcul, je vais recommencer une seule fois = verifier mes calculs et j'accepterai le resultat du calcul
import random as rd
import matplotlib.pyplot as pltDebut=[1,2,3,4,5]
# stratégie échange :
# échange d'une carte tirée au hasard parmi les trois premières
# avec une carte tirée au hasard parmi les deux dernières
def Echange(Paquet):
i=rd.randrange(3)
j=rd.randrange(3,5)
gare=Paquet[j]
Paquet[j]=Paquet[i]
Paquet[i]=gare
return Paquet
# puissance d'une permutation cyclique du paquet
def Cycle(Paquet,n):
Vieux=Paquet.copy()
for i in range(5):
Paquet[i]=Vieux[(i+n)%5]
return Paquet
# échange des deux premières cartes
def Transpo(Paquet):
gare=Paquet[1]
Paquet[1]=Paquet[0]
Paquet[0]=gare
return Paquet
# stratégie mélange :
# manip tirée au hasard entre les deux précédentes
def Melange(Paquet):
i=rd.randrange(3)
if i==0 : Transpo(Paquet)
else : Cycle(Paquet,i)
return Paquet
# numérotation d'un paquet
def Num(Paquet):
Reste=Paquet.copy()
ind=0
for i in range(1,5):
ind=(ind+Reste.index(i))*(5-i)
Reste.remove(i)
return ind# numéro du paquet obtenu après nb manips d'une stratégie
def Fin(Strategie,nb):
Paquet=Debut.copy()
for i in range(nb):
Paquet=Strategie(Paquet)
return Num(Paquet)
# liste des scores obtenu par chaque paquet possible en faisant
# nbessai essais de chacun nb manips d'une stratégie
def ListScor(Strategie,nb,nbessai):
listscor=120*[0]
for i in range(nbessai) :
num=Fin(Strategie,nb)
listscor[num]+=1
return listscor# histogramme des scores pour 10000 essais
# de chacun 500 manips de la stratégie "mélange"
M=ListScor(Echange,500,10000)
plt.hist(M)(array([60., 0., 0., 0., 0., 0., 0., 14., 39., 7.]),
array([ 0., 20., 40., 60., 80., 100., 120., 140., 160., 180., 200.]),
<a list of 10 Patch objects>)
# histogramme des scores pour 10000 essais
# de chacun 500 manips de la stratégie "mélange"
L=ListScor(Melange,500,10000)
plt.hist(L)(array([ 7., 4., 14., 21., 22., 25., 15., 9., 2., 1.]),
array([ 60. , 65.1, 70.2, 75.3, 80.4, 85.5, 90.6, 95.7, 100.8,
105.9, 111. ]),
<a list of 10 Patch objects>)
# stratégie insertion :
def Insert(Paquet):
i=rd.randrange(5)
gare=Paquet[0]
for j in range(i) :
Paquet[j]=Paquet[j+1]
Paquet[i]=gare
return PaquetN=ListScor(Insert,500,10000)
plt.hist(N)(array([ 8., 5., 10., 23., 20., 17., 18., 9., 5., 5.]),
array([ 61. , 65.7, 70.4, 75.1, 79.8, 84.5, 89.2, 93.9, 98.6,
103.3, 108. ]),
<a list of 10 Patch objects>)
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 15 invités
Tu pars déja ?
Identification
Pas encore inscrit ?
Ou identifiez-vous :