Episodio

**rTRNG**: generación avanzada de números aleatorios paralelos en R

con Riccardo Porreca

useR!2017: **rTRNG**: Advanced Parallel Random Numb...

Palabras clave: Generación de números aleatorios, Monte Carlo, Ejecución paralela, Reproducibilidad
Páginas web: https://github.com/miraisolutions/rTRNG
Las simulaciones de Monte Carlo proporcionan un enfoque computacional eficaz para abordar una amplia variedad de problemas en varios dominios, como ciencias físicas, ingeniería, biología computacional y finanzas. Las muestras independientes y la naturaleza a gran escala de las simulaciones de Monte Carlo hacen que el cálculo correspondiente sea adecuado para la ejecución en paralelo, al menos en teoría. En la práctica, los generadores de números pseudoaleatorios (RNG) son intrínsecamente secuenciales. Esto a menudo impide tener un algoritmo Monte Carlo paralelo que esté jugando justo, lo que significa que los resultados son independientes de la arquitectura, las técnicas de paralelización y el número de procesos paralelos (Mertens 2009; Bauke 2016).
Mostraremos que existen RNG y técnicas orientadas al paralelo y que se pueden usar en R con el paquete rTRNG (Porreca, Schmid y Bauke 2017). El paquete se basa en TRNG (Bauke 2016), una biblioteca de generadores de números pseudoaleatorios de C++ de última generación para simulaciones de Monte Carlo secuenciales y paralelas.
TRNG proporciona RNG paralelos que se pueden manipular al saltar por delante un número arbitrario de pasos o dividir una secuencia en cualquier subsecuencia(s) deseada, por lo que admite técnicas como la división de bloques y leapfrogging adecuadas para algoritmos paralelos.
El paquete rTRNG proporciona acceso a la funcionalidad de la biblioteca de C++ de TRNG subyacente mediante la inserción de sus orígenes y encabezados. Además de esto, hace uso de Rcpp y RcppParallel para ofrecer varias formas de crear y manipular secuencias pseudoaleatorias, y dibujar variaciones aleatorias de ellos, que demostraremos:

  • Uso similar a R base para seleccionar y manipular el motor actual, como una manera sencilla e inmediata de que los usuarios de R usen rTRNG
  • Los objetos de referencia que encapsulan los motores de números aleatorios trNG de C++ subyacentes se pueden crear y manipular en estilo OOP, para mayor flexibilidad en el uso de RNG paralelos en R
  • Se puede acceder directamente a la biblioteca y encabezados de C++ TRNG desde proyectos de R que usan C++, tanto a través de código C++ independiente (a través de sourceCpp) como mediante la creación de un paquete de R que dependa de referencias rTRNG Bauke, Heiko. 2016. Biblioteca de generadores de números aleatorios de Tina. https://numbercrunch.de/trng/trng.pdf.

Mertens, Stephan. 2009. "Generadores de números aleatorios: Guía de supervivencia para simulaciones a gran escala". En La ciencia computacional moderna 09. BIS-Verlag.

Porreca, Riccardo, Roland Schmid y Heiko Bauke. 2017. rTRNG: paquete de R que proporciona acceso y ejemplos a la biblioteca de C++ de TRNG. https://github.com/miraisolutions/rTRNG/.