Simulador de estacionamento com fervura em R

Neste artigo apresento um simulador de estacionamento que desenvolvi com o simmer em R. Faz pouco mais de um ano que deixei o mundo corporativo. Desde então, dediquei meu tempo e talento para melhorar as cadeias de suprimentos de meus clientes por meio do meu negócio de consultoria, Data Driven Supply Chain LLC. Uma vantagem de possuir uma pequena empresa é que, embora minhas horas de trabalho sejam longas, tenho bastante flexibilidade quando trabalho. Se eu passei das 7h às 14h codificando um modelo de otimização para um cliente, preciso de uma pausa mental (e meu computador precisa de tempo para executar o modelo). Hora de ir à academia ou comprar alguns mantimentos para o jantar de hoje à noite.

Eu moro no subúrbio, então quando eu faço essas pequenas viagens, eu dirijo. Um tempo atrás, comecei a notar algo estranho, indo para a academia em um horário tranquilo à tarde. Eu estaria sentado no meu carro, pegando minha bolsa de ginástica. Eu olhava para cima e ao redor, e havia tantas pessoas ao meu redor, entrando e saindo de seus próprios carros. Por que é que? Estou em um estacionamento que tem facilmente 200 carros, e talvez haja outras dez pessoas no estacionamento. Então, por que cinco destes dez estão na minha vizinhança imediata?

Isso não acontecia toda vez que eu estava na academia, mas acontecia o suficiente para notar mais. Por um tempo, pensei que fosse o fenômeno Baader-Meinhof; Eu só estava notando porque estava na minha mente, mas eu vi isso acontecendo na academia, na farmácia, no alvo, no supermercado e no McDonalds (Para equilibrar a academia.) O que estava acontecendo?

Uma das principais habilidades da modelagem matemática (incluindo a modelagem da cadeia de suprimentos) é a capacidade de observar o complicado mundo real, identificar os principais componentes de um sistema e simplificar. Para descobrir o que estava acontecendo, simplifiquei o sistema e criei um “estacionamento modelo” para uma empresa. Neste modelo:

  1. O estacionamento tem 25 vagas, todas iguais e em fila única. A entrada comercial fica em uma extremidade. Os espaços são designados como Espaço 1 (mais próximo da empresa), Espaço 2 (segundo mais próximo da empresa), … Espaço 25 (mais distante da empresa).
  2. Um carro chega ao estacionamento a cada seis minutos, começando na hora (por exemplo, 8h00, 8h06, 8h12, … 8h42, 8h48, 8h54, 9:00 AM, 9:06 AM…). Assim, chegam dez carros por hora.
  3. Os carros ficam exatamente trinta minutos no estacionamento: um carro que chega às 8h12 sai às 8h42.
  4. Os carros entram e saem das vagas de estacionamento instantaneamente após chegarem ao estacionamento – sem esperar que alguém dê ré, sem esperar na pista, etc. Assim, a vaga de estacionamento desocupada às 8h42 fica imediatamente disponível para o carro, chegando ao estacionamento às 8h42.
  5. Todos os carros podem ocupar qualquer vaga aberta – não há vagas reservadas, vagas pequenas demais para um carro, idiotas que aparentemente não sabem o que significa estacionar entre as linhas, etc.
  6. Quando um carro chega ao estacionamento, ele imediatamente ocupa o espaço aberto mais próximo da loja.

A imagem abaixo representa o estacionamento às 7h59, sem nenhum carro. Supõe-se que o edifício esteja à esquerda do Espaço #1. O espaço #1 é o mais próximo do edifício; O espaço 25 é o mais distante do prédio.

Spaces of parking lot simulator in R

Agora, qualquer um pode imediatamente fazer furos neste modelo simples. Os carros não chegam com bons incrementos de seis minutos; nem todos os clientes passam a mesma quantidade de tempo em um negócio. A ideia de que você pode imediatamente desocupar ou ocupar uma vaga de estacionamento é risível. Mas a simplicidade risível é o ponto. Partimos do modelo simples e construímos a partir daí.

Simulação de eventos discretos: o que é?

