| Surgido em | 2002 |
|---|---|
| Última versão | 3.0.9 (12 de junho de 2016) |
| Criado por | Klaus G. Müller, Tony Vignaux |
| Licença | MIT |
| Página oficial | simpy.readthedocs.org |
SimPy ("Simulation in Python") é um ambiente para a simulação de eventos discretos baseado no Python. Seu despachador de eventos é baseado em funções geradoras e também pode ser usado para redes assíncronas ou para implementar sistemas de multiagentes (tanto com comunicação simulada, quando real).
Processos em SimPy são meras funções geradoras em Python e são utilizadas para modelar entidades, tais como: clientes, veículos ou agentes. SimPy também fornece vários tipos de recursos compartilhados para modelar sistemas com capacidade limitada (como servidores, guichês de atendimento, estações de trabalho etc.). A partir da versão 3.1, serão disponibilizados recursos de monitoramento, que permitirão extrair diversas estatísticas sobre recursos e processos existentes em um modelo.
As simulações podem ser realizadas "o mais rápido quanto possível", avançando o tempo de simulação ou manualmente, eventos a evento.
Embora seja teoricamente possível fazer simulações de processos contínuos com o SimPy, ele não nenhum recursos específico para realizar isso. No entanto, SimPy é excelente para as simulações com um tamanho fixo de passo, onde os processos não interagem um com os outros ou com recursos partilhados — um simples loop while é suficiente neste caso.
A distribuição do SimPy contém tutoriais, documentação detalhada e um grande número de exemplos.
SimPy é um software open source sob a Licença MIT. A sua primeira versão foi lançada em Dezembro de 2002.
Exemplo: relógio#edit
Um dos objetivos principais do SimPy é sua facilidade de uso. A seguir apresenta-se um exemplo de simulação em SimPy: um relógio imprime na tela o tempo corrente de simulação a cada passo:
>>> 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
Exemplo: fila M/M/1#edit
Uma possível modelagem para um sistema de fila M/M/1 é dada no código a seguir[1]:
"""
Fila M/M/1
"""
import random
import simpy
qtdClientes = 10
taxaChegada = 1.0 / 6.0 #Inverso do intervalo médio entre chegadas em minutos
taxaAtendimento = 1.0 / 5.0 #Inverso do tempo de médio de atendimento em minutos
def chegadas(env):
""" Gera as chegadas dos clientes no sistema """
for i in range(qtdClientes):
yield env.timeout(random.expovariate(taxaChegada))
name = 'Cliente %d' % (i+1)
env.process(atendimento(env, name))
def atendimento(env, name):
""" Simula atendimento dos clientes no servidor 1 """
print('%7.2f\t Chegada\t %s' % (env.now, name))
atendReq = Servidor1.request()
yield atendReq
print('%7.2f\t Atendimento\t %s' % (env.now, name))
yield env.timeout(random.expovariate(taxaAtendimento))
Servidor1.release(atendReq)
print('%7.2f\t Partida\t %s' % (env.now, name))
""" Bloco principal """
print('\nM/M/1\n')
print('Tempo\t', 'Evento\t\t', 'Cliente\n')
random.seed(10)
env = simpy.Environment()
Servidor1 = simpy.Resource(env, capacity=1)
env.process(chegadas(env))
env.run()
Note-se, no exemplo anterior, a função geradora "chegada" que cria clientes no sistema com intervalos de tempo exponencialmente distribuídos entre si. A função ainda faz uma chamada à outra função geradora, "atendimento", responsável por atender o cliente e manter aqueles clientes que encontram o servidor ocupado em fila.
Ver também#edit
- Lista de softwares de simulação
- Simulação de Eventos Discretos
Referências#edit
- ^ CHWIF, Leonardo; MEDINA, Afonso C. Modelagem e Simulação de Eventos Discretos: Teoria e Aplicações. 4ª edição. São Paulo: Elsevier Brasil, 2014. 320 p. ISBN 978-8535279320.
Ligações externas#edit
This article is mirrored from “SimPy” on Português Wikipedia, revision 61738656, written by Wikipedia's contributors and licensed CC BY-SA 4.0. Editing it here creates a Quire copy with its own history.
Synced with Wikipedia revision 61738656 · just now