Resumo¶
Simpy é um framework baseado em processos com simulação de eventos discretos utilizando as bibliotecas padrão do Python.
Os processos em Simpy são definidos através de funções generator e podem, por exemplo, ser utilizadas para definir componentes como compradores, veículos ou agentes. Simpy também disponibiliza diversos tipos de recursos compartilhados para utilização de recursos propensos a congestionamento ( como servidores, caixas e túneis)
As simulações podem ser realizadas de modo “mais rápido possível ”, em tempo real (de acordo com o desenrolar do tempo) ou manualmente passo a passo por cada evento.
Apesar de que na teoria seja possível, usando o Simpy, fazer simulações contínuas, não há recursos que possam ajudá-lo nisso. Por outro lado, seria um exagero usar o Simpy em simulações com limites e processos que não interagem uns com os outros ou que não compartilhasse recursos.
Um exemplo bem simples, simular dois relógios marcando a hora em diferentes intervalos de tempo seria feito da seguinte forma:
>>> import simpy
>>>
>>> def clock(env, name, tick):
... while True:
... print(name, env.now)
... yield env.timeout(tick)
...
>>> env = simpy.Environment()
>>> env.process(clock(env, 'fast', 0.5))
<Process(clock) object at 0x...>
>>> env.process(clock(env, 'slow', 1))
<Process(clock) object at 0x...>
>>> env.run(until=2)
fast 0
slow 0
fast 0.5
slow 1
fast 1.0
fast 1.5
A documentação contém um tutorial, diversos guias explicando os conceitos chave, uma boa gama de exemplos e a documentação da API.
SimPy é distribuído sob os termos da MIT License. Desenvolvedores de modelos de simulação são encorajados a compartilhar suas técnicas de modelagem com a comunidade de usuários do Simpy. Por favor envie uma mensagem para a Lista de emails do Simpy.
Nos links a seguir há uma breve explicação sobre os conceitos do Simpy e são disponibilizados alguns exemplos: assista ao vídeo ou baixe os slides.
SimPy também foi implementando em outras linguagens de programação. Veja em portabilidade para mais informações.