Construindo um modelo de eventos discretos com SimPy

Simulação de Eventos Discretos em Python

Dr Diogo Costa

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

Antes de construir o modelo

  • Entender o sistema dinâmico

  • Definir objetivo(s) do modelo de eventos discretos

  • Identificar processos:

    • em paralelo
    • em sequência
  • Identificar os recursos do SimPy (resource, container, store)

  • Definir a arquitetura do modelo:

    • Identificar variáveis de estado
    • Fluxo de trabalho do modelo
    • Geradores
Simulação de Eventos Discretos em Python

O sistema dinâmico e os objetivos do modelo

Entender o sistema dinâmico

  • Quais aspectos modulam o comportamento?
  • Quais processos/eventos incluir?

Objetivos do modelo

  • Geralmente usado para otimizar sistemas
  • O que você quer otimizar?

    • Mais clientes
    • Tempos de processamento menores
    • Alocação de recursos otimizada
  • Variáveis de estado para monitorar esses objetivos

Simulação de Eventos Discretos em Python

Identificar os recursos adequados do SimPy

Recursos compartilhados

simpy.Resource(env, capacity=4)
  • Recursos compartilhados entre processos

Exemplos

  • Mesas em um restaurante
  • Máquinas em uma fábrica
  • Assentos em um teatro
  • Caixas em uma loja

Containers

simpy.Container(env, capacity, 
init=initial_capacity)
  • Recurso que se comporta como tanque ou cesto

  • Adiciona e remove quantidades:

.put() e .get()

Exemplos

  • Combustível em um posto
  • Carvão em uma usina a carvão
Simulação de Eventos Discretos em Python

Identificar os recursos adequados do SimPy

Store

simpy.Store(env, capacity=4)
  • Recurso tipo loja com vários itens

  • Capacidade é ilimitada (padrão)

  • Espaços de capacidade para armazenar objetos arbitrários

  • Adiciona e remove itens:

.put() e .get()

Exemplos

  • Lojas que vendem vários itens
  • Depósito
  • Oficina
  • Residência
Simulação de Eventos Discretos em Python

Concatenar eventos com operadores bit a bit

O SimPy usa operadores bit a bit para concatenar dois eventos

Tipos de operadores em Python

  • Operadores aritméticos, lógicos e de comparação

Operadores bit a bit

  • Cálculos bit a bit em inteiros
  • Esperam dois operandos
    • Ex.: a & b, a >> b, a ^ b

No SimPy

  • Operadores bit a bit geram eventos condicionais
  • Espera por ambos ou um de dois eventos/processos

Operadores bit a bit relevantes no SimPy

  • Espera ambos os processos: __and__() ou &
  • Espera qualquer um dos processos: __or__() ou |
Simulação de Eventos Discretos em Python

Vamos praticar!

Simulação de Eventos Discretos em Python

Preparing Video For Download...