É um bom momento para apresentar o principal método analítico usado neste post: Simulação de eventos discretos. A simulação de eventos discretos (DES) é uma maneira poderosa de modelar sistemas que operam sob incerteza.

Em uma simulação de eventos discretos, você constrói (em código de computador) um modelo de um sistema. Sistemas em DES são, amplamente definidos, conjuntos de recursos físicos e humanos que trabalham juntos para servir a um propósito. Os sistemas podem incluir fábricas, armazéns, portos e outras instalações da cadeia de suprimentos e logística; restaurantes e lojas; sites; centros de chamada; instalações médicas… a lista é quase infinita.

Depois de construir um sistema em DES, você o submete às incertezas da vida cotidiana. “Chegadas” entram no sistema de fora (deus ex machina) e usam recursos.

  • Os clientes entram em sua loja
  • Caminhões chegam à sua doca de carga para carga ou descarga
  • Os clientes chegam ao caixa para fazer o checkout
  • Os carros chegam ao drive-thru do seu restaurante
  • Pacientes chegam ao Pronto Socorro

Com o DES, você rastreia a utilização de recursos (por exemplo, docas de carregamento, máquinas de raio-X, caixas) ao longo do tempo e toma decisões sobre seus negócios a partir dele. (Mais precisamente, o software rastreia a utilização e você revisa os resultados.) Como o tempo e a duração do uso de recursos são altamente variáveis, o uso de simulação nos permite modelar essa incerteza.

Existem muitas boas opções de software para simulação de eventos
discretos, tanto de código aberto quanto comercial. Para este post, e para o meu trabalho de consultoria, uso o boil , um excelente pacote R para simulação de eventos discretos. Eu uso pacotes de arrumação para munging e visualização de dados. Se você estiver interessado em aprender a usar o steam, o site tem ótimos tutoriais; mas deste ponto em diante, falarei sobre simulação de uma forma independente de software.

Em nosso exemplo simplificado de estacionamento, estamos facilitando
as coisas: não há incerteza. As chegadas ocorrem precisamente em
intervalos de 6 minutos e saem precisamente 30 minutos após a chegada.
O mundo real não é tão bom, mas novamente – estamos intencionalmente
sendo simplistas para começar.

No DES, você (ou seu software) mantém uma lista de eventos. O nome é descritivo – uma lista de eventos é simplesmente uma maneira de rastrear alterações no sistema (“eventos”) e associar um carimbo de data/hora a elas. Enquanto aprendia sobre DES na pós-graduação, tive que escrever listas de eventos à mão. Para demonstração, faremos o mesmo aqui. Usando as suposições simplificadoras listadas acima e supondo que o primeiro carro chegue às 8h em ponto, rastrearemos chegadas, partidas e vagas atualmente ocupadas por pouco mais de uma hora.

TempoEventosVagas de estacionamento ocupadas
7:59:00 AMComeço do diaNenhum
8:00:00 AMCarro #1 chega, ocupa o espaço 11
8:06:00 AMO carro #2 chega, ocupa o espaço 21,2
8:12:00 AMO carro nº 3 chega, ocupa o espaço 31,2,3
8:18:00 AMCarro #4 chega, ocupa espaço 41,2,3,4
8:24:00 AMO carro nº 5 chega, ocupa o espaço 51,2,3,4,5
8:30:00 AMO carro nº 1 parte, abre espaço 1. O carro nº 6 chega, ocupa o espaço 1.1,2,3,4,5
8:36:00 AMO carro nº 2 parte, abre espaço 2. O carro nº 7 chega, ocupa o espaço 2.1,2,3,4,5
8:42:00 AMO carro nº 3 parte, abre espaço 3. O carro nº 8 chega, ocupa o espaço 3.1,2,3,4,5
8:48:00 AMO carro nº 4 parte, abre espaço 4. O Carro nº 9 chega, ocupa espaço 4.1,2,3,4,5
8:54:00 AMO carro nº 5 parte, abre espaço 5. O carro nº 10 chega, ocupa o espaço 5.1,2,3,4,5
9:00:00 AMO carro nº 6 parte, abre espaço 1. O carro nº 11 chega, ocupa o espaço 1.1,2,3,4,5
9:06:00 AMO carro nº 7 parte, abre espaço 2. O carro nº 12 chega, ocupa o espaço 2.1,2,3,4,5

