Quire

SimPy

From Quire, the open reference··2 min read
SimPy
SimPy
Surgido em2002
Última versão3.0.9 (12 de junho de 2016)
Criado porKlaus G. Müller, Tony Vignaux
LicençaMIT
Página oficialsimpy.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

Referências#edit

  1. ^ 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