Está en la página 1de 15

Unidad 2 Generación de números aleatorios

1. GENERACIÓN DE NÚMEROS ALEATORIOS

Uno de los objetivos fuertes de la simulación consiste en generar valores para


las variables que siguen ciertos tipos de distribuciones de probabilidad tal como
lo anotamos anteriormente; en este orden de ideas, uno de los pasos más
importantes en un modelo de simulación trata sobre la generación de variables
aleatorias no uniformes a partir de ciertos números que con un cierto
comportamiento aleatorio, también llamados pseudoaleatorios y/o rectangulares,
permiten predecir sus valores.

Se trata entonces de generar números que puedan ser replicados o generados


a través de ciertas relaciones de recurrencia matemáticas y lógicas llamadas
generadores, bien sea utilizando los generadores disponibles en el mercado o
las tablas de números aleatorios, o las funciones de aleatoriedad de los paquetes
computacionales o mediante la codificación y elaboración de programas propios
que en definitiva descansan en relaciones matemáticas y lógicas que cumplan
con este propósito principal.

Sin embargo, estos números deben cumplir con ciertas características y


condiciones para ser tenidos en cuenta en la simulación, estas características o
condiciones son:

 Deben ser uniformemente distribuidos, es decir que su comportamiento se ajuste


a una cierta distribución uniforme en el intervalo (0,1).
 Deben ser estadísticamente independientes
 Deben ser reproducibles
 Deben tener un periodo largo, es decir que su tiempo de replicación sea
considerado como prolongado en una unidad de tiempo determinada.
 Deben ser generados a través de métodos rápidos
 Que no requieran mucho consumo de recurso computacional.
2.1. GENERADORES CONGRUENCIALES

2.1.1. GENERADOR CONGRUENCIAL MIXTO

Son métodos por medio de los cuales es posible generar una secuencia de
números aleatorios en la cual el próximo número aleatorio generado es
determinado a partir del último número aleatorio generado, por lo tanto, será de
la siguiente forma:

𝑥𝑛+1 = (𝑎𝑥𝑛 + 𝑐)𝑚𝑜𝑑 𝑚


Donde:
• a: Factor multiplicador (a > o)
• c: Factor aditivo (c > o)
• m : Periodo (𝑚 > 𝑥0 , 𝑚 > 𝑎, 𝑚 > 𝑐)
• 𝑥𝑛 : semilla, siempre debe ser un entero positivo 𝑥𝑛 > 0
Ejemplo:

Supongamos que tenemos un generador congruencial mixto con los siguientes


parámetros:
a = 5, c = 7, 𝑥𝑛 = 4 y m = 8
𝑥𝑛+1 = (𝑎𝑥𝑛 + 𝑐) 𝑚𝑜𝑑 𝑚
𝑥𝑛+1 = (5𝑥𝑛 + 7)𝑚𝑜𝑑 8
𝑥0 = 4

Luego para cada interacción se cumple que:

5𝑥𝑛 + 7 𝑚𝑜𝑑 8
(20 + 7)𝑚𝑜𝑑 8
27 𝑚𝑜𝑑 8
El cual se puede descomponer en una parte entera y una parte fraccionaria, así:

24 3 27
= + =
8 8 8
Finalmente, obtenemos la siguiente tabla para cada uno de los números
generados:

Tabla 1. Ejemplo de generador congruencial mixto

n Número rectangular
𝑥𝑛 5𝑥𝑛 + 7 𝑚𝑜𝑑 8 𝑥𝑛+1

0 4 27 mod 8 3 3/8= 0.375


1 3 22 mod 8 6 ¾ =0.75
2 6 37 mod 8 5 5/8 =0.625
3 5 32 mod 8 0 0/8 =0
4 0 7 mod 8 7 7/8 =0.875
5 7 42 mod 8 2 2/8 =0.25
6 2 17 mod 8 1 1/8 =0.125
7 1 12 mod 8 4 4/8=0.5
8 4

Fuente: Autoría Propia

Vemos que en la octava (8) interacción se repite la semilla inicial (4), luego
cuando sucede que el valor de m es igual al período, se dice que el generador
es de período completo.

Ejemplo:

Supongamos que tenemos un generador congruencial mixto con los siguientes


parámetros: 𝑎 = 𝑥0 = 𝑐 = 7 y m = 10
𝑥𝑛+1 = (𝑎𝑥𝑛 + 𝑐)𝑚𝑜𝑑 𝑚
(𝑥𝑛+1 ) = (7𝑥𝑛 + 7)𝑚𝑜𝑑 10

