ABM ein Einzelhandelslieferkette

In diesem Artikel poste ich ein einfaches, auf Agenten basierendes Modell für Vertriebslieferketten in Python. Agentenbasierte Modellierung (abgekürzt ABM) wurde von mir bereits in diversen anderen Blogbeiträgen vorgestellt. Hier sind einige einführende Referenzen, die Ihnen den Einstieg erleichtern.

Ich habe auch ein Python-Paket für Grid-basierte agentenbasierte Simulationen entwickelt. Dieses Paket kann zur Implementierung von Grid-basierten ABMs verwendet werden. Das heißt, in dem die Umgebung, in der sich Agenten befinden, mit einem Grid modelliert werden kann. Auch Modelle, die kein gitterbasiertes Modell benötigen, können mit einem solchen Framework implementiert werden. Das Paket ist ab sofort zB hier erhältlich:

Ein gitterbasiertes Modell kann nützlich sein, da es ein Konzept zur Definition von Entfernungen (einschließlich abstrakter Entfernungsmaße wie z. B. sozialer Distanz) liefert. Darüber hinaus bietet es ein standardisiertes Konzept zur Modellierung der Interaktion zwischen Agenten. In diesem Beitrag werde ich kein gitterbasiertes Simulationsmodell implementieren . Dies liegt daran, dass dies im Fall des hier diskutierten SCM-Verteilungsmodells nicht erforderlich ist.

Konzeptionelles Lieferkettenmodell

In diesem einfachen Modell gibt es zwei Arten von Logikflüssen. Informationsfluss und Materialfluss:

  • Einzelhändler können Bestellungen bei Distributoren aufgeben. Ein Händler kann Bestellungen bei Herstellern aufgeben. Das ist der Informationsfluss .
  • Hersteller können Produkte herstellen und an Händler versenden. Der Distributor kann Produkte an Einzelhändler versenden. Das ist der Materialfluss .

Dies ist die Einzelhandelslieferkette in ihrer einfachsten Form. Ergänzungen zum Modell wären dann zB Vorlaufzeiten, Mindestbestellmengen, Produktlosgrößen, Bestandsrichtlinien etc. All diese Ergänzungen können zu einem agentenbasierten Modell wie dem in diesem Artikel diskutierten hinzugefügt werden.

Lieferketten-ABM in Python

Die obige Abbildung veranschaulicht das konzeptionelle Modell. Der nächste Abschnitt implementiert das obige Lieferketten-ABM in Python.

Implementieren von Lieferketten-ABM in Python

Unten implementiere ich das Lieferketten-ABM in Python. Zuerst implementiere ich das Klassengerüst, das ich verwenden werde. Ich brauche eine Retailer-Klasse , eine Distributor-Klasse und eine Manufacturer-Klasse . Ich implementiere diese Klassen in dem unten ausgeschnittenen Code.

# 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

Als nächstes implementiere ich das Simulationsmodell selbst. Dafür schreibe ich eine Funktion, die 4 Argumente akzeptiert. Der Einzelhändler, der Distributor, der Hersteller und die Anzahl der Iterationen. Ich verwende das Zufallsmodul, um zufällige Bestellmengen zu generieren.

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)

Damit ist mein beispielhaftes Lieferketten-ABM in Python abgeschlossen.

Schlussbemerkungen und zugehörige Inhalte

Ein realistisches kommerzielles Modell müsste viele Ergänzungen enthalten. Wie eingangs erwähnt zB Durchlaufzeiten, Bestellzeitpunkte, MOQs, Losgrößen etc. Auch Bestellungen selbst würden höchstwahrscheinlich nicht wie in diesem Fall durch einen einfachen Zufallszahlengenerator generiert werden. Dennoch veranschaulicht dieses einfache Beispiel das Konzept der agentenbasierten Modellierung für die Lieferkettenmodellierung. Auch eine sehr komplexe Lieferkette lässt sich so abbilden.

Wenn Sie an agentenbasierter Simulation interessiert sind, können Sie sich meine Beispiele für gitterbasierte Agentensimulationsmodelle ansehen :

You May Also Like

Leave a Reply

Leave a Reply

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.