Main Content

rng

Controlar el generador de números aleatorios

Descripción

ejemplo

rng("default") inicializa el generador de números aleatorios de MATLAB® usando la semilla y algoritmo predeterminados. El valor predeterminado es el generador Mersenne Twister con la semilla 0. Para obtener más información sobre cómo cambiar la configuración predeterminada y la reproducibilidad, consulte Configuración predeterminada del generador de números aleatorios y Reproducibilidad del generador de números aleatorios.

La función rng controla la secuencia global, que determina cómo las funciones rand, randi, randn y randperm generan una secuencia de números aleatorios. Para crear una o más secuencias independientes de la secuencia global, consulte las funciones RandStream y RandStream.create.

rng(seed) establece la semilla del generador de números aleatorios utilizando el algoritmo del generador actual.

  • Especifique seed como un número entero no negativo, como rng(1), para inicializar el generador de números aleatorios con esa semilla.

  • Especifique seed como "shuffle" para inicializar la semilla del generador según la hora actual.

ejemplo

rng(seed,generator) también especifica el algoritmo para el generador de números aleatorios que se debe utilizar. Por ejemplo, rng(2,"philox") inicia el generador Philox 4x32 con una semilla de 2.

rng(generator) especifica el algoritmo para el generador de números aleatorios que se desea utilizar con una semilla de 0. Esta sintaxis equivale a rng(0,generator). (desde R2023b)

ejemplo

rng(s) inicializa el generador basándose en la configuración incluida en una estructura s con los campos Type, Seed y State. La estructura s debe ser una estructura devuelta por una llamada anterior a s = rng o s = rng(__).

ejemplo

t = rng devuelve la configuración del generador de números aleatorios actual en una estructura t con los campos Type, Seed y State.

t = rng(___) devuelve la configuración del generador de números aleatorios actual en una estructura t antes de cambiar la configuración usando los argumentos especificados. Puede especificar el argumento de salida con cualquiera de las combinaciones de argumentos de entrada de las sintaxis anteriores.

Ejemplos

contraer todo

Inicialice el generador de números aleatorios usando la semilla y el algoritmo del generador predeterminados.

rng("default")

Muestre la configuración predeterminada del generador de números aleatorios. En este caso, el generador de números aleatorios utiliza el algoritmo Mersenne Twister con la semilla 0.

s = rng
s = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

Cree una matriz de 4 por 4 de números aleatorios distribuidos de manera uniforme entre 0 y 1.

r = rand(4)
r = 4×4

    0.8147    0.6324    0.9575    0.9572
    0.9058    0.0975    0.9649    0.4854
    0.1270    0.2785    0.1576    0.8003
    0.9134    0.5469    0.9706    0.1419

A partir de la versión R2023b, puede establecer la semilla y el algoritmo predeterminados en la ventana Preferences de MATLAB. Si no cambia las preferencias de MATLAB, rng utiliza el valor predeterminado "twister" para el generador Mersenne Twister con la semilla 0, como en las versiones anteriores.

Especifique la configuración del generador de números aleatorios para hacer que los resultados de este ejemplo sean repetibles. Establezca la semilla del generador en 2 y el algoritmo en Mersenne Twister. A continuación, guarde la configuración del generador.

rng(2,"twister")
s = rng
s = struct with fields:
     Type: 'twister'
     Seed: 2
    State: [625x1 uint32]

Cree un vector fila de 1 por 5 de valores aleatorios entre 0 y 1.

x = rand(1,5)
x = 1×5

    0.4360    0.0259    0.5497    0.4353    0.4204

Cambie la semilla y el algoritmo del generador y cree un nuevo vector fila aleatorio.

rng(1,"philox")
xnew = rand(1,5)
xnew = 1×5

    0.5361    0.2319    0.7753    0.2390    0.0036

Ahora restaure la configuración original del generador y cree un vector aleatorio. El resultado concuerda con el vector fila original que x creó con el generador original.

rng(s)
xold = rand(1,5)
xold = 1×5

    0.4360    0.0259    0.5497    0.4353    0.4204

Argumentos de entrada

contraer todo

Semilla de números aleatorios, especificada como entero no negativo menor que 2^32 o "shuffle". Cuando se especifica seed como "shuffle", la función rng inicializa la semilla del generador basándose en la hora actual, lo que resulta en una secuencia distinta de números aleatorios después de cada llamada a rng.

Algoritmo de números aleatorios, especificado como una de las opciones de la tabla. Para obtener más información sobre los algoritmos de generador, consulte Crear y controlar una secuencia de números aleatorios.

