Skip to content

efqdalton/cci_37_lab_01

Repository files navigation

Laboratório de CCI-36/37

Alunos:

Alexandre Hideki Deguchi Martani

Dalton Vinicius Teixiera Pinto

Objetivo

Este laboratório tem como objetivo o estudo e compreensão de modelos de simulação. Foram escolhidos os modelos de abordagem por eventos e por atividades.

Os detalhes de cada implementação e os resultados obtidos estão devidamente comentados nos itens a seguir.

Descrição do Problema

A descrição do problema apresentada no roteiro pode ser expressa segundo os diagramas de ciclos apresentados a seguir:

DiagramaCliente

Diagrama de Ciclos de Cliente

DiagramaLigação

Diagrama de Ciclos de Ligação

DiagramaATM

Diagrama de Ciclos de Caixa Eletrônico

DiagramaManager

Diagrama de Ciclos de Gerente

DiagramaTeller

Diagrama de Ciclos de Operador de Caixa

DiagramaIntegrado

Diagrama de Ciclos Integrado

Abordagem por Eventos

Descrição Geral

Usando a modelagem por eventos, foram implementadas as classes CClient e CCall.

Cada objeto da classe CClient representa um cliente presencial que entrou no banco. Cada objeto da classe CCall representa uma ligação para o gerente.

Descrição das rotinas

As classes básicas não foram alteradas a partir do exemplo dado em classe. As classes CCall e CClient implementam a abordagem por eventos, sendo cada método representando um evento, ou uma subrotina de um evento. Os eventos são agendados e executados pela classe básica CEventExecutive.

Classe CCall:

  • ArriveCall: Trata a chegada de uma ligação; Se o gerente está livre, inicia o serviço e agenda o fim do serviço, caso contrário, coloca a ligação na fila de ligações. Também agenda a chegada da próxima ligação.

  • ScheduleEndCall: Verifica que o tempo que o cliente esperou é maior que o limite. Se for, termina a ligação imediatamente e registra um não atendimento; caso contrário, agenda o final do serviço.

  • EndCallService: Trata o final do serviço da ligação, coletando estatísticas.

  • EndCall: Encerra a ligação. Verifica se há outra ligação ou outro cliente na fila para o gerente, se houver, inicia o serviço do mesmo; caso contrário, coloca o gerente em estado livre.

  • ExecuteEvent: Classe de ajuda para roteamento dos eventos.

Classe CClient:

  • ScheduleEndATMService: Agenda o final do serviço no ATM.

  • ScheduleEndManagerService: Agenda o final do serviço no gerente.

  • ScheduleEndTellerService: Agenda o final do serviço no caixa.

  • ArriveClient: Trata a chegada de um cliente. Basicamente, decide para onde o cliente deseja ir e chama uma das funções GoTo*. Também agenda a chegada do próximo cliente.

  • GoToATM: Trata a ida do cliente ao ATM. Se o ATM estiver livre e sem fila, ele vai no ATM, caso contrário, ele entra no fim da fila.

  • GoToManager: Trata a ida do cliente ao gerente. Se o gerente estiver livre e sem fila e não tiver nenhuma ligação na fila, ele vai no gerente, caso contrário, ele entra no fim da fila.

  • GoToTeller: Trata a ida do cliente ao caixa. Se o caixa estiver livre e sem fila, ele vai no caixa, caso contrário, ele entra no fim da fila.

  • GoOut: Trata a saída do cliente, gerando estatística de tempo de permanência do cliente no sistema.

  • EndATMService: Trata o fim do serviço de ATM, onde o cliente pode decidir sair ou ir para o caixa ou ir para o gerente. Verifica a fila do ATM para a presença de outros clientes e processa o próximo, ou marca o ATM como livre.

  • EndManagerService: Trata o fim do serviço de gerente, depois do qual o cliente sai da agência. Verifica a fila de ligações e a de clientes no gerente e processa o próximo, ou marca o gerente como livre.

  • EndTellerService: Trata o fim do serviço de caixa, depois do qual o cliente sai da agência. Verifica a fila do caixa para a presença de outros clientes e processa o próximo, ou marca o caixa como livre.

  • ExecuteEvent: Classe de ajuda para roteamento dos eventos.

Listagem do Programa

