El método de modelado Monte Carlo inverso (RMC) es una variación del algoritmo estándar de Metropolis-Hastings para resolver un problema inverso mediante el cual se ajusta un modelo hasta que sus parámetros tengan la mayor coherencia con los datos experimentales. Los problemas inversos se encuentran en muchas ramas de la ciencia y las matemáticas , pero este enfoque es probablemente más conocido por sus aplicaciones en la física de la materia condensada y la química del estado sólido .
Este método se utiliza a menudo en las ciencias de la materia condensada para producir modelos estructurales basados en átomos que sean consistentes con los datos experimentales y estén sujetos a un conjunto de restricciones.
Se construye una configuración inicial colocando N átomos en una celda límite periódica , y se calculan una o más cantidades mensurables en función de la configuración actual. Los datos que se utilizan habitualmente incluyen la función de distribución de pares y su transformada de Fourier , la última de las cuales se deriva directamente de los datos de dispersión de neutrones o rayos X (consulte dispersión de neutrones de ángulo pequeño , dispersión de rayos X de ángulo amplio , dispersión de rayos X de ángulo pequeño y difracción de rayos X ). Otros datos que se utilizan incluyen datos de difracción de Bragg para materiales cristalinos y datos EXAFS . La comparación con el experimento se cuantifica utilizando una función de la forma
χ 2 = Σ ( y obs − y calc ) 2 / σ 2
donde y obs e y calc son las cantidades observadas (medidas) y calculadas respectivamente, y σ es una medida de la precisión de la medición. La suma es sobre todas las mediciones independientes, que incluirán la suma sobre todos los puntos en una función como la función de distribución de pares.
Se ejecuta un procedimiento iterativo en el que un átomo elegido al azar se mueve una cantidad aleatoria , seguido de un nuevo cálculo de las cantidades mensurables. Tal proceso hará que χ 2 aumente o disminuya en valor en una cantidad Δ χ 2 . El movimiento se acepta con la probabilidad min(1, exp(−Δ χ 2 /2)) de acuerdo con el algoritmo normal de Metropolis-Hastings , lo que garantiza que se acepten los movimientos que brindan una mejor concordancia con los datos experimentales, y los movimientos que empeoran la concordancia con los datos experimentales pueden aceptarse en mayor o menor medida correspondiente a cuánto ha empeorado la concordancia. Además, el movimiento también puede rechazarse si rompe ciertas restricciones, incluso si la concordancia con los datos mejora. Un ejemplo sería rechazar un movimiento que acerque dos átomos más allá de un límite preestablecido, para evitar la superposición o colisión entre los dos átomos.
Después de la prueba de aceptación/rechazo, se repite el procedimiento. A medida que aumenta el número de movimientos de átomos aceptados, las cantidades calculadas se acercarán a los valores experimentales hasta alcanzar un estado de equilibrio. A partir de ese momento, el algoritmo RMC simplemente generará una pequeña oscilación en el valor de χ 2 . La configuración atómica resultante debe ser una estructura que sea consistente con los datos experimentales dentro de sus errores.
El método RMC para problemas de materia condensada fue desarrollado inicialmente por McGreevy y Pusztai [1] en 1988, con aplicación al argón líquido (nótese que hubo aplicaciones independientes anteriores de este enfoque, por ejemplo las de Kaplow et al. [2] y Gerold y Kern; [3] sin embargo, es la implementación de McGreevy y Pusztai la más conocida). Durante varios años, la aplicación principal fue para líquidos y materiales amorfos, particularmente porque esto proporciona el único medio para obtener modelos estructurales a partir de datos, mientras que la cristalografía tiene métodos de análisis tanto para datos de difracción de monocristales como de polvos . Más recientemente, ha quedado claro que el RMC también puede proporcionar información importante para materiales cristalinos desordenados. [4]
El método RMC presenta varios problemas potenciales. El problema más notable es que a menudo más de un modelo cualitativamente diferente dará una concordancia similar con los datos experimentales. Por ejemplo, en el caso del silicio amorfo, la integral del primer pico en la función de distribución de pares puede implicar un número de coordinación atómica promedio de 4. Esto podría reflejar el hecho de que todos los átomos tienen un número de coordinación de 4, pero de manera similar, tener la mitad de los átomos con un número de coordinación de 3 y la otra mitad con 5 también será consistente con estos datos. A menos que se emplee una restricción en el número de coordinación, el método RMC no tendrá medios para generar un número de coordinación único y lo más probable es que resulte una dispersión de números de coordinación. Usando el silicio amorfo como ejemplo, Biswas, Atta-Fynn y Drabold fueron los primeros en dilucidar la importancia de incluir restricciones en el modelado RMC. [5] Dado que el método RMC sigue las reglas normales de la mecánica estadística, su solución final será la que tenga el mayor grado de desorden ( entropía ) posible. Un segundo problema surge del hecho de que, sin restricciones, el método RMC normalmente tendrá más variables que observables. Una consecuencia de esto será que la configuración atómica final puede tener artefactos que surgen del intento del método de incluir ruido en los datos.
Sin embargo, cabe señalar que la mayoría de las aplicaciones actuales del método RMC tienen en cuenta estos problemas mediante el uso adecuado de restricciones implícitas o explícitas. Al incluir un número adecuado de restricciones, Limbu et al. [6] confirman la eficacia del método RMC como método de optimización multiobjetivo para la determinación estructural de materiales complejos y resuelven una antigua disputa sobre la singularidad de un modelo de semiconductores amorfos tetraédricos obtenido mediante la inversión de datos de difracción.
Hay cinco implementaciones disponibles públicamente del método RMC.
AtomisticReverseMonteCarlo [7] [8] es un código para generar estructuras cristalinas en masa con parámetros objetivo (por ejemplo, sistemas atómicos con parámetros de orden de corto alcance específicos de Warren-Cowley). Está implementado en Python y se puede utilizar como un modificador de Ovito [9] .
Lenguaje de biblioteca fundamental para Monte Carlo inverso o fullrmc [10] [11] [12] [13] [14] es un paquete de modelado RMC multinúcleo. fullrmc es un paquete con interfaz de Python totalmente orientado a objetos donde cada definición se puede sobrecargar, lo que permite un fácil desarrollo, implementación y mantenimiento del código. Los bloques y módulos de cálculo de fullrmc están optimizados y escritos en cython / C. fullrmc no es un paquete RMC estándar, pero es bastante único en su enfoque para resolver una estructura atómica o molecular. fullrmc admite sistemas atómicos y moleculares, todos los tipos (no limitados a cúbicos) de sistemas de condiciones de contorno periódicos , así como las llamadas condiciones de contorno infinitas para modelar nanopartículas o sistemas aislados. El motor de fullrmc se define y se usa para iniciar un cálculo RMC. Por definición, el motor solo lee archivos de configuración atómica del banco de datos de proteínas (formato de archivo) y maneja otras definiciones y atributos. En fullrmc los átomos se pueden agrupar en cuerpos rígidos o semirrígidos llamados grupos, de modo que el sistema pueda evolucionar atómicamente, en clústeres, molecularmente o cualquier combinación de ellos. A cada grupo se le puede asignar un generador de movimientos diferente y personalizable (traslación, rotación, una combinación de generadores de movimientos, etc.). La selección de grupos por parte del motor de ajuste también se puede personalizar. Además, fullrmc utiliza inteligencia artificial y algoritmos de aprendizaje por refuerzo para mejorar la proporción de movimientos aceptados.
RMCProfile [15] [16] es una versión significativamente desarrollada del código RMC original escrito por McGreevy y Pusztai. Está escrito en Fortran 95 con algunas características de Fortran 2003. Ha mantenido la capacidad de modelar líquidos y materiales amorfos utilizando la función de distribución de pares , dispersión total y datos EXAFS , pero también incluye la capacidad de modelar materiales cristalinos utilizando explícitamente la información contenida en los datos de difracción de Bragg . RMCProfile ofrece a los usuarios una variedad de restricciones, incluida la inclusión de potenciales moleculares y ventanas de distancia, que explotan las posibilidades que ofrece la falta de difusión significativa en materiales cristalinos. RMCProfile permite la simulación de materiales magnéticos, utilizando el componente magnético de los datos de dispersión total, y también permite la simulación de materiales donde se permite que los átomos intercambien posiciones (como se encuentra en muchas soluciones sólidas ).
RMC++ [17] [18] es una versión reescrita en C++ del código RMC original desarrollado por McGreevy y Pusztain. RMC++ está diseñado específicamente para el estudio de líquidos y materiales amorfos, utilizando funciones de distribución de pares , dispersión total y datos EXAFS .
Hybrid Reverse Monte Carlo (HRMC) [19] [20] es un código capaz de ajustar tanto la función de correlación de pares como el factor de estructura junto con el ángulo de enlace y las distribuciones de coordinación. Lo exclusivo de este código es la implementación de una serie de potenciales interatómicos empíricos para el carbono (EDIP), el silicio (EDIP [21] y Stillinger-Weber [22] ) y el germanio (Stillinger-Weber). Esto permite que el código se ajuste a los datos experimentales y minimice la energía total del sistema.
EvAX [23] [24] es un código para realizar simulaciones RMC de espectros EXAFS para materiales cristalinos [25] [26] y nanocristalinos [27] [28] para extraer información sobre el desorden térmico y estructural local. EvAX ajusta los datos experimentales EXAFS minimizando la diferencia entre las transformadas wavelet de Morlet [29], teniendo en cuenta así la representación de los espectros EXAFS en los espacios k y R simultáneamente. El código tiene en cuenta todas las trayectorias de dispersión múltiple importantes con la precisión especificada por el usuario y es capaz de ajustar un único modelo de estructura a un conjunto de espectros EXAFS, adquiridos en varios bordes de absorción. [30] [31] [32] El algoritmo evolutivo se utiliza para la optimización, lo que permite una exploración más eficiente del posible espacio de configuración con solo recursos computacionales decentes disponibles. El código EvAX y ejemplos de aplicaciones están disponibles en [1].