Saltar al contenido principal
LibreTexts Español

5.7: Generación de números pseudoaleatorios

  • Page ID
    80924
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    Todas las estrategias de muestreo aleatorio discutidas en la sección anterior requieren una muestra aleatoria distribuida uniformemente en el rango (0,1). Afortunadamente, existen varios algoritmos bien conocidos para generar tales muestras, llamados números pseudoaleatorios. Estos algoritmos son deterministas. Sin embargo, las propiedades de la secuencia de números pseudo-aleatorios los hacen parecer aleatorios. Estas propiedades incluyen las siguientes:

    1. Los números no presentan ninguna correlación estadística entre sí.
    2. Los números parecen estar distribuidos uniformemente en el rango (0,1).
    3. Hay muchos, muchos (al menos 1,000,000) números en secuencia.
    4. Todos los números posibles en la secuencia se generan antes de que cualquier número se repita.

    Debido a que los algoritmos de generación de números pseudoaleatorios son deterministas, se puede regenerar una secuencia de números siempre que sea necesario. Esto es importante en la simulación tanto para la depuración como para la experimentación usando números aleatorios comunes. ¡Imagina la dificultad de eliminar un error de un modelo si los resultados fueran aleatoriamente diferentes cada vez que se ejecutaba el modelo!

    Una secuencia de números pseudoaleatorios se llama flujo. Tener múltiples flujos de números aleatorios permite que el muestreo de cada distribución de probabilidad particular utilizada en un modelo se asocie con un flujo particular. Por ejemplo, en las dos estaciones en un modelo en serie, al tiempo entre llegadas y el tiempo de operación en la estación A se le asignarían diferentes corrientes. Esto significa, por ejemplo, que si se cambiara la distribución de probabilidad que modela el tiempo de operación en la estación A, los tiempos entre llegadas seguirían siendo los mismos.

    Al igual que en la sección anterior, se presentará una aproximación a la generación de números pseudo-aleatorios. Otros enfoques para generar números pseudoaleatorios se dan en Banks, Carson, Nelson y Nicol (2009) así como en Law (2007). Schmeiser (1980) proporciona una encuesta integral.

    Quizás el tipo más común de algoritmo de generación de números pseudoaleatorios, con respecto al uso en lenguajes de simulación, es el generador congruencial lineal (Lehmer, 1951). El generador congruencial lineal (LCG) tiene la forma:

    \ begin {align} Z_ {i} =\ left (a^ {*} Z_ {i-1} +c\ derecha)\ bmod (m)\ tag {5-3}\ end {align}

    \ begin {align} r_ {i} =Z_ {i}/m\ tag {5-4}\ end {align}

    Las Z i son un conjunto de números enteros que van de 0 a m-1. El entero Z i es un resto y m es el divisor. Otros parámetros del generador son un multiplicador a, un incremento c y el primer entero Z 0. El número pseudoaleatorio r i se obtiene dividiendo Z i por m. Afortunadamente para nuestros fines, los valores para los parámetros (a, c, m y Z 0) que dan como resultado las propiedades deseables enumeradas anteriormente son utilizados por lenguajes de simulación comercial.

    El generador es recursivo que es Z i es una función de Z i-1. Tenga en cuenta que a lo sumo, se pueden obtener m distintos Z i y, por lo tanto, r i (números pseudoaleatorios). Una vez que Z 0 se genera por segunda vez, se repetirá la secuencia completa de Z i's, y por lo tanto r i, y en la misma secuencia que la primera vez.

    Consideremos el ejemplo LCG que se muestra en la Tabla 5-3. Los valores de los parámetros LCG se muestran en la tabla. Tenga en cuenta que las Z i's van de 0-8. Los nueve de los Z i se generan antes de que se repita cualquier valor. Así, las r i parecen estar distribuidas de manera uniforme en el rango (0,1) como pueden ser nueve números. La correlación estadística entre las r i es baja, 0.030. Dado que el número de valores generados es solo 9, el valor de m es demasiado pequeño para una LCG efectiva. No obstante, basta con un ejemplo.

    Tabla 5-3: Ejemplo LCG
    i Z i r i
    M 9 0 8 0.889
    A 4 1 1 0.111
    C 5 2 0 0.000
    3 5 0.556
    4 7 0.778
    5 6 0.667
    6 2 0.222
    7 4 0.444
    8 3 0.333
    9 8 0.889
    10 1 0.111
    11 0 0.000
    12 5 0.556

    5.7: Generación de números pseudoaleatorios is shared under a not declared license and was authored, remixed, and/or curated by LibreTexts.