Cadeia de suprimentos de varejo ABM

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.

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:

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.

ABM da cadeia de suprimentos em Python

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:

You May Also Like

Leave a Reply

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

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