Os arquivos da modelagem por atividades estão em anexo, no arquivo .zip no qual este relatório foi entregue, a descrição de cada arquivo segue a seguir:

  • EventApproach.cpp: Programa principal, no qual estão descritas as rotinas e classes especificas para a solução do problema na abordagem de eventos.
  • Event.h: Biblioteca oferecida pelo professor para a realização do laboratório, tal biblioteca possui as classes básicas para a modelagem por eventos.
  • Statistics.h: Biblioteca oferecida pelo professor que contém rotinas para o tratamento estatístico dos dados. Tal biblioteca foi ligeiramente modificada para facilitar a realização do laboratório.
  • CLista: Biblioteca oferecida pelo professor, que contém a representação de listas usadas nos outros arquivos.

Observação: Para compilar e executar o laboratório, é necessário que exista a pasta output para que as saídas de debug sejam devidamente geradas sem que o programa pare de funcionar.

Abordagem por Atividades

Descrição Geral

Usando a modelagem por atividades, foi implementada a classe CBank em C++.

Tal classe trata de todas as atividades realizadas para a simulação do funcionamento de um banco.

Tal classe CBank possui uma entidade CEntity, que pode ser um cliente ou uma chamada, a ser tratada adequadamente por cada atividade.

Assim, foi criado o executor CBankExecutor para gerenciar as atividades CBank.

Descrição das rotinas

Basicamente, o executor CBankExecutor possui as rotinas básicas para gerenciar a execução da atividades que ele possui. Assim sendo, ele executa o time scan e para cada periodo de tempo dado, as atividades são obtidas e executadas.

A execução de cada atividade ocorre através da rotina ExecuteActivity, que executa todas as atividades após, onde cada uma checa se deve realizar algo, ou não. Estas atividades são: ArriveClient, ArriveCall, StartManager, EndManager, StartCall, EndCall, StartTeller, EndTeller, StartATM e EndATM.

  • ArriveClient: Trata de enfileirar a chegada de um cliente, e agendar a chegada do próximo.

  • ArriveCall: Trata de enfileirar a chegada de uma chamada telefônica, e agendar a chegada da próxima.

  • StartManager: Trata de iniciar a execução do atendimento de um cliente pelo Gerente, agendando o termino do atendimento, se este estiver livre e não houver nenhuma chamada telefônica pendente.

  • EndManager: Trata de terminar execução do atendimento de clientes pelo Gerente, deixando o Gerente livre para realizar outras tarefas.

  • StartCall: Trata de iniciar a execução do atendimento de chamada telefônica pelo Gerente, agendando o termino do atendimento, se este estiver livre.

  • EndCall: Trata de terminar execução do atendimento de chamadas telefônicas pelo Gerente, deixando-o livre para realizar outras tarefas.

  • StartTeller: Trata de iniciar a execução do atendimento de um cliente pelo Operador de Caixa, agendando o termino do atendimento, se este estiver livre.

  • EndTeller: Trata de terminar execução do atendimento de cliente pelo Operador de Caixa, deixando-o livre para atender um novo cliente.

  • StartATM: Trata de iniciar a execução do atendimento de um cliente pelo Caixa Eletrônico, agendando o termino do atendimento, se este estiver livre.

  • EndATM: Trata de terminar execução do atendimento de cliente pelo Caixa Eletrônico, deixando-o livre para atender um novo cliente. Tal atividade também reencaminha o cliente para próximo atendimento, se necessário (Gerente ou Operador d Caixa).

Listagem do Programa

Os arquivos da modelagem por atividades estão em anexo, no arquivo .zip no qual este relatório foi entregue, a descrição de cada arquivo segue a seguir:

  • ActivityApproach.cpp: Programa principal, no qual estão descritas as rotinas e classes especificas para a solução do problema na abordagem de atividades.
  • Activity.h: Biblioteca oferecida pelo professor para a realização do laboratório, tal biblioteca possui as classes necessárias para a implementação das classes específicas do executor, atividade além de conter a classe CEntity, usda para modelar os clientes e chamadas.
  • Statistics.h: Biblioteca oferecida pelo professor que contém rotinas para o tratamento estatístico dos dados. Tal biblioteca foi ligeiramente modificada para facilitar a realização do laboratório.
  • CLista: Biblioteca oferecida pelo professor, que contém a representação de listas usadas pela biblioteca Activity.h.

Observação: Para compilar e executar o laboratório, é necessário que exista a pasta output para que as saídas de debug sejam devidamente geradas sem que o programa pare de funcionar.

Resultados

A execução desta modelagem para foi feita para os períodos de 6 meses, 1 ano, 2 anos, 5 anos e 10 anos.

Os resultados resumidos de cada período são dados pelas tabelas a seguir:


 