As imagens abaixo representam a progressão do estacionamento ao longo da lista de eventos. Assumindo que o edifício está à esquerda, o espaço #1 é o espaço mais à esquerda (mais próximo); espaço #25 é o espaço mais à direita (mais distante). Os espaços verdes estão abertos; os espaços vermelhos estão ocupados. O tempo avança de cima para baixo, correspondendo à lista de eventos que acabamos de descrever.

All spaces and time slots of parking lot simulator with simmer in R

Notou algo? Quando o quinto carro chega às 8h24, há cinco vagas
ocupadas – as cinco vagas mais próximas do negócio. E mesmo que os carros continuem chegando a cada seis minutos e os carros partem depois de trinta minutos, as vagas de estacionamento ocupadas não mudam. Poderíamos continuar escrevendo a lista de eventos por mais horas – teríamos o mesmo resultado. Isso toca na Lei de Little, um conceito importante na teoria das filas, o estudo analítico de pessoas ou coisas esperando em filas. (Fila sendo outro nome para linha, raramente usado nos Estados Unidos).

A Lei de Little, L = * W, é simples de descrever, mas poderosa na
aplicação. Aplica-se a qualquer sistema de filas: praticamente em
qualquer lugar que pessoas ou coisas cheguem, esperem um tempo e partam. (Pense em um estacionamento, uma doca de carga, um restaurante, loja, academia, hospital, preenchimento de lacunas…)

L = lambda * W

  • L: Número médio de itens no sistema. Em nosso exemplo, quantos carros, em média, estão no estacionamento
  • lambda: Taxa média de chegada em um sistema. Em nosso exemplo, quantos carros entram no estacionamento em um período de tempo especificado: 1 carro chegando a cada 6 minutos, ou como expressão: 1 carro / 6 minutos
  • W: Tempo médio no sistema. No nosso exemplo, 30 minutos

L = (1 carro / 6 minutos) * 30 minutos = 5 carros

Espere! A Lei de Little diz que, em média, teremos 5 carros no estacionamento. Depois de permitir que os primeiros cinco carros entrem no sistema, conhecido como “período de aquecimento” em estudos de simulação, é quantos carros (e espaços ocupados) vimos quando calculamos manualmente. E enquanto estamos seguindo a regra de que os carros que chegam ocupam o espaço disponível mais próximo, a Lei de Little nos diz que o resultado de 5 carros ocorreria independentemente dos espaços selecionados.

Onde a Lei de Little falha é que as entradas são taxas médias – sem considerar a variabilidade dessas taxas.

Ignore a variabilidade por sua conta e risco

Como qualquer pessoa que trabalhou no balcão de uma loja de varejo ou restaurante de fast-food pode apreciar, estes são muito diferentes:

  • Entre 14h00 e 15h00, cinco clientes chegando distribuídos uniformemente, às 14h00, 14h12, 14h24, 14h36, 14h48. Cada um requer cinco minutos de atenção.
  • Entre 14h e 15h, cinco clientes chegam de uma só vez às 14h10. Cada um requer cinco minutos de atenção. Nenhum outro cliente entra até depois das 15h.

Em ambos os casos, você está atendendo cinco clientes em uma hora – a Lei de Little dá o mesmo resultado para o número médio de clientes no restaurante. Mas os impactos nas operações, na satisfação do cliente e nos níveis de estresse dos funcionários seriam muito diferentes!

(Na faculdade, trabalhei em uma rede de lanchonetes que, para fins legais, chamarei de Underground Trains. Eu era, objetivamente, muito ruim em meu trabalho como “Hoagie Designer”. Me ensinou muito sobre o mundo real da teoria das filas).

As organizações ignoram a variabilidade por sua conta e risco. Observar apenas os insumos médios – clientes por hora, chegadas de caminhões por dia, taxas de produção por hora – pode ocultar a variabilidade nos insumos que realmente importam. Essa é uma das razões pelas quais a simulação de eventos discretos é tão poderosa.

