Simulação de Eventos Discretos em Python
Dr Diogo Costa
Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific
O SimPy oferece três tipos de recursos:
resource
containerstore simpy.Resource()
simpy.Container()
simpy.Store()
Criando um resource
resource_1 = simpy.Resource(env, capacity=8)
capacity=8)Solicitando um recurso
# Abrir solicitação de recurso with resource_1.request() as request:# Fazer a solicitação yield request# Quando o recurso estiver disponível yield env.timeout(event_duration)
Variação do resource anterior
resource_1 = simpy.PreemptiveResource(
env, capacity=1)
Alguns processos têm prioridade sobre outros
Exemplo: técnico de manutenção
Uso semelhante a simpy.Resource()
Solicitando recurso com maior prioridade
with resource_1.request(priority=1) as
request:
yield request
yield env.timeout(process_duration)
Solicitando recurso com menor prioridade
with resource_1.request(priority=2) as
request:
yield request
yield env.timeout(process_duration)
Útil para modelar produção/consumo de material homogêneo, indiferenciado
Pode ser contínuo (água) ou discreto (maçãs)
Exemplo: Reservas de gasolina num posto.
tank_1 = simpy.Container(
env, tank_size, init=tank_size)
Adicionar e remover do container/tanque
yield tank_1.put(add_quantity)
yield tank_1.get(remove_quantity)
Obter a quantidade atual no tanque
tank_1.level
Obter a capacidade total do tanque
tank_1.capacity
Criar um store
store_1 = simpy.Store(
env, capacity=2)
Parecido com simpy.Container(), mas armazena objetos diferentes
Em vez da noção abstrata de “quantidade” dos containers
yield store_1.put("item_1")
yield store_1.get()
Ver lista de itens disponíveis
store_1.items
Ver capacidade do store
store_1.capacity
Exemplo
Situação atual: 1 caixa
simpy.Resource(env, capacity=1)...
tempo: 23.7 min | Cliente 30 > Concluído
Cenários simulados: n caixas
simpy.Resource(env, capacity=2)...
tempo: 13.2 min | Cliente 30 > Concluído
simpy.Resource(env, capacity=3)...
tempo: 8.6 min | Cliente 30 > Concluído
simpy.Resource(env, capacity=4)...
tempo: 8.6 min | Cliente 30 > Concluído
Simulação de Eventos Discretos em Python