Comme vous l'avez dit, il n'est pas possible de garantir que chaque permutation est également probable et de s'assurer que les couleurs sont réparties uniformément, car l'une des permutations a tous les rouges d'affilée.
Une méthode très élégante, mais certainement pas évidente, pour assurer une répartition uniforme des couleurs consiste à tirer parti d'une séquence à faible écart.
Supposons que vous ayez boules, numérotées de à , et une valeur de départ, .N=4001Ns
Assurez-vous que toutes les boules de la même couleur sont numérotées consécutivement. C'est-à-dire, dans votre cas, que les 100 premières boules soient rouges, les 40 prochaines jaunes, les 50 prochaines vertes, etc.
Ensuite, allouez à la boule la valeur, telle que:
oùkthxk
xk=(s+kϕ)(mod1),
- ϕ=1+5√2=1.61803399... , le nombre d'or
- l' opérateur qui prend la partie fractionnaire de l'argument(mod1)
- s est toute valeur de «graine» constante que vous souhaitez.
Autrement dit, chacune des boules se verra attribuer une valeur de qui sera toujours comprise entre 0 et 1.Nxk
Maintenant, commandez simplement les boules, dans l'ordre croissant en fonction de leur valeur .xk
Par exemple, en utilisant la valeur de départ de , les boules seront ordonnées comme suit:
s=0B K
{B,R,K,G,R,P,Y,K,B,R,P,G,K,R,B,Y,K,B,R,P,Y,K,B,R,P,G,R,P,Y,K,B,R,P,G,K,R,B,R,K,G,R,P,Y,K,B,R,P,G,K,R,P,Y,K,B,R,P,G,K,B,R,P,G,R,P,Y,K,B,R,P,G,K,R,B,R,K,G,R,P,Y,K,B,R,P,G,K,R,P,Y,K,B,R,P,G,K,R,B,R,K,G,R,P,Y,K,B,R,P,G,K,R,B,Y,K,B,R,P,Y,K,B,R,P,G,R,P,Y,K,B,R,P,G,K,R,B,R,K,G,R,P,Y,K,B,R,P,G,K,R,P,Y,K,B,R,P,G,K,B,R,K,G,R,P,Y,K,B,R,P,G,K,R,B,Y,K,G,R,P,Y,K,B,R,P,G,R,P,Y,K,B,R,P,G,K,R,B,R,K,G,R,P,Y,K,B,R,P,G,K,R,B,Y,K,B,R,P,Y,K,B,R,P,G,R,P,Y,K,B,R,P,G,K,R,B,R,K,G,R,P,Y,K,B,R,P,G,K,R,P,Y,K,B,R,P,G,K,R,B,R,K,G,R,P,Y,K,B,R,P,G,K,R,B,Y,K,B,R,P,Y,K,B,R,P,G,R,P,Y,K,B,R,P,G,K,R,B,R,K,G,R,P,Y,K,B,R,P,G,K,R,P,Y,K,B,R,P,G,K,B,R,P,G,R,P,Y,K,B,R,P,G,K,R,B,R,K,G,R,P,Y,K,B,R,P,G,R,P,Y,K,B,R,P,G,K,R,B,R,K,G,R,P,Y,K,B,R,P,G,K,R,B,Y,K,B,R,P,Y,K,B,R,P,G,R,P,Y,K,B,R,P,G,K,R,B,R,K,G,R,P,Y,K,B,R,P,G,K,R,P,Y,K,B,R,P,G,K}
(où "
B"= Bleu et" "= Noir).
K
Enfin, si vous souhaitez prélever un échantillon différent, sélectionnez simplement une valeur de graine différente, .s
Le code Python pour cette allocation de est le suivant:xk
n=400
phi = (1+pow(5,0.5))/2
x = np.zeros(n)
s = np.random.uniform(0,1)
for i in range(n):
x = (s + phi*(i+1)) %1
print (s)
print (x)