Como o mundo não é tão previsível quanto nosso modelo inicial de estacionamento, agora vamos adicionar alguma variabilidade às entradas e ver o que acontece. Esta tabela representa as entradas e suposições originais e quaisquer alterações que estamos fazendo nelas.

Entrada inicial do simulador de estacionamentoEntrada do simulador
de estacionamento atualizado
O estacionamento tem 25 vagas, todas iguais e em fila única. A entrada comercial fica em uma extremidade.Nenhuma mudança.
Um carro chega ao estacionamento a cada seis minutos, começando na hora. Assim, chegam dez carros por hora.Os carros chegam em média 10 por hora, mas em vez de serem uniformemente espaçados no tempo, o tempo entre chegadas (“tempo entre chegadas”) segue a distribuição exponencial. O tempo médio entre as chegadas ainda é de seis minutos, mas alguns tempos entre chegadas são muito menores que seis minutos, e alguns tempos entre chegadas são muito maiores que seis minutos. Outra maneira de dizer isso, as chegadas são um processo de Poisson.
Os carros ficam exatamente trinta minutos no estacionamento: Um carro que chega às 8h12 sai às 8h42.O tempo que os carros permanecem no estacionamento tem distribuição normal com média de 30 minutos e desvio padrão de 5 minutos.
Os carros entram e saem dos estacionamentos instantaneamente depois de chegarem ao estacionamento.Nenhuma mudança.
Todos os carros podem ocupar qualquer vaga aberta.Nenhuma mudança.
Quando um carro chega ao estacionamento, ele imediatamente ocupa o espaço aberto mais próximo da loja.Os motoristas geralmente preferem um espaço mais próximo, mas nem sempre o mais próximo disponível. Quando um carro chega a um estacionamento, o espaço aberto que ele ocupa é dado pela seguinte fórmula. Suponha que haja N vagas abertas quando um carro chega ao estacionamento (n ≥1). O ponto aberto mais próximo do edifício é designado por j = 1, o ponto aberto mais próximo é designado por j = 2 e assim por diante até j = n. Um motorista selecionará o ponto aberto j com probabilidade calculada de acordo com (0,5^j) / (SOMA 0,5^j para j = 1 a N)

Você pode ver como isso pode mudar a aparência do nosso estacionamento ao longo do tempo. As chegadas não são tão previsíveis; quanto tempo um carro fica no estacionamento não é tão previsível; onde eles estacionam não é tão previsível. Felizmente, a simulação de eventos discretos nos permite, com relativa rapidez, simular o estacionamento sob essa incerteza. O software DES gera aleatoriamente os horários de chegada dos carros e o tempo no estacionamento, com base nos parâmetros que definimos. O software DES rastreia o status de cada vaga de estacionamento (e do estacionamento como um todo) à medida que o dia avança. Abaixo, vemos o status do estacionamento em uma simulação, com média de 10 chegadas por hora, e média de 30 minutos estacionados. Neste visual, estamos olhando para o estacionamento a cada 20 minutos, das 8h às 12h (meio-dia).

Results of parking lot simulator in R

Não é tão previsível, é! Ao longo de um dia inteiro, o número médio de carros no estacionamento ainda é (muito próximo) de 5, de acordo com a Lei de Little. (Confie em mim por enquanto neste). Mas a variabilidade é significativa. Às 8h20, apenas três carros estão no estacionamento. Às 11h20, nove carros estão.

Se fôssemos rastrear o número de carros no lote ao longo de 24 horas, poderia se parecer com o gráfico a seguir. O eixo x é horas desde o início da simulação (portanto, x=0 refere-se às 8h, x=2,5 refere-se às 10h30 e assim por diante). O eixo Y representa o número de carros estacionados (linha verde) e esperando para estacionar, se houver (linha vermelha, zero ao longo da simulação). Você pode ver que, embora o número de carros estacionados seja aproximadamente equilibrado em torno de 5, como sugere a Lei de Little, há uma variabilidade significativa ao longo do dia.

Parking lot simulator output

