Neste breve exemplo, implemento uma simulação de simmer backlog, usando simulação de eventos discretos. Afirmei que ferramentas gratuitas como o steam podem ser um suporte forte e podem substituir muitas das licenças comerciais de simulação de eventos discretos atualmente em uso. Isso ocorre porque muitas licenças estão em uso para objetivos simples e se concentram em problemas simples de chão de fábrica, layout ou processo. Para isso, ferramentas gratuitas, como o steam-in em R, são adequadas e podem ser candidatas válidas para substituição de software de simulação comercial.
A simulação de desenvolvimento de backlog FIFO implementada com simmer neste artigo é um exemplo muito simples. Um estudo de simulação comercial com configurações realistas provavelmente será mais complexo. A complexidade pode, por exemplo, ser adicionados aumentando o número de famílias de peças, grupos de produtos e controles de produção. Além disso, pode haver roteiros alternativos no fluxo de produção, exigindo pelo menos algum tipo de tomada de decisão heurística.
Modelo conceitual de produção push-based
Neste exemplo simples eu modelo um processo de recebimento que recebe matéria-prima. Este material vai para uma área de armazenamento central que funciona como um buffer. De lá, as peças vão para uma das quatro estações de processamento. A partir daí, as peças processadas vão para outro buffer antes do envio. O envio facilita o processo final neste exemplo simples.
A lógica de priorização de trabalho aplicada é uma lógica simples de “primeiro a entrar, primeiro a sair” (FIFO). Além disso, existe apenas um produto e apenas um tipo de matéria-prima. As estações de processamento são todas idênticas. As calandras de turno etc. não são consideradas, e quaisquer perdas de eficiência nas estações de processamento devido a avarias ou retrabalho são meramente consideradas aplicando distribuições exponenciais para os tempos de processamento. Lógicas mais complexas também podem ser implementadas com o steam, usando os blocos de construção básicos fornecidos pelo pacote.
Para saber mais, veja minha documentação sobre o cozimento. Um link para essa documentação é fornecido no final deste artigo.
As peças recebidas pelo processo de recebimento seguem uma distribuição aleatória em relação ao intervalo de tempo entre as entregas. O tempo de processamento das estações de processamento também segue uma distribuição aleatória. O processo de envio tem um intervalo de tempo fixo.
Distribuições aleatórias para simulação de backlog
Para os intervalos de tempo entre recebimentos de peças, usei uma distribuição uniforme aleatória. Para o tempo de processamento na estação de processamento usei distribuições exponenciais. A ideia por
trás disso é que a distribuição exponencial tem uma cauda longa, capturando, por exemplo, avarias inesperadas, novas ferramentas ou retrabalho etc. Esta é uma simplificação. Normalmente, seria necessário implementar, por exemplo, sucata, avaria, configurações e aquecimento da máquina em detalhes.
Nota: O tempo de processamento tem uma duração mínima, definida por um limite inferior constante.
Implementação do modelo simmer em R
Eu implemento o modelo abaixo, usando o pacote simmer em R para simulação de eventos discretos.
library(magrittr)
library(simmer)
library(simmer.plot)
library(dplyr)
# define semente para geração de números aleatórios
set.seed(42)
# declara/cria ambiente de simulação
env = simmer("Backlog simulation")
# configura um fluxo de trabalho de trajetória
production = trajectory("production process") %>%
seize("processing",1) %>%
timeout(function() 1+rexp(1,0.05)[1]) %>%
release("processing",1) %>%
seize("shipping",1) %>%
timeout(5) %>%
release("shipping",1)
# adicionando um recurso ao ambiente de simulação
env %>%
add_resource("processing",
capacity = 4,
queue_size=100000) %>%
add_resource("shipping",
capacity=1,
queue_size=100000)
# adicionando um recurso ao ambiente de simulação
env %>%
add_generator(name_prefix = "parts",
trajectory = production,
distribution = function() runif(1,3,7))
# executa simulação para 3000 unidades de tempo
env %>% run(3000)
Analisando os resultados obtidos a partir do modelo de simulação de fervura
Prossigo com uma análise dos resultados da simulação abaixo. Para saber mais sobre dados de fervura monitorados, veja minhas referências no final do artigo.
Primeiro, obtenho (“obtenho”) dados monitorados relevantes na forma de dataframes R. Eu posso traçar as curvas de pendências com esses dados, por exemplo. usando ggplot2 em R:
library(ggplot2)
ggplot(get_mon_resources(env)) +
geom_line(mapping=aes(x = time, y = queue, color = resource),size=2) +
ggtitle("Simulated backlog curve") +
xlab("Time") +
ylab("Backlog") +
scale_colour_manual(values = c("#FF0000", "#428EF4"))
Com as configurações atuais do sistema e os tempos de processamento, o backlog antes do processamento não é estacionário. Isso indica um gargalo.
O que acontece se adicionarmos uma estação de processamento adicional? Eu investigo isso no código abaixo.
simmer("Backlog simulation (additional processing station") %>%
add_resource("processing",
capacity = 5,
queue_size=100000) %>%
add_resource("shipping",
capacity=1,
queue_size=100000) %>%
add_generator(name_prefix = "parts",
trajectory = production,
distribution = function() runif(1,3,7)) %>%
run(3000) %>%
get_mon_resources() %>%
ggplot() +
geom_line(mapping=aes(x = time, y = queue, color = resource),size=2) +
ggtitle("Simulated backlog curve") +
xlab("Time") +
ylab("Backlog") +
scale_colour_manual(values = c("#FF0000", "#428EF4"))
Adicionar recursos adicionais ao processamento parece estabilizar o sistema. Isso indica um gargalo de recursos.
Benefícios da simulação simples de simmer backlog
Mesmo um modelo simples de simulação de backlog como o deste artigo oferece uma forte vantagem sobre planilhas Excel convencionais: ele captura a dinâmica dos tempos de processamento e as limitações/capacidades de recursos.
Limitações da simulação simples de simmer backlog
Esse modelo simples de simulação de backlog tem muitas limitações. O fornecimento de matéria-prima não depende do backlog atual (o loop de feedback ausente resultará em níveis de estoque cada vez maiores). Além disso, o modelo apenas implementa uma lógica FIFO, que é, por exemplo, não é suficiente para modelar um sistema de produção mais complexo com muitos controles alternativos de produção e priorização de tarefas.
Métodos alternativos para simular backlog
Uma abordagem alternativa que posso recomendar para uma simulação simples de backlog desse tipo é construir um modelo de simulação no VenSim. O VenSim facilita é uma ferramenta muito simples para dinâmica de sistemas, ou seja, sistemas descritos por estoques e fluxos. Um sistema desse tipo poderia muito bem ter sido analisado usando uma abordagem de dinâmica de sistemas. Abordarei o VenSim e a dinâmica do sistema nos próximos artigos.
Considerações finais e referências
Neste artigo demonstrei uma técnica mais adequada para simular backlog de produção quando comparada a cálculos simples do Excel. O método aplicado foi a simulação de eventos discretos. Usei o R-package swift, um pacote de simulação em R para simulação de eventos discretos.
Para sua referência, aqui estão alguns artigos que podem ser do seu interesse neste contexto:
- Link: Técnicas de simulação
- Link: Simulação de eventos discretos em R com fervura
- Link: Simulando um processo de recebimento simples usando o pacote R de fervura
Cientista de dados com foco em simulação, otimização e modelagem em R, SQL, VBA e Python
Leave a Reply