Pseudo-randomizando eventos e métodos

Simulação de Eventos Discretos em Python

Diogo Costa (PhD, MSc)

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

Randomização de processos (ou eventos)

O que é randomização?

  • Processo de tornar algo aleatório
  • Aqui, tornar eventos (ou processos) aleatórios
  • Útil para simular processos não determinísticos

Vale notar: Computadores, por design, não geram números realmente aleatórios.

  • Hora atual e outras variáveis externas entram no cálculo para aumentar a aleatoriedade do gerador.
Simulação de Eventos Discretos em Python

Aleatório vs. pseudoaleatório

Geração “verdadeiramente” aleatória

  • Números de fato aleatórios
  • Aleatoriedade limitada por restrições da máquina

Geração pseudoaleatória

  • Números gerados com base em distribuições de probabilidade
  • A distribuição aparece conforme a amostra cresce

Exemplo: Fábrica com tarefa manual de montagem

Gráfico de dispersão mostrando a duração de uma montagem manual repetida várias vezes.

  • Distribuição de probabilidade é mais adequada para gerar a próxima ocorrência pseudoaleatória
Simulação de Eventos Discretos em Python

Pacotes para pseudo-randomização

Vários pacotes de estatística podem ser usados:

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

Pacote Random

  • Gera números aleatórios e pseudoaleatórios

Nosso foco

  • Métodos comuns em modelos de eventos discretos
Simulação de Eventos Discretos em Python

Número aleatório em um intervalo

Inteiro aleatório em um intervalo

Método:

random.randint(start, end)

Exemplo: Inteiro aleatório entre 3 (incluído) e 9 (não incluído)

random.randint(3, 9)
5

Número float aleatório em um intervalo

Método:

random.uniform(start, end)

Exemplo: Float aleatório entre 3 e 9

random.uniform(3, 9)
6.4557754
Simulação de Eventos Discretos em Python

Amostras e sequências aleatórias

Amostra aleatória de uma sequência

Método:

random.sample(mylist, k=number_samples)

Exemplo: 2 elementos aleatórios de uma lista

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

Embaralhar uma lista (reordenar elementos)

Método:

random.shuffle(mylist)

Exemplo: Reordenando elementos aleatoriamente

mylist = ["book", "pencil", "eraser"]
random.shuffle(mylist)
['eraser', 'pencil', 'book']
Simulação de Eventos Discretos em Python

Distribuições normal e exponencial

Distribuição normal (gaussiana)

Método:

random.gauss(average, standard_dev)

Exemplo: Float pseudoaleatório com média 100 e desvio padrão 50

random.gauss(100, 50)
123.59383

Distribuição exponencial

Método:

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

Exemplo: Float pseudoaleatório usando distribuição exponencial com lambda 1.5: random.expovariate(1.5)

0.2234355
Simulação de Eventos Discretos em Python

Vamos praticar!

Simulação de Eventos Discretos em Python

Preparing Video For Download...