Solução dos desafios 21 e 22
Desafio 21: crie um processo de geração de automóveis que desejam cruzar a ponte, durante o horário de pico que dura 4 horas. Os intervalos entre chegadas sucessivas de veículos para travessia são exponencialmente distribuídos com média de 10 segundos (ou 6 veículos/min), e a ponte permite a travessia de 10 veículos por minuto. Após 4 horas de operação, quantos veículos estão em espera por travessia da ponte?
Em relação ao modelo anterior, este novo sistema possui um processo de geração de chegadas de veículos e espera por abertura da ponte. Uma alternativa de implementação é utilizar um Container
para armazenar os veículos em espera pela abertura da ponte, como no código a seguir:
No código anterior, filaTravessia
é um Container
que representa o conjunto de veículos em espera por travessia da ponte. Cada veículo gerado é imediatamente transferido para o Container
.
A função turno
é semelhante à anterior, apenas com a inclusão do tempo de abertura da ponte, como o parâmetro tempo_ponte:
Note que o parâmetro tempo_ponte
é enviado como um valor para a função ponteElevatória
, que agora deve lidar com a travessia dos veículos quando aberta. Neste caso, basta um comando get
no Container
que representa a fila de travessia dos veículos:
Analisando o código anterior, assim que a ponte abre, a linha:
Estima quantos veículos, dentre aqueles que estão no Container,
podem realizar a travessia. A seguir, os veículos são retirados do Container
por meio de um comando get
com parâmetro no número de veículos a serem retirados.
Ao final, deve-se criar o Container
, realizar as chamadas dos processos e executar o modelo por 4 horas (ou 240 minutos):
Quando executado, o modelo completo fornece como saída (resultados compactados):
Portanto, considerando-se as condições simuladas, o modelo indica que 170 veículos ainda estão em espera em fila ao final da última abertura da ponte dentro do horário de pico. Portanto, o tempo de abertura da ponte parece ser insuficiente durante o horário de pico.
Desafio 22: para o sistema anterior, construa um gráfico para o número de veículos em fila em função do tempo de abertura da ponte para travessia de automóveis. Qual o tempo mínimo que você recomendaria de abertura da ponte.
Como o desafio deseja uma avaliação da fila ao final do horário de pico para diferentes valores de abertura da ponte, o primeiro passo é construir um laço para que o modelo possa ser executado para diferentes valores do tempo de abertura da ponte:
Note, no código anterior, que foi criada uma lista, resultado,
para armazenar o tuple
com o tempo de abertura da ponte simulado e o resultado do número de veículos não atendidos ao final da simulação.
A função ponteElevatoria
precisa de apenas de uma pequena modificação para assegurar que a variável global naoAtendidos
receba corretamente o número de veículos não atendidos imediatamente após ao fechamento da ponte:
O próximo passo é acrescentar, ao final da simulação, um gráfico do número de veículos em função do tempo de abertura da ponte. Essa operação é facilitada pelo uso da biblioteca matplotlib no conjunto de dados armazenado na lista resultado:
Quando executado, o modelo anterior fornece como resultado o seguinte gráfico:
Em uma primeira análise, portanto, o tempo de abertura de 7 minutos seria suficiente para atender aos veículos durante o horário de pico. Contudo, nossa análise está limitada a uma replicação apenas, o que torna a conclusão, eventualmente, precipitada (veja o item 2 do tópico "Teste seus conhecimentos" a seguir).
Teste seus conhecimentos
Por que utilizamos na função
ponteElevatoria
a variável globalnaoAtendidos?
Não seria suficiente armazenar na filaresultados
diretamente o número de veículos noContainer
filaTravessia,
pelo comandofilaTravessia.level?
Como nos lembram Chiwf e Medina (2014): "nunca se deve tomar decisões baseadas em apenas uma replicação de um modelo de simulação". Afinal, basta modificar a semente geradora de número aleatórios, para que o resultado do gráfico seja outro (teste no seu modelo!). Modifique o modelo para que ele simule um número de replicações configurável para cada tempo de abertura da ponte. Adicionalmente, garanta que tempos de abertura diferentes utilizem a mesma sequencia de números aleatórios. (Dica: para esta segunda parte, armazene as sementes geradoras em uma lista).
Chwif, L., and A. C. Medina. 2014. Modelagem e Simulacão de Eventos Discretos: Teoria e Aplicacões. 4ª ed. São Paulo: Elsevier Brasil.
Last updated