Seudoaleatorizar eventos y métodos

Simulación de eventos discretos en Python

Diogo Costa (PhD, MSc)

Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific

Aleatorización de procesos (o eventos)

¿Qué es la aleatorización?

  • Proceso de hacer algo aleatorio
  • En este caso, hacer aleatorios los eventos (o procesos)
  • Útil para simular procesos no deterministas

Importante: Los ordenadores no generan números realmente aleatorios por diseño.

  • A menudo se usa la hora actual y otras variables externas para aumentar la aleatoriedad del generador.
Simulación de eventos discretos en Python

Aleatorio vs. seudoaleatorio

Generación «realmente» aleatoria

  • Números verdaderamente aleatorios
  • Aleatoriedad limitada por restricciones de la máquina

Generación seudoaleatoria

  • Números generados según distribuciones de probabilidad
  • La distribución se hace evidente al aumentar las muestras

Ejemplo: Fábrica con una tarea de montaje manual

Gráfico de dispersión que muestra la duración de un montaje manual repetido varias veces.

  • La distribución de probabilidad es más adecuada para generar la siguiente ocurrencia seudoaleatoria
Simulación de eventos discretos en Python

Paquetes para seudoaleatorización

Se pueden usar varios paquetes de estadística:

  • NumPy
  • SciPy
  • statsmodels
  • pandas
  • Random
  • scikit-learn

Paquete Random

  • Genera números aleatorios y seudoaleatorios

Nuestro foco

  • Métodos comunes en modelos de eventos discretos
Simulación de eventos discretos en Python

Número aleatorio en un rango dado

Entero aleatorio en un rango

Método:

random.randint(start, end)

Ejemplo: Entero aleatorio entre 3 (incluido) y 9 (excluido)

random.randint(3, 9)
5

Float aleatorio en un rango

Método:

random.uniform(start, end)

Ejemplo: Float aleatorio entre 3 y 9

random.uniform(3, 9)
6.4557754
Simulación de eventos discretos en Python

Muestras y secuencias aleatorias

Muestra aleatoria de una secuencia

Método:

random.sample(mylist, k=number_samples)

Ejemplo: 2 elementos aleatorios de una lista

mylist = ["apple", "banana", "cherry"]
random.sample(mylist, k=2)
['cherry', 'banana']

Barajar una lista (reordenar elementos)

Método:

random.shuffle(mylist)

Ejemplo: Reordenado aleatorio de elementos

mylist = ["book", "pencil", "eraser"]
random.shuffle(mylist)
['eraser', 'pencil', 'book']
Simulación de eventos discretos en Python

Distribuciones gaussiana y exponencial

Distribución gaussiana

Método:

random.gauss(average, standard_dev)

Ejemplo: Float seudoaleatorio con media 100 y desviación estándar 50

random.gauss(100, 50)
123.59383

Distribución exponencial

Método:

random.expovariate(lambda)
  • si lambda>0, resultados [0, infinity]
  • si lambda<0, resultados [-infinity, 0]

Ejemplo: Float seudoaleatorio con distribución exponencial y lambda 1.5: random.expovariate(1.5)

0.2234355
Simulación de eventos discretos en Python

¡Vamos a practicar!

Simulación de eventos discretos en Python

Preparing Video For Download...