Simulação para 6 Meses

Abordagem de eventos

Grandeza Total Média Desvio Padrão Valor Mínimo Valor Máximo
ATM Duration86394.1396261.8560910.20170811.671191
ATM Wait86403.6151445.2331160.00000045.755213
Call Duration48565.4910842.6045461.0002759.997803
Call Wait60005.7701604.4184970.00000022.094143
Call in System59999.7462813.7146571.04724319.759047
Calls Attended60000.8095000.3927280.0000001.000000
Client Wait1485510.31720729.1859920.000000361.870354
Client in System1229019.60774633.9844450.205717393.747934
Manager Duration258210.1152573.9703640.25073324.764223
Manager Wait258242.97146958.9709110.000000361.870354
Teller Duration36337.1146112.8764790.20571716.965734
Teller Wait36333.0484285.4417020.00000051.844464

Abordagem de atividades

Grandeza Total Média Desvio Padrão Valor Mínimo Valor Máximo
atm duration 8568 4.165867 1.882081 0.202444 11.403990
atm wait 8569 3.630753 5.361806 0.000000 42.128952
call duration 4683 5.509418 2.597591 1.000407 9.995993
call in system 4683 9.647131 4.116738 1.004345 19.684191
call wait 5993 6.071159 4.734937 0.000000 30.133119
calls attended 5993 0.781579 0.413209 0.000000 1.000000
client in system 12207 18.914280 27.463958 0.202444 304.283557
client wait 14789 9.751271 22.949312 0.000000 270.117981
manager duration 2485 9.966270 3.869498 0.250387 25.282985
manager wait 2485 40.866090 42.751382 0.000000 270.117981
teller duration 3735 7.020002 2.941426 0.209480 18.358931
teller wait 3735 3.091672 5.419531 0.000000 44.117299


 

Simulação para 1 Ano

Abordagem de eventos

Grandeza Total Média Desvio Padrão Valor Mínimo Valor Máximo
ATM Duration170394.1361161.8660400.20170811.671191
ATM Wait170393.5727525.2507460.00000045.755213
Call Duration97975.4512162.5842671.0000009.998627
Call Wait120685.7016604.4065410.00000022.094143
Call in System120689.6718043.6866081.00109919.830034
Calls Attended120680.8118160.3908750.0000001.000000
Client Wait292038.83709023.5475470.000000361.870354
Client in System2421817.74799927.8566360.202919393.747934
Manager Duration500710.1330433.9149270.21039824.764223
Manager Wait500835.38965547.4701180.000000361.870354
Teller Duration71567.0626152.8811910.20517418.595667
Teller Wait71562.7895494.9426640.00000051.844464

Abordagem de atividades

Grandeza Total Média Desvio Padrão Valor Mínimo Valor Máximo
atm duration 16972 4.139690 1.868442 0.201759 11.420893
atm wait 16973 3.575153 5.288062 0.000000 42.662593
call duration 9442 5.481248 2.582245 1.000407 9.998804
call in system 9442 9.752509 4.087556 1.004345 19.684191
call wait 12261 6.281415 4.776826 0.000000 31.315765
calls attended 12261 0.770084 0.420796 0.000000 1.000000
client in system 24342 19.636214 30.489836 0.202444 331.357688
client wait 29422 10.358609 25.812424 0.000000 310.274037
manager duration 4938 10.127063 3.809828 0.215727 26.741799
manager wait 4939 44.560014 49.211696 0.000000 310.274037
teller duration 7509 7.052402 2.916333 0.209480 18.358931
teller wait 7510 3.196804 5.482631 0.000000 44.117299


 

Simulação para 2 Anos

Abordagem de eventos

Grandeza Total Média Desvio Padrão Valor Mínimo Valor Máximo
ATM Duration342604.1412311.8627330.20038912.275606
ATM Wait342613.4956945.0139870.00000045.755213
Call Duration196375.4740412.5863101.0000009.998627
Call Wait241715.7198214.4065920.00000022.094143
Call in System241709.7065603.6876661.00109919.883716
Calls Attended241710.8124610.3903520.0000001.000000
Client Wait587068.60013521.5223260.000000361.870354
Client in System4857017.49832625.7280480.202919393.747934
Manager Duration994010.1188493.8784820.21039824.764223
Manager Wait994034.52570342.4642250.000000361.870354
Teller Duration145047.0719642.8780860.20517418.595667
Teller Wait145052.8905945.0014830.00000051.844464

Abordagem de atividades