Luego obtenemos la siguiente tabla para cada uno de los números generados:
Tabla 2. Ejemplo de generador congruencial mixto.

N 𝑥𝑛 7𝑥𝑛 + 7 𝑚𝑜𝑑 10 (𝑥𝑛+1 ) Números rectangulares


0 7 56 mod 10 6 6/10
1 6 49 mod 10 9 9/10
2 9 70 mod 10 0 0/0
3 0 7 mod 10 7 7/10
4 7

Fuente: Autoría Propia

Vemos que en la cuarta (4) interacción se repite la semilla inicial (7), luego
cuando sucede que el valor de m no es igual al período, se dice que el generador
es de período incompleto, puesto que: 4 ≠ 10

Por lo anterior, podemos concluir que el periodo del generador de números


aleatorios siempre va a depender de los valores que se le asignen a las
constantes: a, c y m.

2.1.1.1. Elementos para determinar los parámetros de los generadores


congruenciales lineales

a. Selección de m

Se debe seleccionar m de tal forma que este sea el número primo más grande
posible y que a su vez sea menor que pd, es decir:

𝑚 < 𝑝𝑑
Donde:
 p se define como la base del sistema que se está utilizando que puede ser
binario, decimal, hexadecimal, etc.
 d es el número de bits que tiene una palabra de computador en ese sistema.
Por ejemplo, si estamos trabajando en sistema binario con una máquina
computacional cuyo número de bits por palabra es de hasta 32 caracteres, luego
m deberá ser:

𝑚 < 232

Si por el contrario estuviéramos trabajando en sistema decimal, m deberá ser:

𝑚 < 1032

Otra forma de seleccionar el valor de m, será cumpliendo con la siguiente


condición:

m = pd

En este caso m no necesariamente deberá ser considerado como primo.

Ejemplo:

Supongamos que tenemos un generador de números aleatorios con: a = 81, c =


89, si estamos trabajando en sistema decimal con una máquina computacional
cuyo número de bits por palabra es de hasta 2 caracteres, luego m deberá ser:

𝑚 = 102 => 100 = 𝑝𝑑

Tomando el anterior valor de m, se nos pide construir el generador y generar los


números aleatorios con:
𝑥0 = 5

Luego el generador será de la forma:

(𝑥𝑛+1 ) = (81𝑥0 + 89)𝑚𝑜𝑑 102

Y los números generados serán:


Tabla 3. Ejemplo de generador congruencial mixto.

N 𝑥𝑛 81𝑥0 (𝑥𝑛+1 ) Números


+ 89 𝑚𝑜𝑑 102 rectangulares
0 5 494 mod 100 94 94/100
1 94 7703mod100 3 3/100
2 3 332 mod 100 32 32/100
…. … …. ….. …..
100 5

Fuente: Autoría Propia

Ahora bien, se ha encontrado que cuando el generador tiene un m = p d es posible


construir una relación de recurrencia para los últimos dígitos de los números
aleatorios generados.

Dicha relación es de la forma:

𝑌𝑛 + 1, 𝑖 = 𝑥𝑛+1 𝑚𝑜𝑑 𝑝𝑖

Donde:
𝑖<𝑑

b. Selección del parámetro a

El valor seleccionado de a debe ser un entero impar 𝑧 + (2a+ 1) que no sea


divisible por 3 ó por 5. Estos pueden ser: 1, 7, 11, 13, 17, 19,…..

Sin embargo, para asegurar que el periodo del generador sea completo el valor
de a debe cumplir con los siguientes criterios:

 (𝑎 − 1)𝑚𝑜𝑑 4 = 0
Donde 4 es un factor multiplicativo de m

Ejemplo:

Sea el generador conformado por el parámetro:

𝑎 = 17

Luego,

(17 − 1) 𝑚𝑜𝑑 4 = 0
16 𝑚𝑜𝑑 4 = 0
𝑚 = 24 = 16

Entonces el valor seleccionado de a permite construir un generador con período


completo.

 (𝑎 − 1)𝑚𝑜𝑑 𝑏 = 0

Donde b es un factor primo de m

Sin embargo, usualmente se selecciona el parámetro a como un valor de:


𝑎 = 2𝑘 + 1 , cuando se trabaja en sistema binario
𝑎 = 10𝑘 + 1 , cuando se trabaja en sistema decimal
En ambos casos k> 2

Ejemplo:

Supongamos que estamos trabajando en el sistema binario con un valor de K=


3

Luego,
𝑎 = 23 + 1 = 9
c. Selección de C

C puede tomar cualquier valor pero se recomienda, si se trabaja en sistema


binario, seleccionar un valor c cuyo módulo sea:
C mod 8 = 5

