¡La respuesta corta es sí! Puede funcionar, y es tan simple como multiplicar el vector por un número entero , y tomar la parte entera de cada uno de sus componentes.tnorte∈ ( 0 , 1)remetro
La respuesta más larga es que su intuición es correcta, que en la práctica tiene resultados mixtos dependiendo de la elección de:
- qué secuencia eliges (Halton, Sobol, etc.)
- los parámetros básicos (p. ej., 2,3,5, ...)
- y en menor grado, el valor de .metro
Sin embargo, recientemente escribí una publicación de blog detallada "La efectividad irracional de las secuencias cuasialeatorias , sobre cómo crear fácilmente una secuencia abierta de baja discrepancia en dimensiones arbitrarias, que es mucho más susceptible de discretización que las secuencias existentes de baja discrepancia existentes, como las secuencias de Halton y Kronecker.
La sección en la publicación llamada "Covering" trata específicamente su cuestión de discretizar las secuencias de baja discrepancia.
En los siguientes cuadros de la imagen (que indica un único punto reticular entero) con menos rojo implica una distribución más uniforme, ya que cada cuadrado rojo indica que la celda no contiene un punto azul. Uno puede ver claramente cómo incluso la secuencia distribuye puntos en comparación con otros métodos contemporáneos.R
La solución es un método de recurrencia aditivo (módulo 1) que generaliza el problema unidimensional cuya solución depende de la proporción áurea. La solución al problema -dimensional depende de una constante especial , donde es el valor del valor real positivo más pequeño de tal que
reϕreϕreX
Xre+ 1= x + 1
Para , , que es la proporción dorada canónica.re= 1ϕ1= 1.618033989 ...
Para , , que a menudo se llama la constante plástica y tiene algunas propiedades hermosas. Se conjetura que este valor probablemente sea el valor óptimo para un problema bidimensional relacionado [Hensley, 2002].re= 2ϕ2= 1.3247179572 ...
Jacob Rus ha publicado una hermosa visualización de esta secuencia bidimensional de baja discrepancia, que se puede encontrar aquí .
Con esta constante especial en la mano, el cálculo de la término -ésimo es ahora extremadamente simple y rápido para calcular:n
R:tn=αα0+nαα(mod1),n=1,2,3,...
whereαα=(1ϕd,1ϕ2d,1ϕ3d,...1ϕdd),
Por supuesto, la razón por la que se llama secuencia de recurrencia es porque la definición anterior es equivalente a
R:tn+1=tn+αα(mod1)
En casi todos los casos, la elección de no cambia las características clave y, por razones de simplicidad obvia, es la opción habitual. Sin embargo, hay algunos argumentos, relacionados con la simetría, que sugieren que es una mejor opción.αα0αα0=00αα0=1/21/2
El código de Python es
# Use Newton-Rhapson-Method
def gamma(d):
x=1.0000
for i in range(20):
x = x-(pow(x,d+1)-x-1)/((d+1)*pow(x,d)-1)
return x
d=5
n=1000
# m can be any number.
# In the diagram above it is chosen to be exactly sqrt of n,
# simply to to make the visualization more intuitive
# so that ideally each cell should have exactly one dot.
m=10
g = gamma(d)
alpha = np.zeros(d)
for j in range(d):
alpha[j] = pow(1/g,j+1) %1
z = np.zeros((n, d))
c = (np.zeros((n,d)).astype(int)
for i in range(n):
z = (0.5 + alpha*(i+1)) %1
c = (np.floor(m *z)).astype(int)
print(c)
¡Espero que ayude!