Eu queria expandir minha série de exemplos SimPy para simulação de cadeia de suprimentos e manufatura. Neste artigo mostro como você pode modelar um estacionamento em Python, usando SimPy. SimPy é uma biblioteca de modelagem de simulação de eventos discretos em Python. Outros exemplos de SimPy e também modelos de simulação de simulação de estacionamento baseados em R já foram compartilhados neste blog no passado. aqui estão alguns exemplos:
- Link : Simulador de estacionamento com fervura em R
- Link : Animação de simulação de transporte de caminhão em Python
- Link : Estudo de simulação de pedestres e tráfego em Thungela para um novo estacionamento
O modelo discutido aqui também poderia ser usado para modelar outros sistemas similares, por exemplo, um armazenamento de buffer de processo com tempos de permanência mínimos (processos de resfriamento, processos de endurecimento e similares) e sua utilização de slot/compartimento.
Benefício das simulações de estacionamento
Os modelos de simulação de estacionamentos são ferramentas valiosas no gerenciamento da cadeia de suprimentos, oferecendo uma infinidade de benefícios. Estes modelos facilitam a alocação eficiente de recursos, como espaço e mão de obra, otimizando a sua utilização. Eles auxiliam no planejamento da capacidade, permitindo decisões bem informadas em relação à expansão ou redução das instalações. A análise do fluxo de tráfego melhora a movimentação geral dos veículos dentro dos centros de distribuição, reduzindo congestionamentos e tempos de espera. O gerenciamento eficiente de filas garante que as mercadorias sejam carregadas e descarregadas prontamente.
Além disso, as simulações de estacionamentos ajudam a identificar oportunidades de redução de custos, minimizando o tempo ocioso e aumentando a eficiência operacional. A medição do desempenho em vários componentes da cadeia de abastecimento apoia a avaliação comparativa e o estabelecimento de metas. Esses modelos permitem a exploração de cenários hipotéticos, permitindo testes e avaliação de mudanças de layout, pessoal e processos. Eles também auxiliam na mitigação proativa de riscos, identificando gargalos e vulnerabilidades nas operações de estacionamento .
Além disso, servem como ferramentas valiosas para o treinamento e desenvolvimento de habilidades dos funcionários, proporcionando um ambiente controlado para o aprendizado das operações de estacionamento e carregamento. Apoiando iniciativas de sustentabilidade, as simulações de estacionamento otimizam rotas e reduzem o impacto ambiental. Estas simulações geram insights baseados em dados que informam a tomada de decisões estratégicas e promovem uma cultura de melhoria contínua, facilitando o teste de novas estratégias para otimização contínua. A integração de simulações de estacionamento na gestão da cadeia de abastecimento pode levar a economias de custos, ganhos de eficiência e melhorias gerais de desempenho na cadeia de abastecimento.
Um modelo de simulação de estacionamento SimPy
Abaixo está um exemplo de Python, também disponível no Github, que consome simpy para modelar um estacionamento . O estacionamento é modelado como um Container com capacidade definida. A capacidade modela o número de vagas de estacionamento no lote.
Um processo SimPy é implementado na classe de estacionamento para modelar chegadas de carros. Este processo continua para um número definido de chegadas de carros. Cada carro chega após um tempo entre chegadas distribuído aleatoriamente. Em seguida, ele ocupa um slot disponível por um período de tempo distribuído aleatoriamente. Depois disso, a vaga de estacionamento é liberada.
import simpy
import random
# modeling framework
class ParkingLot:
env :simpy.Environment
capacity :int
spots :simpy.resources.container.Container
def __init__(self,
env :simpy.Environment,
capacity :int
):
""" constructor """
self.env = env
self.capacity = capacity
self.spots = simpy.resources.container.Container(env, capacity, init=capacity)
def car_arrival(self,
car_id :int
) -> None:
"""
implement simpy process;
models car arrivals in the parking lot, occupying a slot for a randomly distributed duration
"""
print(f"Car {car_id} arrives at {self.env.now}")
yield self.spots.get(1)
print(f"Car {car_id} parks at {self.env.now}")
yield self.env.timeout(random.randint(1, 5))
print(f"Car {car_id} leaves at {self.env.now}")
yield self.spots.put(1)
def main(self,
cararrivals :int,
interarrivaltime_min :int,
interarrivaltime_max :int
) -> None:
""" implements simpy process for main parking lot simulation run """
for car in range(1, cararrivals+1):
t = random.randint(interarrivaltime_min, interarrivaltime_max)
yield self.env.timeout(t)
self.env.process(self.car_arrival(car))
# setup model
env = simpy.Environment()
parking_lot = ParkingLot(env, capacity= 10)
# setup simulation run itself
env.process(parking_lot.main(cararrivals= 10, interarrivaltime_min= 1, interarrivaltime_max= 5))
# run the model
env.run()
Executar este modelo para chegadas de 10 carros, para um estacionamento com 10 vagas, gera a seguinte saída:
O carro 2 chega às 4
Carro 2 estaciona às 4
O carro 1 chega às 2
Carro 1 estaciona em 2
O carro 1 sai às 3
O carro 3 chega às 7
Carro 3 estaciona às 7
O carro 4 chega às 8
Carro 4 estaciona às 8
O carro 2 sai às 9
O carro 5 chega às 9
Carro 5 estaciona às 9
O carro 4 sai às 10
O carro 6 chega às 11
Carro 6 estaciona às 11
O carro 3 sai às 12
O carro 7 chega às 12
Carro 7 estaciona às 12
O carro 5 sai às 13
O carro 6 sai às 13
O carro 8 chega às 16
Carro 8 estaciona às 16
O carro 7 sai às 17
O carro 8 sai às 17
O carro 9 chega às 20
Carro 9 estaciona às 20
O carro 10 chega às 22
Carro 10 estaciona às 22
O carro 10 sai às 24
O carro 9 sai às 25
Nos próximos tutoriais mostrarei como integrar estatísticas personalizadas neste modelo de simulação e, por último, como animá-lo.
Observações finais sobre a modelagem de simulação de estacionamento SimPy
Neste artigo desenvolvi um modelo base simples para um estacionamento , usando SimPy em Python. Usarei esse modelo nos próximos tutoriais para analisar os processos de chegada de carros e a utilização da capacidade do estacionamento ao longo do tempo, e animarei a utilização das vagas ao longo do tempo. Além disso, detalharei o modelo e implementarei zonas de estacionamento e estratégias de minimização de distâncias de viagem.
Se você quiser aprender mais sobre SimPy e simulação de eventos discretos em geral, considere estudar as seguintes postagens e contribuições do blog SCDA:
- Link : Simulação SimPy de transporte de barcaça
- Link : Simulação de linha de montagem e balanceamento de linha
- Link : Simulação completa da cadeia de abastecimento de aves
Cientista de dados com foco em simulação, otimização e modelagem em R, SQL, VBA e Python
Leave a Reply