En este artículo, publico un modelo simple basado en agentes de la cadena de suministro de distribución en Python. Ya introduje el modelado basado en agentes (abreviado como ABM) en otras publicaciones de blog. Aquí hay algunas referencias introductorias que lo ayudarán a comenzar.
- Enlace: Métodos de simulación para analistas de SCM
- Enlace: Simulación empresarial basada en agentes
- Enlace: Modelado basado en agentes en Python
También he desarrollado un paquete de Python para simulaciones basadas en agentes basadas en cuadrículas. Este paquete se puede utilizar para implementar ABM basados en cuadrículas. Es decir, en el que el entorno, en el que se encuentran los agentes, se puede modelar con una cuadrícula. Incluso los modelos que no requieren un modelo basado en cuadrículas pueden implementarse con dicho marco. El paquete ya está disponible, por ejemplo, aquí:
- Enlace: paquete de simulación basado en agentes para Python
- Enlace: marco de simulación basado en agentes en Python
Un modelo basado en cuadrículas puede ser útil ya que proporciona un concepto para definir distancias (incluidas medidas de distancia abstractas como, por ejemplo, la distancia social). Además, proporciona un concepto estandarizado para modelar la interacción entre agentes. En esta publicación no implementaré un modelo de simulación basado en cuadrículas . Esto se debe a que no es necesario en el caso del modelo de distribución SCM discutido aquí.
Modelo de cadena de suministro conceptual
En este modelo simple hay dos tipos de flujos lógicos. Flujo de información y flujo de material:
- Los minoristas pueden realizar pedidos a los distribuidores. Un distribuidor puede realizar pedidos a los fabricantes. Este es el flujo de información .
- Los fabricantes pueden producir y enviar productos a los distribuidores. El distribuidor puede enviar productos a los minoristas. Este es el flujo de material .
Esta es la cadena de suministro de distribución minorista en su forma más simple. Las adiciones al modelo serían, por ejemplo, tiempos de entrega, cantidades mínimas de pedidos, tamaños de lotes de productos, políticas de inventario, etc. Todas estas adiciones se pueden agregar a un modelo basado en agentes como el que se analiza en este artículo.
La figura anterior ilustra el modelo conceptual. La siguiente sección implementa el ABM de la cadena de suministro anterior en Python.
Implementación de la cadena de suministro ABM en Python
A continuación, implemento la cadena de suministro ABM en Python. Primero, implemento el marco de clases que usaré. Necesitaré una clase de minorista , una clase de distribuidor y una clase de fabricante . Implemento estas clases en el código recortado a continuación.
# 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
A continuación, implemento el propio modelo de simulación . Para esto escribo una función que toma 4 argumentos. El minorista, el distribuidor, el fabricante y el número de iteraciones. Uso el módulo aleatorio para generar cantidades de pedido aleatorias.
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)
Esto completa mi cadena de suministro ejemplar ABM en Python.
Observaciones finales y contenido relacionado
Un modelo comercial realista tendría que incorporar muchas adiciones. Como se señaló inicialmente, por ejemplo, tiempos de entrega, puntos de pedido, MOQ, tamaños de lote, etc. Además, lo más probable es que los pedidos en sí mismos no sean generados por un simple generador de números aleatorios como en este caso. No obstante, este sencillo ejemplo ilustra el concepto de modelado basado en agentes para el modelado de la cadena de suministro. Incluso una cadena de suministro muy compleja se puede modelar de esta manera.
Si está interesado en la simulación basada en agentes, puede considerar consultar mis ejemplos de modelos de simulación de agentes basados en cuadrículas :
- Enlace: ejemplo de Python del modelo SIR basado en agentes
- Enlace: modelo de ventas basado en agentes de boca en boca
- Enlace: modelo de segregación basado en agentes (Python)
Ingeniero industrial especializado en optimización y simulación (R, Python, SQL, VBA)
Leave a Reply