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.
- Link: Simulationsmethoden für SCM-Analysten
- Link: Agentenbasierte Simulation für Unternehmen
- Link: Agentenbasierte Modellierung in Python
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:
- Link: Agentenbasiertes Simulationspaket für Python
- Link: Agentenbasiertes Simulationsframework in Python
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.
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 :
- Link: Python-Beispiel für ein agentenbasiertes SIR-Modell
- Link: Vertriebsmodell auf Basis von Mundpropaganda
- Link: Agentenbasiertes Segregationsmodell (Python)
Wirtschaftsingenieur mit Interesse an Optimierung, Simulation und mathematischer Modellierung in R, SQL, VBA und Python
Leave a Reply