Skip to content

nunesg/MS-projeto1

Repository files navigation

Simulação de Filas M/M/s - MS

Alunos

  • Gustavo Nunes

Descrição

Este projeto tem como objetivo simular um sistema onde clientes podem chegar e ser atendidos por um dos vários servidores disponíveis. Por exemplo, o sistema pode ser um lava-jato onde os carros chegam no sistema, esperam por um tempo na fila até serem atendidos por um dos atendentes.

A simulação é útil para que possamos coletar dados como por exemplo:

  • número médio de clientes na fila durante o tempo da simulação
  • tempo médio de um cliente no sistema
  • tempo médio de um cliente na fila
  • tempo médio no qual os servidores demoram para atender o cliente

Os tempos com os quais os clientes chegam no sistema e o tempo que um servidor leva para atender um cliente são definidos de forma aleatória através do arquivo de config (ver detalhes nos itens abaixo).

Dependências

  • python3 instalado na máquina
  • pip3 instalado na máquina
  • pacote tabulate
    • pip3 install tabulate
  • pacote bisect
    • pip3 install bisect
  • pacote matplotlib
    • pip3 install matplotlib

Setup arquivo de config

Para executar a simulação, é necessário adicionar os parâmetros desejados no arquivo config.json. Os parâmetros possíveis são:

Nome Descrição Valores Possíveis
tec_type Tipo de aleatoriedade usada para gerar o tempo entre as chegadas uniform, uniform_int, deterministic, normal, exp, mmc
tec Parâmetro necessário para gerar o tempo entre as chegadas dependendo do tec_type desejado (Ver explicação abaixo)
ts_type Tipo de aleatoriedade usada para gerar o tempo de serviço uniform, uniform_int, deterministic, normal, exp, mmc
ts Parâmetro necessário para gerar o tempo de serviço dependendo do ts_type desejado (Ver explicação abaixo)
clients Número de clientes na simulação int > 0
servers Número de servidores int > 0
max_queue_size (opcional, default = inf) Tamanho máximo da fila int >= 0

Parâmetros de aleatoriedade e seus atributos

Os parâmetros que adicionam aleatoriedade à simulação são os parâmetros TEC (tempo entre chegadas) e TS (tempo de serviço). É possível controlar o tipo da variável aleatória desejada pelos atributos tec_type e ts_type, que podem receber um dos possíveis valores abaixo:

Tipo Descrição
uniform Distribuição uniforme em um intervalo
uniform_int Distribuição uniforme de inteiros em um intervalo
deterministic Valor determinístico
normal Distribuição normal
exp Distribuição exponencial
mmc Método de Monte Carlo

Os campos tec e ts armazenam os parâmetros necessários dependendo do tipo (dentre os mencionados acima). Cada tipo exige um formato especial para os parâmetros conforme os exemplos abaixo:

Tipo Descrição do atributo Exemplo
uniform Intervalo de valores possíveis
"ts_type": "uniform",
"ts": {
  "min_value": 1.5, 
  "max_value": 5
}
uniform_int Intervalo de valores possíveis
"ts_type": "uniform_int",
"ts": {
  "min_value": 1, 
  "max_value": 10
}
deterministic Valor a ser retornado
"ts_type": "deterministic",
"ts": 3
normal Média e desvio padrão da distribuição normal.
"ts_type": "normal",
"ts": {
  "mean": 0.5,
  "std_deviation": 1.0
}
exp Taxa de chegada (em unidades de tempo). Por exemplo: lambda = 0.5 significa que os clientes chegam em média a cada meia hora (se a unidade de tempo for em horas), portanto chegam 1/0.5 = 2 clientes por hora.
"ts_type": "exp",
"ts": {
  "lambda": 0.5 
}
mmc Amostra de dados cuja distribuição irá ser aplicada na simulação utilizando o método de monte carlo.
"tec_type": "mmc",
"tec": [1, 1, 1, 2, 2, 3]

Execução

Ambiente Linux

  • No terminal, executar: python3 main.py Alt text Alt text

Google Colab

  1. Criar um novo notebook no Google Colab
  2. Copiar os arquivos do projeto para a pasta arquivos na aba à esquerda
  3. Executar o comando %run main.py em alguma célula de execução

Alt text

Releases

No releases published

Packages

No packages published

Languages