Você pode estar pensando neste momento: “Mas espere! Se os tempos de chegada dos carros não são mais previsíveis e o tempo que um carro passa no estacionamento não é mais previsível, quão útil é rastrear o número de carros no estacionamento? Não será variável, assim como as entradas são variáveis?”

Se você está pensando assim: a resposta é SIM! (Além disso, você possivelmente sabe um pouco sobre simulação.) Na simulação de eventos discretos, você tem dois lados da moeda: você pode incorporar a aleatoriedade da vida real, mas seus resultados dependem da aleatoriedade específica que você inclui!

O impacto dessa aleatoriedade pode ser mitigado replicando a simulação várias vezes e agregando os resultados para análise. Se replicarmos a simulação do estacionamento doze vezes e plotamos a série temporal do número de carros no estacionamento para cada replicação, ela pode ficar parecida com a imagem abaixo. Você pode examinar cada série temporal e ver que há diferenças entre as replicações. Mas em cada replicação, o número médio de carros no lote (ao longo do tempo) é muito próximo de 5, como sugere a Lei de Little. (Observe que a série temporal acima não está representada nas replicações abaixo).

Se você executar várias replicações de uma simulação, poderá rastrear a utilização de um recurso (todo o estacionamento ou um espaço individual) ao longo do tempo. Você também pode encontrar a utilização total do recurso ao longo de uma replicação e, em seguida, criar um boxplot que agrega a utilização de cada recurso nas replicações.

A imagem abaixo é um boxplot, mostrando a utilização agregada nas doze replicações que geraram o gráfico de série temporal acima. O boxplot indica o intervalo mínimo, máximo, mediano e interquartil (IQR) de utilização. Um ponto vermelho indica utilização média.

Na extrema esquerda do eixo x, vemos a utilização de todo o estacionamento. Sua utilização entre as replicações é homogênea, com utilização média e mediana pouco acima de 20%. Com capacidade de 25 vagas e utilização de 20%, o estacionamento contém, em média, (25 * 20%) = 5 carros, conforme sugere a Lei de Little. (A legenda afirma que a média real é de 5,1 carros – os resultados da simulação nem sempre correspondem exatamente à teoria.)

No eixo x, após todo o estacionamento, o eixo segue da esquerda para a direita com a utilização de vagas individuais. Lembre-se de que espaço 1 denota a vaga de estacionamento mais próxima do prédio; espaço 2 denota a vaga de estacionamento mais próxima; e espaço 25 denota o espaço mais distante do edifício.

Como os motoristas geralmente preferem estacionar mais perto do prédio, a utilização do espaço1 – o espaço mais próximo do prédio – é consistentemente alta, com média em torno de 71%. A utilização diminui gradualmente à medida que se afasta do edifício, e os espaços de 14 a 25 são pouco usados, se é que são usados. (Da próxima vez que você estiver em uma loja grande e o estacionamento não estiver cheio, veja quantos dos espaços mais distantes são usados. Não muitos, eu acho.)

Eu fiz um aplicativo Shiny simples que permite que você experimente os parâmetros de entrada e veja como ele altera a utilização do estacionamento (a saída do aplicativo é muito semelhante às duas imagens anteriores). Você também pode ver o que acontece quando cada vaga de estacionamento aberta tem uma probabilidade igual de seleção e o que acontece quando o número esperado de carros no sistema, pela Lei de Little, é maior que o número de vagas de estacionamento. (Dica: muita espera e um número cada vez maior de carros circulando em vão pelo estacionamento.)

Observe que pode levar algum tempo para executar a simulação no aplicativo. Você receberá um pop-up quando as saídas estiverem prontas para visualização.

Por que tantas pessoas estão perto do meu carro?

Agora, é hora de responder à pergunta original que motivou este post. Quando estou entrando ou saindo de uma vaga em um estacionamento, por que parece que há tanta atividade acontecendo ao meu redor?

Para responder a isso, novamente fazemos um modelo simplista. Assumindo um estacionamento com 25 vagas em uma única linha, podemos encontrar a distância entre cada par de vagas. Por exemplo, a distância entre o Espaço #1 e o Espaço #3 é de dois espaços; a distância entre o Espaço #16 e o Espaço #25 é de nove espaços. Podemos então fazer um histograma das distâncias em pares entre todos os
espaços.