Si trabajamos en un sistema decimal seleccionar un valor C cuyo módulo sea:

C mod 200 = 21

d. Selección de 𝒙𝟎

El valor de ¿𝒙𝟎 ? puede ser cualquier valor ya que este es irrelevante para
determinar la completitud del generador.

2.1.2. GENERADOR CONGRUENCIAL MULTIPLICATIVO

Sea 𝑥𝑛 + 1 de la siguiente forma:


𝑥𝑛 + 1 = 𝑎𝑥𝑛 𝑚𝑜𝑑𝑚

Por ejemplo:

Si tomamos el siguiente generador de números aleatorios:

𝑥𝑛 + 1 = 5𝑥𝑛 𝑚𝑜𝑑 10

Obtendremos la siguiente tabla de resultados:

Tabla 4. Ejemplo de generador congruencial multiplicativo.

N 𝑥𝑛 5𝑥𝑛 𝑚𝑜𝑑 10 𝑥𝑛 + 1 Número aleatorio


0 7 35 mod 10 5 5/10
1 5 25mod 10 5 5/10
2 5

Fuente: Autoría Propia


Podemos concluir que este será un generador deficiente de números aleatorios
puesto que luego de la segunda interacción se repite el valor de la semilla.

Por lo tanto, al igual que en el caso de los generadores congruenciales lineales,


los generadores multiplicativos permitan determinar los siguientes números
pseudoaleatorios a partir del número anterior, según lo confirmamos
anteriormente por la propiedad de recursividad.

Así mismo, podemos concluir que el periodo del generador de números aleatorio
siempre va a depender de los valores que se le asignen a las constantes: a, c y
m.

2.1.2.1. Elementos para determinar los parámetros de los generadores


congruenciales multiplicativos
a. En el sistema decimal (base 10)

Si trabajamos en el sistema decimal:

a. El valor de 𝑥0 (la semilla), puede ser cualquier entero positivo impar no divisible
entre 2 y 5 y relativamente primo de m. En este caso 𝑚 = 10, 101 , 102 , 103 … ..
pero m no tiene que ser primo.

b. El valor seleccionado de a puede ser obtenido de la siguiente forma:


𝑎 = 200𝑡 ± 𝑝

Donde t es cualquier número entero positivo y p puede ser cualquiera de los


siguientes números:

P ={3,11, 13, 19, 21, 27, 53, 69, 61, 67, 77, 85, 91, 59}
𝑧 + = {0,1,2,3 … … }

Por ejemplo, sean:

a=200x (1) + 3 = 203


a=200x (1) – 3 =197

c. Selección de m

m puede tomar el siguiente valor:

𝑚 = 10𝑑

Donde d es el número de bits que tiene una palabra en el sistema en el cual


estamos trabajando.

Si 𝑑 ≥ 5 El periodo del generador va a estar definido por la relación

𝑚 = 5𝑥10𝑑−2

Si 𝑑 < 5 El periodo se obtiene de la siguiente forma:

Periodo= m.c.m (⋌ (𝑝𝑑1 ), ⋌ (𝑝𝑑2 ) … .⋌ (𝑝𝑑𝑛 ))

Donde: ⋌ (2) = 1
⋌ (4) = 2 =⋌ (22 ) = 2
⋌ (2𝑑 ) = 2𝑑−2 Sϋ𝑑 ≥ 3
⋌ (𝑝𝑑 ) = 𝑝𝑑−1 ∗ 𝑝 − 1 Si 𝑝 ≥ 2

Por ejemplo:

Sea el siguiente generador de números aleatorios:


(𝑥𝑛+1 ) = 3𝑥𝑛 𝑚𝑜𝑑 100 , 𝑥0 = 17

Luego,
𝑚. 𝑐. 𝑑 = (17, 100) = 1

Como:

𝑚 = 100 = 102

El cual se puede expresar como:

102 = (22 ) ∗ (52 )

Luego,

Periodo = m.c.m(22 , 52 )

⋌ (22 ) ⋌ (52 )
𝑚. 𝑐. 𝑚 = (2, 20)
𝑚. 𝑐. 𝑚 = 20

Vemos entonces que para asegurar que un generador congruencial multiplicativo


sea de periodo completo, este debe ser 𝑚 = 2𝑑 𝑜 𝑚 = 𝑝𝑑 , según sea el sistema
en el cual se está trabajando.

b. En el sistema binario (base 2)

1. El valor de la semilla puede ser cualquier entero impar, primo relativo de m.

2. El valor de a debe ser obtenido de la siguiente expresión:

𝑎 = 8𝑡 ± 3 Donde t es cualquier entero positivo.


