如您所说,不可能确保每个排列的可能性均等,并不能确保颜色均匀分布,因为其中一个排列将所有红色连续排列。
确保颜色均匀分布的一种非常优雅但肯定不明显的方法是利用低差异序列。
假设您有球,编号为到,种子值为。N=4001Ns
确保所有相同颜色的球都已连续编号。也就是说,根据您的情况,让前100个球为红色,接下来的40个球为黄色,接下来的50个绿色,依此类推。
然后,将球的值分配为:
其中kthxk
xk=(s+kϕ)(mod1),
- ϕ=1+5√2=1.61803399...,黄金分割率
- 的操作者需要的参数的小数部分(mod1)
- s是您想要的任何恒定的“种子”值。
也就是说,将为球中的每一个分配值,该值始终在0到1之间。Nxk
现在,只需根据值按升序对球进行排序。xk
例如,使用的种子值,将对球进行如下排序:
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}
(其中“
B“ =蓝色,” “ =黑色)。
K
最后,如果您希望采用其他样本,只需选择其他种子值。s
用于分配 Python代码如下: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)