Grandeza Total Média Desvio Padrão Valor Mínimo Valor Máximo
atm duration 33922 4.137965 1.864010 0.201759 12.181896
atm wait 33923 3.465512 5.026479 0.000000 42.662593
call duration 18740 5.483480 2.590704 1.000407 9.998804
call in system 18740 9.696642 4.124551 1.003388 19.755275
call wait 24255 6.208387 4.777759 0.000000 34.377662
calls attended 24255 0.772665 0.419119 0.000000 1.000000
client in system 48581 18.613225 28.206896 0.202444 331.357688
client wait 58698 9.529119 23.746118 0.000000 310.274037
manager duration 9808 10.100937 3.877793 0.203189 26.832446
manager wait 9808 40.306494 45.905201 0.000000 310.274037
teller duration 14966 7.049603 2.899892 0.209480 19.112613
teller wait 14967 3.103734 5.290912 0.000000 44.117299


 

Simulação para 5 Anos

Abordagem de eventos

Grandeza Total Média Desvio Padrão Valor Mínimo Valor Máximo
ATM Duration848954.1384391.8613610.20038912.275606
ATM Wait848953.4798215.0750140.00000062.147405
Call Duration486705.4923342.5887441.0000009.999725
Call Wait600755.7450374.4194080.00000022.706387
Call in System600759.7261803.6800511.00109919.957843
Calls Attended600750.8101540.3921820.0000001.000000
Client Wait1463428.64749721.3692200.000000361.870354
Client in System12100817.57539625.5996040.200585393.747934
Manager Duration2493510.0910363.8820680.20352026.212716
Manager Wait2493634.69806141.6881260.000000361.870354
Teller Duration365107.0752882.8820960.20197418.609883
Teller Wait365112.8715104.9568850.00000051.844464

Abordagem de atividades

Grandeza Total Média Desvio Padrão Valor Mínimo Valor Máximo
atm duration 84436 4.140969 1.862674 0.200681 12.181896
atm wait 84436 3.464934 5.021251 0.000000 50.108404
call duration 46633 5.499744 2.585519 1.000033 9.999463
call in system 46633 9.738059 4.099945 1.000368 19.975167
call wait 60367 6.236943 4.785335 0.000000 48.987263
calls attended 60367 0.772492 0.419227 0.000000 1.000000
client in system 121104 18.726493 28.595492 0.200681 346.831674
client wait 146340 9.609135 24.112179 0.000000 342.918013
manager duration 24622 10.103307 3.863379 0.203189 26.832446
manager wait 24623 40.511503 46.656190 0.000000 342.918013
teller duration 37281 7.061668 2.895419 0.209480 21.990956
teller wait 37281 3.114749 5.385363 0.000000 53.848460


 

Simulação para 10 Anos

Abordagem de eventos

Grandeza Total Média Desvio Padrão Valor Mínimo Valor Máximo
ATM Duration1700004.1392221.8618570.20038912.275606
ATM Wait1700013.4630175.0411850.00000062.147405
Call Duration977455.4992562.5955431.0000009.999725
Call Wait1206265.7428404.4141640.00000025.362012
Call in System1206269.7317613.6875201.00109919.957843
Calls Attended1206260.8103150.3920540.0000001.000000
Client Wait2931808.81245221.7236970.000000361.870354
Client in System24215917.80070926.0216310.200585393.747934
Manager Duration4985510.0972853.8762400.20352027.549700
Manager Wait4985635.65397442.1994340.000000361.870354
Teller Duration733227.0912662.8799440.20197419.403691
Teller Wait733232.9643315.1740880.00000059.846575

Abordagem de atividades

Grandeza Total Média Desvio Padrão Valor Mínimo Valor Máximo
atm duration 169735 4.140539 1.865045 0.200062 13.267173
atm wait 169736 3.494541 5.040700 0.000000 53.240260
call duration 93191 5.493792 2.592358 1.000033 9.999874
call in system 93191 9.732696 4.105017 1.000119 19.975167
call wait 120471 6.232930 4.790617 0.000000 48.987263
calls attended 120471 0.773564 0.418526 0.000000 1.000000
client in system 242512 18.733024 28.397076 0.200681 434.647716
client wait 293238 9.608537 23.912859 0.000000 406.266082
manager duration 49413 10.099489 3.879874 0.203189 26.832446
manager wait 49413 40.455321 46.037706 0.000000 406.266082
teller duration 74089 7.066864 2.895610 0.200799 21.990956
teller wait 74089 3.042558 5.303020 0.000000 53.848460


 

