Baixe o app para aproveitar ainda mais
Prévia do material em texto
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO INSTITUTO DE MATEMÁTICA E ESTATÍSTICA Profª.: André Luiz Diniz Disciplina: Processos Estocásticos I Teoria das filas Rio de Janeiro 2013 Introdução Este trabalho tem o objetivo de simular a evolução de um sistema de filas. Para isso, são gerados aleatoriamente valores de tempos de chegada e atendimento, denominados por x1 e x2, conforme uma distribuição exponencial. Para a execução da simulação foi criada uma planilha desenvolvida no excel e código através da ferramenta Visual Basic for Applications (VBA). Com essa automatização, o usuário pode determinar o número de iterações que deseja fazer de modo a obter melhores conclusões da realidade. Este trabalho foi desenvolvido com base na seguinte problemática: Considerando um sistema com as seguintes características: • Número de atendentes: 1; • Taxa de chegada (λ): 9 usuários por minuto; • Taxa de atendimento (μ): 10 usuários por minuto Calcular o tempo médio de espera na fila para os clientes desse sistema. Calcular a probabilidade de, em um determinado instante de tempo qualquer, não haver ninguém na fila. Código do VBA Como já dito, para a execução da simulação foi implementado em VBA uma lógica de modo a gerar automaticamente os valores de tempo conforme quantidade informada pelo usuário. O códido criado é o seguinte: Sub teoria_filas() observacoes = InputBox("Informe o número de observações", "Mensagem", "1000") iteracoes = InputBox("Informe o número de iterações", "Mensagem", "10000") Application.DisplayAlerts = False Application.ScreenUpdating = False 'Limpa a planilha e copia a fórmula que gera x para o tamanho de observações informado Sheets("Análises").Select Range("G3:I1048576").Select Selection.ClearContents Range("H2:I2").Select Selection.Copy Range("H3:I" & observacoes + 1).Select ActiveSheet.Paste Application.CutCopyMode = False Range("G3") = Range("G2") + 1 Range("G2:G3").Select Selection.AutoFill Destination:=Range("G2:G" & observacoes + 1) Sheets("iterações").Select Range("A2:B1048576").Select Selection.Clear 'Guarda o valor da média dos valores gerados e simula outro até atingir o número de iterações informado For i = 1 To iteracoes Range("A" & i + 1).Select ActiveCell.FormulaR1C1 = "=AVERAGE(Análises!C[7])" Range("B" & i + 1).Select ActiveCell.FormulaR1C1 = "=AVERAGE(Análises!C[7])" Range("A" & i + 1 & ":B" & i + 1).Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Calculate Next Sheets("Análises").Select Range("B17").Value = "Para uma amostra de " & observacoes & " observações" Range("B27").Value = "Após " & iteracoes & " iterações" Calculate MsgBox ("Término da simulação!!") End Sub Como gerar valores de tempos? Para que a simulação fosse realizada, foram gerados x’s que reresentam os tempos de chegada e atendimento, modelados por uma distribuição exponencial. Foi utilizado, portanto, o cálculo do inverso da distribuição acumulada da exponencial, que é o seguinte: Então: Portanto, no Excel: Resultados da simulação Podemos perceber que ao simularmos observações ou iterações em números cada vez maiores, os resultados irão se aproximar dos valores teóricos, que são os resultados obtidos através da aplicação nas fórmulas dos parâmetros dados. Item a) No caso do cálculo do tempo médio de espera na fila para os clientes desse sistema, a fórmula a ser aplicada seria a seguinte: Realizando simulação, com um númerro de observações igual a 1.000.000, encontramos: Item b) No caso, do cálculo da probabilidade de, em um determinado instante de tempo qualquer, não haver ninguém na fila, a fórmula a ser aplicada seria: Por simulação, com um númerro de observações igual a 1.000.000, encontramos: Análise por meio de gráficos Através da planilha que elaboramos, é possível perceber que a tendência é de os valores observados, obtidos através de x’s gerados na simulação se aproximarão dos teóricos. Para entender melhor, vamos analisar por gráficos de dispersão os parâmetros e medidas de desempenho encontrados por meio de 100, 1.000 e 10.000 simulações, respectivamente, tendo cada simulação uma quantidade de valores observados descritos abaixo. - Resultados com número de observações igual a 100: - Resultados com número de observações igual a 1000: - Resultados com número de observações igual a 10000: Analisando os gráficos e a linha de tendência é possível perceber que os valores tendem para: λ = 9; μ = 10; ρ = 0,9; Wq= 0,9 ; P0 = 0,1; P1 = 0,09 Esses são exatamente os valores teóricos, que podem ser encontrados aplicando apenas os parâmetros dados no enunciado nas fórmulas de interesse. Código vba para gerar os gráficos Sub montar_graficos() observacoes = InputBox("Informe o tamanho da amostra de tempos a ser gerada por simulação", "Mensagem", "1000") plot = InputBox("Informe o número de resultados que deseja que sejam plotados no gráfico", "Mensagem", "1000") Application.DisplayAlerts = False Application.ScreenUpdating = False 'Adiciona planilha que informará os resultados dos gráfico Sheets("Gráficos").Select Range("A1:F1").Select Selection.Copy Sheets.Add after:=Sheets(Sheets.Count) ActiveSheet.Paste Application.CutCopyMode = False Sheets("Gráficos").Select ActiveWindow.SelectedSheets.Delete Sheets(Sheets.Count).Name = "Gráficos" 'Limpa a planilha e copia a fórmula que gera x para o tamanho de observações informado Sheets("Análises").Select Range("G3:I1048576").Select Selection.ClearContents Range("H2:I2").Select Selection.Copy Range("H3:I" & observacoes + 1).Select ActiveSheet.Paste Application.CutCopyMode = False Range("G3") = Range("G2") + 1 Range("G2:G3").Select Selection.AutoFill Destination:=Range("G2:G" & observacoes + 1) 'Guarda o valor da média dos valores gerados e simula outro até atingir o número de observações informado Sheets("Gráficos").Select For i = 1 To plot Range("A" & i + 1).Select ActiveCell.FormulaR1C1 = "=Análises!R20C5" Range("B" & i + 1).Select ActiveCell.FormulaR1C1 = "=Análises!R21C5" Range("C" & i + 1).Select ActiveCell.FormulaR1C1 = "=Análises!R22C5" Range("D" & i + 1).Select ActiveCell.FormulaR1C1 = "=Análises!R23C5" Range("E" & i + 1).Select ActiveCell.FormulaR1C1 = "=Análises!R24C5" Range("F" & i + 1).Select ActiveCell.FormulaR1C1 = "=Análises!R25C5" Range("A" & i + 1 & ":F" & i + 1).Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Calculate Next 'Gráficos Columns("A:A").Select ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Range("Gráficos!$A:$A") ActiveChart.SeriesCollection(1).Select ActiveChart.SeriesCollection(1).Trendlines.Add ActiveChart.SeriesCollection(1).Trendlines(1).Select With Selection.Format.Line .Visible = msoTrue .ForeColor.ObjectThemeColor = msoThemeColorAccent1 .ForeColor.TintAndShade = 0 .ForeColor.Brightness = 0 End With With Selection.Format.Line .Visible = msoTrue .ForeColor.RGB = RGB(255, 0, 0) .Transparency = 0 End With With Selection.Format.Line .Visible = msoTrue .Weight = 1 End With Columns("B:B").Select ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Range("Gráficos!$B:$B") ActiveChart.SeriesCollection(1).Select ActiveChart.SeriesCollection(1).Trendlines.AddActiveChart.SeriesCollection(1).Trendlines(1).Select With Selection.Format.Line .Visible = msoTrue .ForeColor.ObjectThemeColor = msoThemeColorAccent1 .ForeColor.TintAndShade = 0 .ForeColor.Brightness = 0 End With With Selection.Format.Line .Visible = msoTrue .ForeColor.RGB = RGB(255, 0, 0) .Transparency = 0 End With With Selection.Format.Line .Visible = msoTrue .Weight = 1 End With Columns("C:C").Select ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Range("Gráficos!$C:$C") ActiveChart.SeriesCollection(1).Select ActiveChart.SeriesCollection(1).Trendlines.Add ActiveChart.SeriesCollection(1).Trendlines(1).Select With Selection.Format.Line .Visible = msoTrue .ForeColor.ObjectThemeColor = msoThemeColorAccent1 .ForeColor.TintAndShade = 0 .ForeColor.Brightness = 0 End With With Selection.Format.Line .Visible = msoTrue .ForeColor.RGB = RGB(255, 0, 0) .Transparency = 0 End With With Selection.Format.Line .Visible = msoTrue .Weight = 1 End With Columns("D:D").Select ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Range("Gráficos!$D:$D") ActiveChart.SeriesCollection(1).Select ActiveChart.SeriesCollection(1).Trendlines.Add ActiveChart.SeriesCollection(1).Trendlines(1).Select With Selection.Format.Line .Visible = msoTrue .ForeColor.ObjectThemeColor = msoThemeColorAccent1 .ForeColor.TintAndShade = 0 .ForeColor.Brightness = 0 End With With Selection.Format.Line .Visible = msoTrue .ForeColor.RGB = RGB(255, 0, 0) .Transparency = 0 End With With Selection.Format.Line .Visible = msoTrue .Weight = 1 End With Columns("E:E").Select ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Range("Gráficos!$E:$E") ActiveChart.SeriesCollection(1).Select ActiveChart.SeriesCollection(1).Trendlines.Add ActiveChart.SeriesCollection(1).Trendlines(1).Select With Selection.Format.Line .Visible = msoTrue .ForeColor.ObjectThemeColor = msoThemeColorAccent1 .ForeColor.TintAndShade = 0 .ForeColor.Brightness = 0 End With With Selection.Format.Line .Visible = msoTrue .ForeColor.RGB = RGB(255, 0, 0) .Transparency = 0 End With With Selection.Format.Line .Visible = msoTrue .Weight = 1 End With Columns("F:F").Select ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Range("Gráficos!$F:$F") ActiveChart.SeriesCollection(1).Select ActiveChart.SeriesCollection(1).Trendlines.Add ActiveChart.SeriesCollection(1).Trendlines(1).Select With Selection.Format.Line .Visible = msoTrue .ForeColor.ObjectThemeColor = msoThemeColorAccent1 .ForeColor.TintAndShade = 0 .ForeColor.Brightness = 0 End With With Selection.Format.Line .Visible = msoTrue .ForeColor.RGB = RGB(255, 0, 0) .Transparency = 0 End With With Selection.Format.Line .Visible = msoTrue .Weight = 1 End With MsgBox ("Pronto!!") End Sub
Compartilhar