Si observamos atentamente, la aleatoriedad puede derivarse efectivamente de la naturaleza . A pesar de ser explicable por fenómenos científicos, el comportamiento de la mayor parte de la materia en la Tierra es aleatorio (aunque puede depender de las condiciones ambientales). Por ejemplo: el aleteo de las hojas de un árbol, aunque justificable por la física, es aleatorio para el ojo humano, el movimiento de los jugadores en un campo de fútbol también es bastante aleatorio, aunque está influenciado por la estrategia/posición de la pelota, etc.
En el último artículo , hablamos sobre el enfoque matemático/algorítmico hacia la generación de números aleatorios, por lo tanto pseudo . Los generadores de números pseudoaleatorios son bastante buenos para aplicaciones generales. Pero tienen una vez defecto. Si una tercera persona es consciente de lavalor inicial con el que se inicializa el RNG, él / ella puede predecir fácilmente la secuencia de números que podría dar el RNG. Esto puede causar un lapso grave en las etapas de aplicación.
Generadores de números aleatorios verdaderos (TRNG)
Para solucionar este problema, una salida es usar TRNG (Generadores de números aleatorios verdaderos) en lugar de PRNG .
Pero la generación de TRNG tiende a ser muy lenta y es posible que el usuario tenga que esperar antes de obtener la cantidad deseada de valores aleatorios. Además, su rendimiento/eficacia depende mucho de la fuente . por ejemplo: el valor inicial puede no ser predecible, pero podemos terminar con un patrón/flujo consistente de números aleatorios.
Otra forma es sembrar el PRNG con un valor generado por el TRNG . De esta manera, nuestro valor inicial, por lo tanto, el resultado final tiende a ser más seguro ya que la semillael valor también es aleatorio. Hay muchas fuentes de TRNG disponibles. Una de las fuentes más aleatorias es el ruido atmosférico provocado por los truenos, los desechos espaciales , etc. Este enfoque es bastante efectivo y se utiliza principalmente.
Canalizando la aleatoriedad de la naturaleza hacia las computadoras
La generación de números aleatorios a partir de la naturaleza es un enfoque clásico pero efectivo. Random.org es una organización que genera aleatoriedad a partir del ruido atmosférico. Puede consultar el enlace anterior y utilizar los servicios que ofrecen. Pero, ¿qué pasa si estamos ejecutando una simulación que necesita una entrada autónoma y continua de números aleatorios en un paso en particular? Simplemente no podemos ir al sitio web random.org cada vez y copiar los números. Afortunadamente , Random.org ofrece una API que permite a los desarrolladores escribir clientes para su interfaz. El cliente de la API realizará directamente una llamada HTTP a los servidores de Random.org y obtendrá los datos necesarios.
TRNG en Julia
Llegando a Julia , existe una disposición para explotar las requests JSON-RPC y las llamadas HTTP (aunque HTTP.jl y JSON.jl respectivamente). Pero hacer requests POST manualmente , cada vez que necesitamos números aleatorios puede volverse tedioso. Afortunadamente, los paquetes Randomorg_API.jl manejan esto por nosotros. El enlace al paquete con un archivo Léame detallado está disponible aquí .
Actualmente, el paquete admite las siguientes funciones:
función generarEnteros()
Este método genera números enteros aleatorios verdaderos dentro de un rango definido por el usuario.
Sintaxis:
generar enteros (n, min, max, reemplazo)
Parámetros:
- n: especifica cuántos enteros aleatorios necesita.
- min: es el límite inferior del rango del que se seleccionarán los números aleatorios.
- max: es el límite superior para el rango del cual se seleccionarán los números aleatorios.
- reemplazo: Especifica si los números aleatorios deben elegirse con reemplazo. El valor predeterminado ( true ) hará que los números se seleccionen con reemplazo, es decir, los números resultantes pueden contener valores duplicados. Si desea que los números elegidos sean únicos, establezca este valor en false .
Ejemplo:
Python3
# import the package using Randomorg_API # generate 4 integers from 1-1000 generateIntegers(4, 1, 1000, true)
Producción:
Función generar secuencias enteras()
Este método genera secuencias uniformes o multiformes de números enteros aleatorios verdaderos dentro del rango definido por el usuario.
Sintaxis:
generateIntegerSequences(n, length, min, max, replacement)
Ejemplo:
Python3
# generate 2 integer sequqnces # length 4 and in the interval [-100 100] generateIntegerSequences(2, 4, -100, 100, true)
Producción:
función generar fracciones decimales()
Este método genera verdaderas fracciones decimales aleatorias a partir de una distribución uniforme en
el intervalo [0, 1] con un número de lugares decimales definido por el usuario.
Sintaxis:
generar fracciones decimales (n, lugares decimales, reemplazo)
Parámetros: lugares decimales
: el número de lugares decimales a usar.
Ejemplo:
Python3
# generate 4 float values # with 3 decimal places each generateDecimalFractions(4, 3, true)
Producción:
Función generar gaussianos()
Este método genera números aleatorios verdaderos a partir de una distribución gaussiana (también conocida como
distribución normal).
Sintaxis:
generar gaussianos (n, media, desviación estándar, dígitos significativos)
Parámetros:
- mean La media de la distribución.
- standardDeviation La desviación estándar de la distribución.
El formulario utiliza una transformada de Box-Muller para generar la distribución gaussiana a partir de números distribuidos uniformemente.
Ejemplo:
Python3
# generate 4 random numbers # belonging to a normal-distribution # with mean 0 and standard-deviation 4.5 # and 2 significant digits generateGaussians(4, 0, 4.5, 2)
Producción:
función generar strings()
Este método genera strings aleatorias verdaderas .
Sintaxis:
generar strings (n, longitud, caracteres, reemplazo)
Parámetros:
- caracteres: una string que contiene el conjunto de caracteres que pueden aparecer en las strings aleatorias.
- longitud: La longitud de cada string.
Ejemplo:
Python3
# generate 4 random strings # each of length 4, (a-j) # without any repetition generateStrings(4, 4, "abcdefghij", false)
Producción:
Función generar UUID()
Este método genera la sintaxis de identificadores únicos universales (UUID) aleatorios verdaderos de la versión 4 :
generateUUIDs(n)
Ejemplo:
Python3
# generate 4 random UUIDs generateUUIDs(4)
Producción:
función generarBlobs()
Este método genera objetos binarios grandes (BLOB) que contienen datos aleatorios verdaderos.
Sintaxis:
generarBlobs(n, tamaño, formato)
Ejemplo:
Python3
# generate 4 random data blobs # belonging to a normal-distribution # of 50 bits each of base64 type generateBlobs(4, 56, "base64")
Producción:
Hay muchos de estos servicios en línea, por ejemplo: el servicio HotBits de FermiLab usa radiactividad, el mundialmente famoso Cloudflare usa una gran cantidad de lámparas de lava y procesamiento de imágenes para la generación de números aleatorios.
Del artículo anterior, tal vez recuerde, hablamos sobre el generador de números aleatorios basado en hardware en chips Intel , a saber. RDRAND . Uno podría preguntarse si podemos comunicarnos directamente con RDRAND para obtener la entropía generada por el procesador . En Julia explotamos este método con estepaquete. Es un módulo muy bien escrito y podría considerar probarlo.
Publicación traducida automáticamente
Artículo escrito por arsh_sharma y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA