Actualización de variables de enlace en la teoría de calibre SU(N)SU(N)SU(N) de celosía

Actualmente estoy escribiendo un programa básico en python para simular una teoría de calibre de molinos yang dimensional 1 + 1 con grupo de simetría S tu ( 2 ) .

En la red se trabaja con variables de enlace, que son S tu ( norte ) matrices definidas formalmente como tu tu ( X ) = mi i gramo a A tu ( X ) , dónde A tu ( X ) = i = 0 norte 2 1 ( A tu i T i ) y donde T i es el i t h generador de la S tu ( norte ) grupo. La acción de la red está relacionada con las plaquetas en la red, donde una plaqueta es el producto cerrado más pequeño de las variables de enlace en la red. Para ser claro: tu tu ( X ) es un vector de S tu ( norte ) matrices: tendrías una S tu ( norte ) matriz para cada tu . Entonces tu X ( X ) es una matriz SU(N), como es tu t ( X ) .

El algoritmo de actualización de monte carlo funciona así. Observamos un enlace en la red de forma individual y sugerimos un cambio en dicha variable de enlace, tu tu ( X ) tu tu ( X ) (donde u es la dirección del enlace; en 1 + 1 dimensiones es X o t ) Luego calculamos el cambio en la acción que ocurriría si aceptáramos el cambio tu tu ( X ) tu tu ( X ) . Si el cambio en la acción, d S , es negativo entonces aceptamos el cambio. Si el cambio en la acción, d S es positivo entonces aceptamos el cambio con una probabilidad de mi d S . Hacemos este proceso para cada variable de enlace en la red.

Entonces; aquí está mi pregunta. ¿Cómo propongo cambios suficientemente pequeños en una matriz SU(N) de modo que la probabilidad de aceptación promedio no sea absurdamente pequeña? No creo que pueda proponer cambios de forma. tu tu ( X ) tu tu ( X ) + tu tu ( X ) , dónde tu tu ( X ) es una matriz SU(N) 'pequeña' (si es que existe tal cosa), ya que no creo que la suma de dos matrices SU(N) sea generalmente SU(N). Simplemente podría generar k matrices aleatorias SU(N), y luego seleccione aleatoriamente una de esas k S tu ( norte ) matrices para ser mi variable de enlace propuesta tu tu ( X ) . Cuando implemento esto, sin embargo, termino con d S 's con grandes magnitudes, lo que significa bajas probabilidades de aceptación. Lo que significa que se debe realizar una gran cantidad de iteraciones para obtener una configuración independiente de la inicial.

Lo siento por la longitud. Si alguien quiere mi código en este momento que me lo haga saber. Está escrito en python, y solo tiene un iterador y una forma de generar k matrices aleatorias SU(2).

EDITAR: creo que he encontrado la fuente de la discrepancia entre mis resultados iniciales y mis resultados actuales. Digamos que genero 1000 matrices su(2) aleatorias usando algún algoritmo. Para actualizar las variables de enlace propongo tu tu ( X ) METRO tu tu ( X ) , donde M es una de mis 1000 matrices aleatorias su(2). No estoy seguro de que puedas construir todo el espacio de su(2) multiplicando repetidamente estas 1000 matrices aleatorias juntas. Incluso cuando cambié mi código para que sea 2+1 D su(2) yang mills, sigo teniendo el problema de que el valor esperado de mi plaqueta cambia a medida que cambio el tamaño de mi paso. En particular, el valor esperado de la plaqueta aumenta a medida que disminuyo el tamaño del paso. Solo cuando genero matrices su(2) M completamente aleatorias para actualizar tu tu ( X ) METRO tu tu ( X ) ¿Obtengo el tamaño mínimo de plaquetas?

EDIT2: ¿Podría ser que esté actualizando todo el entramado a la vez? Lo que estoy haciendo es recorrer la red una vez sin cambiar ningún enlace y luego cambiar todos los enlaces al final de cada iteración.

EDIT3: El algoritmo de actualización fue de hecho el problema. Debe seleccionar aleatoriamente una variable de enlace en un sitio aleatorio, actualizarla y luego continuar.

No parece que nadie tenga respuestas. Una manera fácil sería definir las matrices SU(2) en forma exponencial usando los 3 generadores del grupo SU(2). Entonces podría proponer pequeños cambios en los tres 'ángulos', pero esto aumentaría sustancialmente la potencia computacional requerida ya que calcular la matriz exponencial es computacionalmente bastante intensivo.
Recordar que
mi i v i σ i = ( porque v + i v 3 v pecado v ( v 2 + i v 1 ) v pecado v i ( v 1 + i v 2 ) v pecado v porque v i v 3 v pecado v )
con v := v 1 2 + v 2 2 + v 3 2 .
También sé que cualquier matriz SU(2) puede ser representada por b 0 I + i b j σ j , j = 1 , 2 , 3 , dónde b 0 2 + b 1 2 + b 2 2 + b 3 2 = 1 , I es la matriz identidad de 2 por 2, y donde σ j , j = 1 , 2 , 3 son las tres matrices de Pauli. Estoy buscando un algoritmo de baño de calor en este momento (algoritmo CKP, creo)
1000 elegidos al azar S tu ( 2 ) Es casi seguro que los elementos generan S tu ( 2 ) . (Se necesitarían algunas coincidencias maravillosas para que generaran un subgrupo). Pero es posible que no lo hagan de manera efectiva . Es posible que deba considerar potencias bastante altas de ellos antes de obtener suficiente densidad en S tu ( 2 ) .

