Neste artigo, posto um modelo baseado em agente de cadeia de suprimentos de distribuição simples em Python. A modelagem baseada em agentes (abreviada como ABM) já foi apresentada por mim em vários outros posts do blog. Aqui estão algumas referências introdutórias que o ajudarão a começar.
- Link: Métodos de simulação para analistas de SCM
- Link: Simulação baseada em agente para negócios
- Link: Modelagem baseada em agente em Python
Eu também desenvolvi um pacote Python para simulações baseadas em agentes baseados em grade. Este pacote pode ser usado para implementar ABMs baseados em grade. Ou seja, no qual o ambiente, no qual os agentes estão localizados, pode ser modelado com uma grade. Mesmo modelos que não requerem um modelo baseado em grade podem ser implementados com tal estrutura. O pacote já está disponível, por exemplo, aqui:
- Link: Pacote de simulação baseado em agente para Python
- Link: Estrutura de simulação baseada em agente em Python
Um modelo baseado em grade pode ser útil, pois fornece um conceito para definir distâncias (incluindo medidas abstratas de distância, como, por exemplo, distância social). Além disso, fornece um conceito padronizado para modelar a interação entre os agentes. Neste post não vou implementar um modelo de simulação baseado em grade . Isso ocorre porque não é necessário no caso do modelo de distribuição SCM discutido aqui.
Modelo conceitual de cadeia de suprimentos
Neste modelo simples, existem dois tipos de fluxos lógicos. Fluxo de informações e fluxo de materiais:
- Os varejistas podem fazer pedidos aos distribuidores. Um distribuidor pode fazer pedidos aos fabricantes. Este é o fluxo de informação .
- Os fabricantes podem produzir e enviar produtos para distribuidores. O distribuidor pode enviar produtos para varejistas. Este é o fluxo de material .
Esta é a cadeia de suprimentos de distribuição de varejo em sua forma mais simples. As adições ao modelo seriam, por exemplo, prazos de entrega, quantidades mínimas de pedidos, tamanhos de lotes de produtos, políticas de estoque, etc. Todas essas adições podem ser adicionadas a um modelo baseado em agente, como o discutido neste artigo.
A figura acima ilustra o modelo conceitual. A próxima seção implementa o ABM da cadeia de suprimentos acima em Python.
Implementando o ABM da cadeia de suprimentos em Python
Abaixo implemento o ABM da cadeia de suprimentos em Python. Primeiro, implemento o framework de classes que usarei. Vou precisar de uma classe Varejista , uma classe Distribuidor e uma classe Fabricante . Eu implemento essas classes no código recortado abaixo.
# RETAILER class
class Retailer:
def __init__(self, inventory_level):
self.inventory_level = inventory_level
def order_from_distributor(self, quantity):
if quantity > self.inventory_level:
order_quantity = quantity - self.inventory_level
return order_quantity
else:
return 0
def receive_shipment(self, quantity):
self.inventory_level += quantity
# DISTRIBUTOR class
class Distributor:
def __init__(self, inventory_level):
self.inventory_level = inventory_level
def order_from_manufacturer(self, quantity):
if quantity > self.inventory_level:
order_quantity = quantity - self.inventory_level
return order_quantity
else:
return 0
def receive_shipment(self, quantity):
self.inventory_level += quantity
# MANUFACTURER class
class Manufacturer:
def __init__(self, production_capacity):
self.production_capacity = production_capacity
def produce_goods(self, quantity):
if quantity <= self.production_capacity:
return quantity
else:
return self.production_capacity
Em seguida, implemento o próprio modelo de simulação . Para isso, escrevo uma função que recebe 4 argumentos. O varejista, o distribuidor, o fabricante e o número de iterações. Eu uso o módulo aleatório para gerar quantidades de pedidos aleatórios.
import random
# SIMULATION implementation
def simulate_supply_chain(retailer :Retailer,
distributor :Distributor,
manufacturer :Manufacturer,
num_iterations :int
) -> None:
""" supply chain simulation
simulates a supply chain with a retailer, a distributor, and a manufacturer;
simulates over a specified amount of iteration;
uses random to generate random order quantities
Args:
# retailer (Retailer): retailer agent that place orders at distributor
# distributor (Distributor): distributor that palces order at manufacturer
# manufacturer (Manufacturer): manufacturer that ships to distrubtor
# num_iterations (int):
Returns:
# None
"""
for i in range(num_iterations):
# retailer places order with distributor
order_quantity = retailer.order_from_distributor(random.randint(5, 15))
# distributor places order with manufacturer
order_quantity = distributor.order_from_manufacturer(order_quantity)
# manufacturer produces goods and ships to distributor
shipped_quantity = manufacturer.produce_goods(order_quantity)
distributor.receive_shipment(shipped_quantity)
# distributor ships goods to retailer
shipped_quantity = distributor.inventory_level
retailer.receive_shipment(shipped_quantity)
Isso completa meu ABM exemplar da cadeia de suprimentos em Python.
Considerações finais e conteúdo relacionado
Um modelo comercial realista teria que incorporar muitos acréscimos. Como inicialmente apontado, por exemplo, prazos de entrega, pontos de pedido, MOQs, tamanhos de lote, etc. Também os próprios pedidos provavelmente não seriam gerados por um simples gerador de números aleatórios como neste caso. No entanto, este exemplo simples ilustra o conceito de modelagem baseada em agentes para modelagem da cadeia de suprimentos. Mesmo uma cadeia de suprimentos muito complexa pode ser modelada dessa maneira.
Se você estiver interessado em simulação baseada em agentes, considere verificar meus exemplos de modelos de simulação de agentes baseados em grade:
- Link: Exemplo Python de modelo SIR baseado em agente
- Link: Modelo de vendas baseado em agente boca a boca
- Link: Modelo de segregação baseado em agente (Python)
Cientista de dados com foco em simulação, otimização e modelagem em R, SQL, VBA e Python
Leave a Reply