Wie Sie sagten, ist es nicht möglich, sicherzustellen, dass jede Permutation gleich wahrscheinlich ist und dass die Farben gleichmäßig verteilt sind, da eine der Permutationen alle Rottöne in einer Reihe aufweist.
Eine sehr elegante, aber sicherlich nicht offensichtliche Methode, um sicherzustellen, dass die Farben gleichmäßig verteilt sind, besteht darin, eine Sequenz mit geringer Diskrepanz zu nutzen.
Angenommen, Sie haben Bälle, nummeriert von bis , und einen Startwert, .N=4001Ns
Stellen Sie sicher, dass alle Kugeln derselben Farbe fortlaufend nummeriert sind. Das heißt, in Ihrem Fall lassen Sie die ersten 100 Bälle rot, die nächsten 40 gelb, die nächsten 50 grün usw. sein.
dann dem Ball den Wert so zu, dass:
wobeikthxk
xk=(s+kϕ)(mod1),
- ϕ=1+5√2=1.61803399... , der goldene
- der Operator , der den Bruchteil des Arguments übernimmt(mod1)
- s ist ein beliebiger konstanter Startwert, den Sie wünschen.
Das heißt, jeder der Kugeln wird ein Wert von zugewiesen, der immer zwischen 0 und 1 liegt.Nxk
Ordnen Sie nun einfach die Kugeln in aufsteigender Reihenfolge nach ihrem Wert.xk
Unter Verwendung des Startwerts von werden die Kugeln beispielsweise wie folgt geordnet:
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}
(wobei "
B"= Blau und" "= Schwarz).
K
Schließlich, wenn Sie eine andere Probe nehmen möchten, einfach einen anderen Startwert auswählen, .s
Der Python-Code für die Zuweisung von lautet wie folgt: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)