3. El valor de m puede ser 2𝑑
𝑚
Si 𝑚 = 2𝑑 el periodo del generador va a ser igual a 2𝑑−2 o va a ser igual a 4

Por ejemplo:

Supongamos que tenemos un generador con los siguientes parámetros:

𝑎 = 5, 𝑥0 = 5 𝑦 𝑚 = 32

Luego el generador será de la forma:

(𝑥𝑛+1 ) = 𝑎𝑥𝑛 𝑚𝑜𝑑


(𝑥𝑛+1 ) = 5𝑥𝑛 𝑚𝑜𝑑 32

Con
𝑚 = 25 = 2𝑑
𝑎 = 8(1) ± 3 𝑥0 = 5

Luego el período será:


𝑝𝑒𝑟𝑖𝑜𝑑𝑜 = 23 = 8

La tabla de los números generados es de la forma:

Tabla 5. Ejemplo de generador congruencial multiplicativo

N Xn 5Xnmod32 (𝑥𝑛+1 ) Número aleatorio

0 5 25 mod 32 25 25/32
1 25 125 mod 32 29 29/32
2 29 145 mod 32 ….. …….
…. … …. ….. …..

Fuente: Autoría Propia


Finalmente, veamos algunos ejercicios resueltos:

1. Dado el siguiente generador, generar los números aleatorios y determinar el


período:

Xn+1 = (5Xn+3) mod 16

Donde
a=5
c=3
m=16

Tabla 6. Ejemplo de generador congruencial multiplicativo.

Número
N Xn (5Xn+3)/16 Xn Uniforme
0 7 2 6/16 6 6/16
1 6 2 1/16 1 1/16
2 1 8/16 8 8/16
3 8 2 11/16 11 6/16
4 11 3 5/8 10 10/16
5 10 3 5/16 5 5/16
6 5 1 3/4 12 12/16
7 12 3 15/16 15 15/16
8 15 4 7/8 14 14/16
9 14 4 9/16 9 9/16
10 9 3 0 0
11 0 3/16 3 3/16
12 3 1 2/16 2 2/16
13 2 13/16 13 13/16
14 13 4 4/16 4 4/16
15 4 1 7/16 7 7/16
16 7 2 6/16 6 6/16

Periodo 16

Fuente: Autoría Propia

2. Dado el siguiente generador, generar los números aleatorios y determinar el


período:

Xn+1=11Xnmod 32

Donde
a=11
c=0
m=32

Tabla 7. Ejemplo de generador congruencial multiplicativo.

Número
N Xn 11Xn/32 Xn Uniforme
0 9 3 3/32 3 3/32
1 3 1 1/32 1 1/32
2 1 11/32 11 11/32
3 11 3 25/32 25 25/32
4 25 8 19/32 19 19/32
5 19 6 17/32 17 17/32
6 17 5 27/32 27 27/32
7 27 9 9/32 9 9/32
8 9 3 3/32 3 3/32
9 3 1 1/32 1 1/32
10 1 11/32 11 11/32
11 11 3 25/32 25 25/32
12 25 8 19/32 19 19/32
13 19 6 17/32 17 17/32
14 17 5 27/32 27 27/32
15 27 9 9/32 9 9/32
16 9 3 3/32 3 3/32

Periodo 8

Fuente: Autoría Propia

Este ejercicio fue resuelto con la hoja de cálculo Excel 2007, utilizando fórmulas
como las siguientes:
11Xn/32: = ($B$28*B31)/$D$28
Xn: = (C31-ENTERO (C31))*$D$28
Núm. Uniforme: =D31/$D$28
Y también mediante el uso de la función: =RESTO ().

2.2. EJERCICIOS PROPUESTOS

Determina el periodo de los siguientes generadores:

1. 𝑥𝑛+1 = (8𝑥𝑛 + 16)𝑚𝑜𝑑 100, 𝑐𝑜𝑛 𝑥0 = 15


2. 𝑥𝑛+1 = (50𝑥𝑛 + 17)𝑚𝑜𝑑 64, 𝑐𝑜𝑛 𝑥0 = 13
3. 𝑥𝑛+1 = (5𝑥𝑛 + 24)𝑚𝑜𝑑 32, 𝑐𝑜𝑛 𝑥0 = 7
4. 𝑥𝑛+1 = (203𝑥𝑛 )𝑚𝑜𝑑105 , 𝑐𝑜𝑛 𝑥𝑜 = 17
5. 𝑥𝑛+1 = (11𝑥𝑛 )𝑚𝑜𝑑 128, 𝑐𝑜𝑛 𝑥0 = 9

También podría gustarte