03 Capitulo
03 Capitulo
3.1 Introducción.
La simulación de cualquier sistema o proceso donde existen componentes aleatorios necesita de
números al azar, un número aleatorio es un número de una secuencia cuya probabilidad de
ocurrencia es igual a la de cualquier otro número de la secuencia. Disponer de un buen generador
de números aleatorios es fundamental en cualquier simulación. Constituye también una parte
fundamental en otras áreas, como la Informática (algoritmos aleatorizados, verificación de
algoritmos, complejidad de algoritmos, criptografía, ...), la Estadística (métodos de muestreo y
remuestreo, contrastes Montecarlo, Inferencia Bayesiana, ...), y, en general, en cualquier
problema de cálculo científico que, de manera directa o indirecta, incluya algún elemento
probabilístico incluyendo los juegos de video.
El inicio en la generación de números aleatorios con Métodos Manuales, los mismos que son
laboriosos y no muy prácticos se utiliza en procesos tales como:
- Ruleta
- Baraja
- Dados
- Lanzamientos de moneda
**Las DESVENTAJAS:**
- No es reproducible
- Lento
- No se pueden usar en computadores
localhost:8888/notebooks/LIBRO/03_Cap_NumerosAleatorios.ipynb 1/32
4/1/2021 03_Cap_NumerosAleatorios
Y por último los generados por Computador Digital (Algoritmos Matemáticos) que en la década del
1950 se convertiría en la época en la que se generara números aleatorios de forma aritmética,
estos métodos son secuenciales con cada número nuevo obtenido por uno o varios de sus
predecesores de acuerdo a una fórmula matemática fija. Uno de los primeros métodos propuestos
por Von Neuman y Metropolis, con el famoso método de los cuadrados medios que resumimos a
continuación, pero debemos señalar que los números aleatorios llamados propiamente
pseudoaleatorios que deben cumplir con ciertas características:
localhost:8888/notebooks/LIBRO/03_Cap_NumerosAleatorios.ipynb 2/32
4/1/2021 03_Cap_NumerosAleatorios
Out[10]:
X2 Xi ri
7 407044 70 0.070
localhost:8888/notebooks/LIBRO/03_Cap_NumerosAleatorios.ipynb 3/32
4/1/2021 03_Cap_NumerosAleatorios
X2 Xi ri
18 106929 69 0.069
21 70225 22 0.022
27 106929 69 0.069
72 106929 69 0.069
75 70225 22 0.022
81 106929 69 0.069
84 70225 22 0.022
localhost:8888/notebooks/LIBRO/03_Cap_NumerosAleatorios.ipynb 4/32
4/1/2021 03_Cap_NumerosAleatorios
X2 Xi ri
90 106929 69 0.069
93 70225 22 0.022
99 rows × 3 columns
In [11]: 1 df.tail()
2
Out[11]:
X2 Xi ri
localhost:8888/notebooks/LIBRO/03_Cap_NumerosAleatorios.ipynb 5/32
4/1/2021 03_Cap_NumerosAleatorios
en el código anterior podemos cambiar la cantidad de numeros n** y/o la semilla **r, donde
observaremos facilmente que este método no favorece para la simulación.
Propiedades:
localhost:8888/notebooks/LIBRO/03_Cap_NumerosAleatorios.ipynb 6/32
4/1/2021 03_Cap_NumerosAleatorios
Como el caso anterior de los cuadrados medios se debe seleccionar cuidadosamente a,c,m,Xn
ya que de estas variables depende la calidad y el cumplimiento de los requisitos para ser
considerado un buen generador de números aleatorios.
Ejemplo
localhost:8888/notebooks/LIBRO/03_Cap_NumerosAleatorios.ipynb 7/32
4/1/2021 03_Cap_NumerosAleatorios
m : 1000
a : 101
c : 457
Xo : 4
Out[8]:
Xn ri
0 861 0.861
1 418 0.418
2 675 0.675
3 632 0.632
4 289 0.289
5 646 0.646
6 703 0.703
7 460 0.460
8 917 0.917
9 74 0.074
10 931 0.931
11 488 0.488
12 745 0.745
13 702 0.702
14 359 0.359
localhost:8888/notebooks/LIBRO/03_Cap_NumerosAleatorios.ipynb 8/32
4/1/2021 03_Cap_NumerosAleatorios
Xn ri
15 716 0.716
16 773 0.773
17 530 0.530
18 987 0.987
19 144 0.144
Congruenciales multiplicativo
EL método multiplicativo congruencial es otro caso especial, donde la constante c=0 quedando la
sucesión de la siguiente forma:
localhost:8888/notebooks/LIBRO/03_Cap_NumerosAleatorios.ipynb 9/32
4/1/2021 03_Cap_NumerosAleatorios
para el ejemplo vamos a utilizar los datos de un generador del la hoja electrónica Excel-03, Excel-
07 *Wichman y Hill (1982) :
localhost:8888/notebooks/LIBRO/03_Cap_NumerosAleatorios.ipynb 10/32
4/1/2021 03_Cap_NumerosAleatorios
Out[10]:
Xn ri
0 881 0.881
1 107 0.107
2 929 0.929
3 963 0.963
4 361 0.361
5 667 0.667
6 249 0.249
7 3 0.003
8 241 0.241
9 27 0.027
10 169 0.169
11 243 0.243
12 521 0.521
13 187 0.187
14 689 0.689
15 683 0.683
16 201 0.201
17 147 0.147
18 809 0.809
19 323 0.323
localhost:8888/notebooks/LIBRO/03_Cap_NumerosAleatorios.ipynb 11/32
4/1/2021 03_Cap_NumerosAleatorios
Out[11]:
Xn ri
0 29584 0.976144
1 27179 0.896790
2 7510 0.247798
3 18826 0.621177
4 25530 0.842380
localhost:8888/notebooks/LIBRO/03_Cap_NumerosAleatorios.ipynb 12/32
4/1/2021 03_Cap_NumerosAleatorios
Out[12]:
Xn ri
0 28900 0.953072
1 674 0.022227
2 23611 0.778650
3 11234 0.370478
4 29754 0.981235
In [13]: 1 df2.tail()
2
Out[13]:
Xn ri
15 8516 0.280843
16 22539 0.743297
17 10932 0.360518
18 8737 0.288131
19 29786 0.982291
localhost:8888/notebooks/LIBRO/03_Cap_NumerosAleatorios.ipynb 13/32
4/1/2021 03_Cap_NumerosAleatorios
In [15]: 1 x1 = df["ri"]
2 x1.plot.area()
In [ ]: 1
localhost:8888/notebooks/LIBRO/03_Cap_NumerosAleatorios.ipynb 14/32
4/1/2021 03_Cap_NumerosAleatorios
Conclusiones
En el gráfico podemos observar que las constantes a,m,xo son importantes en la generación de
números aleatorios
localhost:8888/notebooks/LIBRO/03_Cap_NumerosAleatorios.ipynb 15/32
4/1/2021 03_Cap_NumerosAleatorios
ú e os a eato os
localhost:8888/notebooks/LIBRO/03_Cap_NumerosAleatorios.ipynb 16/32
4/1/2021 03_Cap_NumerosAleatorios
12 221316505 0.051529
13 1000654510 0.232983
14 349316615 0.081332
15 3163423092 0.736542
16 1151313157 0.268061
17 3793137674 0.883159
18 2782494227 0.647850
19 2024432 0.000471
20 2184728753 0.508672
21 762880678 0.177622
22 4293148767 0.999577
23 2252621228 0.524479
24 3285505181 0 764966
localhost:8888/notebooks/LIBRO/03_Cap_NumerosAleatorios.ipynb 17/32
4/1/2021 03_Cap_NumerosAleatorios
localhost:8888/notebooks/LIBRO/03_Cap_NumerosAleatorios.ipynb 18/32
4/1/2021 03_Cap_NumerosAleatorios
Contiene diversos métodos que corresponden a varias formas de generar este tipo de números.
genera numeros aleatorios con una distribución uniforme [0,1] entre 0.0 excepto 1.0, la facilidad es
que puede generar diferentes numeros aleatorios con diferentes intervalos y diferentes
distribuciones que más adelante utilizaremos.
In [21]: 1 # para obtener la ayuda del módulo random debemos importar random
2 # y nos muestra la documentación completa del módulo random
3
4 import random
5 help(random)
6
Chooses k unique random elements from a population sequence or set.
Out[22]: 0.6482488570713822
localhost:8888/notebooks/LIBRO/03_Cap_NumerosAleatorios.ipynb 20/32
4/1/2021 03_Cap_NumerosAleatorios
Ejemplo:
localhost:8888/notebooks/LIBRO/03_Cap_NumerosAleatorios.ipynb 21/32
4/1/2021 03_Cap_NumerosAleatorios
0.5714025946899135
Observamos como el nuevo numero generado va a ser igual
0.5714025946899135
Out[27]:
Xn
0 0.543405
1 0.278369
2 0.424518
3 0.844776
4 0.004719
In [28]: 1 df.plot()
localhost:8888/notebooks/LIBRO/03_Cap_NumerosAleatorios.ipynb 22/32
4/1/2021 03_Cap_NumerosAleatorios
1 # Serie 2
2 np.random.seed(100)
3 y = np.random.rand(61)
4 print(y)
5 dfy = pd.DataFrame({'Yn': y})
6 dfy
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-29-dd2c4b9847ee> in <module>
1 # Graficamos la serie 2 que va a ser igua a la primera
2
----> 3 dfy.plot()
**"Ninguna cantidad de pruebas puede probar que un GNA dado sea perfect
o".**
Procedimiento
In [ ]: 1
localhost:8888/notebooks/LIBRO/03_Cap_NumerosAleatorios.ipynb 24/32
4/1/2021 03_Cap_NumerosAleatorios
localhost:8888/notebooks/LIBRO/03_Cap_NumerosAleatorios.ipynb 25/32
4/1/2021 03_Cap_NumerosAleatorios
Para definir las variables aleatorias Se utiliza letra mayúscula para la variable aleatoria y
minúscula para la función de densidad:
1. Conocer f(x)
2. calcular
𝑥
𝐹(𝑥) = ∫0 𝑓(𝑡)𝑑𝑡
3. Generar un número aleatorio con distribución uniforme U(0,1)
𝐹(𝑥) = 𝑟 𝑟 = 𝐹(𝑥)
4. Identificarlo y aplicar la inversa o
5. 𝑋 = 𝐹 −1𝑟 entre 0 <= 𝐹(𝑥) <= 1
F(x) La función acumulativa indica la probabilidad que la variable aleat
oria tome un valor de x
localhost:8888/notebooks/LIBRO/03_Cap_NumerosAleatorios.ipynb 26/32
4/1/2021 03_Cap_NumerosAleatorios
Ejemplo 1
Generar los valores aleatorios de x con una f.d.p 𝑓(𝑥) = 2𝑥 entre 0 <= 𝑥 <= 1
1. 𝑓(𝑥) = 2𝑥𝑥
2. 𝐹(𝑥) = ∫0 𝑓(𝑡)𝑑𝑡
5. 𝐹(𝑥) = 𝑥2
0.0105685
localhost:8888/notebooks/LIBRO/03_Cap_NumerosAleatorios.ipynb 27/32
4/1/2021 03_Cap_NumerosAleatorios
C:\ProgramData\Anaconda3\lib\site-packages\pandas\plotting\_core.py:1001: Use
rWarning: Attempting to set identical left==right results
in singular transformations; automatically expanding.
left=0.0, right=0.0
ax.set_xlim(left, right)
El tiempo entre llegadas t a una instalación se representa con una distribución exponencial con
media
𝐸(𝑡) = 1/λ
unidades de tiempo; es decir,
localhost:8888/notebooks/LIBRO/03_Cap_NumerosAleatorios.ipynb 28/32
4/1/2021 03_Cap_NumerosAleatorios
0.5756462732485115
0.02634012891445657
Out[36]:
Xn ri exp_x
localhost:8888/notebooks/LIBRO/03_Cap_NumerosAleatorios.ipynb 29/32
4/1/2021 03_Cap_NumerosAleatorios
0.5756462732485114
Distribución de Poisson
Distribución de Poisson
localhost:8888/notebooks/LIBRO/03_Cap_NumerosAleatorios.ipynb 30/32
4/1/2021 03_Cap_NumerosAleatorios
Variable aleatoria discreta, la cual con frecuencia resulta útil cuando tratamos con el número de
ocurrencias de un evento durante un intervalo específico de tiempo o espacio.
𝑓(𝑥) = 𝑒− λ λ𝑥 /𝑥!
λ = media o número medio de ocurrencias en un intervalo, Cantidad promedio de "éxitos"
𝑒 = 2.71828..
𝑥 = 𝑛ú𝑚𝑒𝑟𝑜𝑑𝑒𝑜𝑐𝑢𝑟𝑟𝑒𝑛𝑐𝑖𝑎𝑠𝑒𝑛𝑒𝑙𝑖𝑛𝑡𝑒𝑟𝑣𝑎𝑙𝑜0,1,2,3,4,5...𝑣𝑎𝑙𝑜𝑟𝑒𝑠𝑝𝑜𝑠𝑖𝑏𝑙𝑒𝑠𝑑𝑒𝑑𝑒𝑥
𝑓(𝑥) = probabilidad de x ocurrencias en el intervalo
Ejemplo
localhost:8888/notebooks/LIBRO/03_Cap_NumerosAleatorios.ipynb 31/32
4/1/2021 03_Cap_NumerosAleatorios
In [40]: 1 fmp
2
In [41]: 1 x
Out[41]: array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])
localhost:8888/notebooks/LIBRO/03_Cap_NumerosAleatorios.ipynb 32/32