ValorNombre del generadorPalabra clave del generador
"twister"Mersenne Twistermt19937ar
"simdTwister"Mersenne Twister rápido orientado a SIMDdsfmt19937
"combRecursive"Combinado múltiple recursivomrg32k3a
"multFibonacci"Fibonacci retardado multiplicativomlfg6331_64
"philox"Generador Philox 4x32 con 10 rondasphilox4x32_10
"threefry"Generador Threefry 4x64 con 20 rondasthreefry4x64_20

Para los generadores heredados utilizados en las versiones 4.0 y 5.0 de MATLAB, utilice una de estas opciones.

ValorNombre del generadorPalabra clave del generador
"v4"Generador versión 4.0 de MATLAB heredadomcg16807
"v5uniform"Generador uniforme versión 5.0 de MATLAB heredadoswb2712
"v5normal"Generador normal versión 5.0 de MATLAB heredadoshr3cong

Configuración del generador de números aleatorios, especificada como una estructura con los campos Type, Seed y State.

Más acerca de

contraer todo

Configuración predeterminada del generador de números aleatorios

  • Puede cambiar la semilla y el algoritmo predeterminados para el generador de números aleatorios en la ventana Preferences de MATLAB. En la pestaña Home, en la sección Environment, haga clic en Preferences. Seleccione MATLAB > General y, a continuación, seleccione una opción diferente para el algoritmo predeterminado y elija un valor diferente para la semilla predeterminada en las preferencias de Random Number Generation. (desde R2023b)

    Cuando inicia una sesión en MATLAB por primera vez o llama a rng("default"), MATLAB inicializa el generador de números aleatorios usando la semilla y el algoritmo predeterminados que ha establecido en las preferencias de MATLAB. Si no cambia las preferencias de Random Number Generation, rng utiliza el valor predeterminado "twister" para el generador Mersenne Twister con la semilla 0, como en las versiones anteriores.

  • Si usa workers paralelos (se requiere Parallel Computing Toolbox™), rng("default") inicializa el generador Threefry 4x64 con 20 rondas y un valor de semilla de 0. Cambiar la configuración predeterminada del generador en la ventana de preferencias de MATLAB no afecta al comportamiento predeterminado de los workers paralelos. (desde R2023a)

Reproducibilidad del generador de números aleatorios

Utilice rng("default") al inicio de su programa si desea que los resultados sean repetibles dentro de una sesión de MATLAB. rng("default") utiliza el algoritmo y la semilla predeterminados que se han especificado en las preferencias de MATLAB. Sin embargo, este comando no garantiza los mismos resultados entre distintas sesiones de MATLAB con preferencias diferentes.

En su lugar, utilice rng(seed,generator) o rng(generator) al inicio de su programa si desea que los resultados sigan siendo los mismos en futuras versiones de MATLAB o cuando el algoritmo y la semilla predeterminados se hayan cambiado en sus preferencias de MATLAB. Por ejemplo, use rng("twister") para utilizar el generador Mersenne Twister con la semilla 0.

Sugerencias

  • Cuando realice procesamiento paralelo, no utilice rng("shuffle") para establecer la secuencia de números aleatorios en distintos workers para secuencias independientes, porque establece la semilla del generador de números aleatorios basándose en la hora actual. La función rng usa la misma semilla cuando el comando se envía a varios workers de forma simultánea, por ejemplo, dentro de un trabajo parfor. Para secuencias independientes en los workers, utilice el comportamiento predeterminado o considere utilizar una subsecuencia única en cada worker usando RandStream.

  • Cuando lleva a cabo un procesamiento paralelo, los generadores de números aleatorios predeterminados en el cliente de MATLAB y en los workers de MATLAB son diferentes. De forma predeterminada, el cliente de MATLAB utiliza el generador Mersenne Twister con la semilla 0 y los workers de MATLAB utilizan el generador Threefry 4x64 con 20 rondas con la semilla 0. Cambiar la configuración predeterminada del generador en las preferencias de MATLAB solo afecta al comportamiento predeterminado del cliente y no al de los workers paralelos. Si necesita generar la misma secuencia aleatoria de números en el cliente y en los workers, puede utilizar rng con el mismo algoritmo generador y semilla (o considere utilizar RandStream con el mismo algoritmo generador, semilla y algoritmo normal de transformación). Para obtener más información, consulte Control Random Number Streams on Workers (Parallel Computing Toolbox).

  • Para utilizar rng en lugar de las funciones rand o randn con las entradas "seed", "state" o "twister", consulte Sustituir sintaxis no recomendadas de rand y randn.

Capacidades ampliadas

Historial de versiones

Introducido en R2011a

expandir todo