A distância menos comum era… 24 espaços. Isso faz sentido quando você para para pensar um pouco. Há apenas um par de espaços separados por exatamente 24 espaços: #1 e #25. A próxima distância menos comum foi de 23 espaços. Existem apenas dois pares de espaços separados por exatamente 23 espaços: #1 e #24, e #2 e #25. Você pode continuar essa lógica da direita para a esquerda no gráfico, até chegarmos à distância mais comum entre um par de espaços: um espaço. (#1 e #2, #2 e #3, e assim por diante até chegarmos a #24 e #25. Vinte e quatro ocasiões ao todo.)

Este é um ponto de partida interessante, pois sugere que se escolhermos dois espaços ao acaso, a distância mais comum entre eles é 1, com 8% de probabilidade. Haveria uma probabilidade de 37% de estarem separados por cinco ou menos espaços, com uma distância média de 8.667 espaços.

Você pode testar isso sozinho em R com um script simples usando a função de amostra. Ou mais analógico, você pode tentar realizar um experimento usando bolas de pingue-pongue ou pedaços de papel marcados de 1 a 25. Esse efeito provavelmente será mais pronunciado em nossa simulação de estacionamento. Lembre-se, as pessoas tendem a estacionar o mais próximo possível do prédio, e os pontos mais distantes raramente são usados, pelo menos em horários de menor tráfego. No boxplot de utilização acima, observe a utilização dos espaços #12 a #25: mínimo. Isso sugere que chegadas/partidas simultâneas são muito mais prováveis de ocorrer em vagas próximas umas das outras, porque estamos todos tentando estacionar na frente do estacionamento.

Medir esse efeito na simulação de estacionamento é um pouco mais complexo, mas só um pouco. O pacote Sfering em R fornece detalhes de saída de simulação em quadros de dados, incluindo horários de chegada e partida para cada carro e vaga de estacionamento. A partir disso, você pode identificar:

  1. Quando as chegadas/partidas ocorrem dentro de uma janela de tempo especificada uma da outra. Neste exemplo, estou chamando qualquer par de chegadas ou partidas que ocorram dentro de 5 minutos uma da outra, “quase simultâneas”.
  2. Quantos pares de chegadas ou partidas são “quase simultâneos”.
  3. Desses pares que são quase simultâneos, quantos lugares de estacionamento eles estavam separados?

O gráfico a seguir mostra o resultado. De todos os pares de chegada/partida na simulação, menos de 1% ocorreu dentro de 5 minutos um do outro. (Dado que essas simulações representam 24 horas de tempo simulado, isso não é muito surpreendente.) Mas das chegadas e partidas “quase simultâneas”, mais de 20% estavam em espaços adjacentes (distância = 1 no eixo x). Pouco mais da metade estavam separados por três ou menos vagas – bem próximos, no que diz respeito aos estacionamentos.

(Observe que esse gráfico de barras seria praticamente o mesmo se definissemos “quase simultâneo” como ocorrendo dentro de cinco minutos, dez minutos ou 12 horas um do outro. As porcentagens de frequência relativa seriam bastante estáveis.)

Conclusão final e referências relacionadas

Espero que você tenha achado este post divertido e informativo sobre o poder da simulação de eventos discretos (DES). Infelizmente, eu apenas arranhei a superfície do poder do DES. Com o DES, você pode modelar processos complexos e em vários estágios, como fábricas, armazéns e centros de logística. Usando o DES, você pode entender o impacto de mudanças significativas nos processos de negócios antes de se envolver em projetos de capital caros e difíceis de corrigir. Usando o DES, você pode entender como planejar oscilações extremas em seus negócios, como se sua fábrica tivesse que aumentar a produção em 25% durante a noite ou se o tráfego semanal de sua loja dobrasse desta semana para a próxima.

Se você estiver interessado em simulação de eventos discretos, consulte alguns dos seguintes artigos relacionados publicados neste blog:

Obrigado por ler, e boa simulação!

Leave a Reply

Deixe um comentário

O seu endereço de e-mail não será publicado.

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Close

Meta