Respuestas (2)

Para actualizar las variables de enlace, desea aprovechar el hecho de que S tu ( 2 ) es un grupo Así que encuentra una matriz "pequeña" METRO = mi X pag ( i ϵ H ) S tu ( 2 ) y actualizar de acuerdo con tu m ( X ) METRO tu m ( X ) .

Recomiendo echar un vistazo a "Lattice QCD for Novices" de Le Page. Hay algunos consejos allí que encontrará útiles.

También es útil si no lo sabe: el QCD de celosía 2d se puede resolver exactamente, por lo que puede verificar sus resultados.

No se preocupe por C vs Python para 2d. Pitón está bien.

Oh, es bueno. No tenía idea de que era exactamente solucionable. Hice una búsqueda en Google pero no pude encontrarlo. ¿Alguna posibilidad de que tenga un enlace a un artículo/conferencia que examine la solución? Además: en realidad traté de implementar esto, pero descubrí que el tamaño del paso afectó el valor esperado de la plaqueta, por lo que debo estar haciendo algo mal.
Con respecto a la solución exacta: debería haber dicho que es 2d Yang-Mills, no 2d QCD. La adición de fermiones arruina la capacidad de resolución. La idea original se debe a Migdal, pero la mejor explicación que conozco es la de Witten. Eche un vistazo a la Sección 2.3 de sus Teorías sobre calibre cuántico en dos dimensiones.
Pregunta: Si tengo dos algoritmos de actualización, uno donde tu tu ( X ) METRO donde M(x) es una matriz aleatoria SU(2), y una donde tu tu ( X ) METRO tu tu ( X ) , donde M es una matriz SU(2) alrededor de la unidad, ¿debería obtener el mismo resultado para el valor esperado de la plaqueta? También; en su ejemplo, si el valor esperado de la plaqueta depende del parámetro ϵ ? Gracias
No creo que la primera receta dé resultados útiles en la práctica. La tasa de rechazo debe ser bastante alta, por lo que el tiempo de autocorrelación de la cadena de Monte Carlo será muy largo, lo que le impedirá muestrear de manera efectiva la distribución de Yang-Mills. No esperaría obtener los mismos valores esperados.
ϵ no fue pensado como un parámetro; simplemente está ahí para indicar que las matrices deben estar cerca de la identidad. Intente pregenerar algunos cientos de estos con diferentes valores de ϵ extraído de una distribución normal norte ( 0 , w ) de ancho w . Luego, elija aleatoriamente una de las matrices pregeneradas al actualizar. La anchura w afectará la autocorrelación de la cadena Monte Carlo, pero no debería afectar sus resultados finales.
De hecho, obtengo los mismos resultados SI M en mi ejemplo es una matriz su(2) completamente aleatoria, pero no si está cerca de la matriz identidad. Extraño.
Agregué un algoritmo de actualización mediante el cual se generan 10,000 matrices su(2) aleatorias sobre la unidad de acuerdo con el método AccidentalFourierTransforms. El problema es que para los tamaños de paso agrupados alrededor de 0 (tamaños de paso pequeños), la plaqueta aumenta de manera bastante significativa. No estoy seguro de por qué. Puedo publicar mi código si alguien quiere.

En principio, siempre se puede encontrar un paso de tiempo lo suficientemente pequeño en la evolución para tener una aceptación razonable (alrededor del 57% para un integrador óptimo de segundo orden). Entonces, primero, haz algunas comprobaciones,

  1. ¿Su cambio en la escala de acción con el paso de tiempo de su integrador de orden n como Δ S ( Δ t ) norte ?
  2. Lo siguiente que debe verificar es si su U no tiene rastro al final de la etapa de evolución. Haga una rutina en el código para reunificar (es decir, volver a hacer unitario) si no lo es. Una forma eficiente de reunificar es usar SVD (descomposición de valor singular)
  3. Intente generar un número aleatorio para todo el enrejado cuando intente aceptar/rechazar.
  4. Además, construya una rutina en la que escupa SU aleatorio ( norte ) matriz, podría ser útil.

Si planea volverse más complicado en el futuro, le sugiero que intente escribir el código en C/C++ (eso es el código QCD basado en MILC, http://www.physics.utah.edu/~detar/milc/milcv7 .pdf usos)

También aquí hay una referencia muy útil que será útil para comprender los enlaces que faltan: https://arxiv.org/pdf/1506.02567.pdf

Hay otras pruebas que no he mencionado como mi Δ S = 1 etcétera etcétera.