2 A1=A2 +E1
2 A2=A3 +E1
2 A3=A4 +E1
2 E1=D1 +D2
2 E2=D1 +D3
2 E3=D1
2 D1=C1 +C2
2 D2=C1 +C3
2 D3=C1
2 C1=B1 +B2
2 C2=B1 +B3
2 C3=B1
2 B1=A1 +E2
2 B2=A1 +E3
2 B3=A1
2 A1=A2 +E1
4 A2=A4 +3 E1
2 E1=D1 +D2
4 E2=2 D1 +C1
2 D1=C1 +C2
4 D2=2 C1 +B1
2 C1=B1 +B2
4 C2=2 B1 +A1
2 B1=A1 +E2
4 B2=2 A1 +D1
8 A1=A4 +7 E1
8 E1=4 D1 +2 C1 +B1
8 D1=4 C1 +2 B1 +A1
8 C1=4 B1 +2 A1 +D1
8 B1=4 A1 +2 D1 +C1
121 A1= 16 A4 + 56 C1 + 28 B1
60 C1 = 34 B1 +17 A1
30 B1= 17 A1 + 8 C1
1577 A1=240 A4 + 896 B1
382 B1= 289 A1
A1=45849/171735=0.266923
B1=441592/2186759=0.20194
C1=(30 B1-17 A1)/8 = 0.1901
D1=(8B1-4A1-C1)/2=0.17889
E1=(4 D1 +2 C1 +B1)/8=0.16220
A0=0.21456
# Construction de la matrice de transition en fonction du nombre n de joueurs.
# Il y a n * (n-2) états codés par la position du joueur notée i (commençant à 0
# pour le sortant et terminant à n-1 pour le leader) et par le nombre de parties
# gagnées par le leader (c'est j+1 pour j de 0 à n-3), plus deux états absorbants :
# le joueur gagne, un autre gagne.
def MatriceTransition(n) :
P=zero_matrix(QQ,n*(n-2)+2,n*(n-2)+2)
# depuis un état où le joueur n'est pas entré dans le jeu
for i in range(n-2) :
for j in range(n-3) :
P[j+(n-2)*i,j+1+(n-2)*(i+1)]=1/2 ; P[j+(n-2)*i,(n-2)*(i+1)]=1/2
P[n-3+(n-2)*i,(n-2)*n+1]=1/2 ; P[n-3+(n-2)*i,(n-2)*(i+1)]=1/2
# depuis un état entrant (i=n-2)
for j in range(n-3) :
P[j+(n-2)*(n-2),(n-2)*(n-1)]=1/2 ; P[j+(n-2)*(n-2),j+1]=1/2
P[n-3+(n-2)*(n-2),(n-2)*n+1]=1/2 ; P[n-3+(n-2)*(n-2),(n-2)*(n-1)]=1/2
# depuis un état de leader (i=n-1)
for j in range(n-3) :
P[j+(n-2)*(n-1),j+1+(n-2)*(n-1)]=1/2 ; P[j+(n-2)*(n-1),0]=1/2
P[n-3+(n-2)*(n-1),n*(n-2)]=1/2 ; P[n-3+(n-2)*(n-1),0]=1/2
# états absorbants
P[(n-2)*n,(n-2)*n]=1 ; P[(n-2)*n+1,(n-2)*n+1]=1
# sortie
return P
def Poulle(n) :
print("Poulle à {} joueurs".format(n))
P=MatriceTransition(n)
Q=P.submatrix(0,0,n*(n-2),n*(n-2))
R=P.submatrix(0,n*(n-2),n*(n-2),2)
I=identity_matrix(QQ,n*(n-2))
# calcul de la matrice fondamentale
N=(I-Q)^(-1)
# espérance du nombre de parties de la poulle (y compris la partie initiale)
nbpar=sum(N[0,i] for i in range(n*(n-2)))+1
print("Espérance du nombre de parties de la poulle : {} parties".format(nbpar))
# les états de départ (juste après la partie initiale)
# correspondent aux lignes i*(n-2) pour i de 0 à n-1
# i=0 pour le sortant de la partie initiale,
# i=n-1 pour le gagnant de cette partie
# probabilités de gagner
B=N*R
pg=[B[i*(n-2),0] for i in range(n)]
prob=pg[1:n-1]+2*[(pg[0]+pg[n-1])/2]
print("Probabilités de gagner pour chaque joueur (en commençant par le dernier) :\n"
,prob)
print("soit environ",[round(p,3) for p in prob])
# espérances de gain
C=N*B
# espérances du nombre d'écus mis au pot
ec = [sum(N[i*(n-2),j+(n-2)*(n-2)] for j in range(n-2)) for i in range(n)]
ec[0]+=1 ; ec[n-1]+=1
ecot=ec[1:n-1]+2*[(ec[0]+ec[n-1])/2]
print("Espérances du nombre d'écus mis au pot pour chaque joueur :\n",ecot)
print("soit environ",[round(e,3) for e in ecot])
# espérances du magot remporté en cas de victoire
mag=[C[i*(n-2),0]/pg[i] + 2 for i in range(n)]
magot=mag[1:n-1]+2*[(mag[0]+mag[n-1])/2]
print("Espérances du magot récolté en cas de victoire ;\n", magot)
print("soit environ",[round(m,3) for m in magot])
# espérances de gain
ga=[mag[i]*pg[i]-ec[i] for i in range(n)]
gain=ga[1:n-1]+2*[(ga[0]+ga[n-1])/2]
print("Espérances du gain :\n", gain)
print("soit environ",[round(g,3) for g in gain])
Poulle(3)
Poulle(5)
Poulle(10)
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 18 invités
Tu pars déja ?
Identification
Pas encore inscrit ?
Ou identifiez-vous :