Descrição dos Campos

  • call wait: Tempo de espera de chamadas
  • call in system: Tempo que as chamadas ficam no sistema
  • call duration: Duração do atendimento de cada chamada
  • call attended: Atendimentos de chamada (valor 1 para chamada atendida, valor 0 para chamada não atendida, sendo que o total é o numero de chamadas)
  • client wait: Tempo de espera do cliente, para cada atendimento, independente de qual
  • client in system: Tempo que cada cliente fica no sistema
  • manager wait: Tempo de espera do cliente aguardando o gerente
  • manager duration: Duração do atendimento do cliente pelo gerente
  • teller wait: Tempo de espera do cliente aguardando o operador de caixa
  • teller duration: Duração do atendimento do cliente pelo operador de caixa
  • atm wait: Tempo de espera do cliente aguardando o caixa eletrônico
  • atm duration: Duração do atendimento do cliente pelo caixa eletrônico

Análise dos Resultados

Pode-se perceber que em todos os dados, tem-se uma convergência rápida, sendo que eles diferem pouco. Isso pode denotar que a aproximação obtida é boa.

Ainda assim, alguns dos dados apresentam comportamento estranho, como os valores de manager wait (Espera do cliente para atendimento com gerente). Porém este tipo de resultado é facilmente entendido ao olharmos os valores máximos, que são extremamente altos. Isso significa que apesar da grande maioria dos valores estarem concentrados perto de valores relativamente baixos, existem valores extremos muito grandes, que fazem com que o desvio padrão seja bem elevado.

Comparação entre as Abordagens

A dificuldade da abordagem de eventos é a grande quantidade de casos que precisam ser tratados em cada evento. Adicionar mais uma condição, por exemplo, mais um tipo de cliente que visita o gerente, requer alterações em diversos pontos do código.

Já na abordagem por atividades tem-se grande facilidade em adicionar novas atividades, basta adicionar uma rotina simples a mais para que cada uma seja tratada adequadamente, com o devido cuidado de fazer as checagens de tipo de atividade e tempo. A desvantagem é a grande quantidade de verificações de tipo de atividade e de tempo, presente em praticamente todos os métodos. Nesta abordagem, há uma quantidade muito maior de chamadas de métodos, que são descartados nessa verificação. Porém, tais chamadas consomem tempo de programação e de processamento.

Em ambos os métodos, nota-se a existência do acoplamento entre as classes, pois por exemplo, ao fazer com que o gerente atenda prioritariamente chamadas telefônicas, é preciso que a rotina de atendimento ao cliente esteja programada adequadamente, fazendo com que o atendimento não seja realizado se houver chamada telefônica em espera. Este tipo de raciocínio é sutil, mas causa grandes problemas e é difícil de ser notado.

Assim como o esperado, ambas implementações trouxeram valores muito próximos, como exemplo temos a espera por atendimento no caixa eletrônico para o período de 10 anos: por atividade obteve-se 3.49 mins com desvio padrão de 5.04 mins, já na abordagem por eventos obteve-se 3.46 mins com desvio padrão de 5.04 mins.

Alguns poucos valores apresentaram uma diferença um pouco maior, como a espera por atendimento do gerente no período de 10 anos: por atividade obteve-se 40.45 mins com desvio padrão de 46.04 mins, já para eventos, obteve-se 35.65 mins com desvio padrão de 42.20 mins. A primeira vista, estes dados parecem ruins pela distância da ordem de 10%, porém nota-se que o desvio padrão é muito grande, tornando-os compatíveis ainda assim. Esse grande desvio padrão é devido a presença de alguns poucos valores muito altos no conjunto de amostras, no caso de atividades, obteve-se um valor máximo de 406.26 mins e no de eventos um valor máximo de 361.87, assim variações nesses campos são totalmente compreensíveis e esperadas.

Conclusão

Com a realização deste laboratório, pode-se compreender melhor as possíveis implementações de modelos de simulações.

Os resultados obtidos foram coerentes com o esperado, uma vez que, para abordagens diferentes, foi possível obter valores bem próximos para cada grandeza estudada. Em algumas grandezas, o valores não foram tão próximos quanto o esperado, porém tal resultado é facilmente compreendido quando se observa que estes estão dentro da faixa determinada pelo desvio padrão.

Além disso, foi possível comparar as vantagens e desvantagens de cada um dos modelos de simulações utilizado, tornando possível uma escolha mais consciente do modelo que será adotado em trabalhos futuros.

About

Lab suga de cci-37

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published