Eventos e processos não determinísticos

Simulação de Eventos Discretos em Python

Diogo Costa (PhD, MSc)

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

Não determinismo de eventos

NOTA: termos "evento" e "processo" usados como sinônimos.

O que é não determinismo de evento (ou processo)?

  • Incapacidade de prever o processo com precisão
  • O processo é dito "não determinístico"

Por que processos determinísticos importam?

  • Atividades naturais e humanas costumam ser não determinísticas
  • Cada ocorrência se repete de forma diferente
  • A duração exata é desconhecida
  • Pode impactar fortemente a saída do sistema
Simulação de Eventos Discretos em Python

Exemplos de processos ou eventos não determinísticos

Mundo natural

  • Momento em que um vulcão entra em erupção
  • Exato momento em que vai chover
  • Hora e local de uma queda de raio
  • Hora e local de formação de um tornado

Processos humanos ou iniciados por humanos

  • Momento em que uma máquina quebra
  • Momento em que alguém sente vontade de ir ao banheiro
  • Momento em que um bebê começa a chorar
  • Se um voo comercial vai atrasar
Simulação de Eventos Discretos em Python

Representando eventos não determinísticos em modelos de eventos discretos

Processos não determinísticos

  • Geram impacto não repetível no sistema
  • Duração exata desconhecida

Estatística

  • Representa a variabilidade na duração dos processos
  • O pacote random ajuda nisso

  • Exemplo: random.randint(start, end)

import random

# Processos não determinísticos
process_1 = [5, 15]

while time < simulation_time:

   # Atualiza o tempo de simulação: process_1
   time += random.randint(
               process_1[0], 
               process_1[1])

Simulação de Eventos Discretos em Python

Representando eventos não determinísticos com SimPy

  • Não há métodos específicos para tratar processos não determinísticos

  • A variabilidade da duração é calculada como em modelos sem SimPy

  • Passe as estatísticas corretas para .timeout()

import random

# Processos não determinísticos
process_1 = [5, 15]

while True:

  # Atualiza o tempo de simulação: process_1
  yield env.timeout(random.randint(
         process_1[0], 
         process_1[1]))
Simulação de Eventos Discretos em Python

Vamos praticar!

Simulação de Eventos Discretos em Python

Preparing Video For Download...