Das Bestands-Verteilungsproblem

Das Bestands -Verteilungsproblem












Startseite » Ressourcen » Hier Von Joannès Vermorel, November 2016

Unter Bestandsverteilung versteht man ein Problem der Lieferkette, bei dem die ursprünglichen Bestandsmengen über verschiedene Standorte ausgeglichen werden. Hierbei müssen die Bestandsaufteilung die ursprüngliche Bestandsmenge jedes Standorts, sowie die Transportkosten, die mit der Bestandsaufteilung einhergehen, berücksichtigt werden. Der dispatch solver oder Verteilungslöser ist ein numerischer Löser, der im Wesentlich ähnlich zum MOQ Löser ist, doch zur Arbeit an Verteilungsproblemen konzipiert ist.

Überblick über das Verteilungsproblem

Unter der Verteilung von Bestand bezieht man sich auf ein quantitatives Logistikproblem, bei dem Produtkbestände zwischen verschiedenen Standorten ausgeglichen werden müssen. Jedes Produkt+Standort Paar wird als SKU (Artikelposition) bezeichnet.

Dabei herrschen wirtschaftliche Anreize bei der Entscheidung, einen gewissen Bestand für jede SKU zu halten; diese wirtschaftlichen Anreize werden als wirtschaftliche Belohnung modelliert. Wird der Bestand an einem Standort erhöht, kann dies zu einer Belohnung führen, wenn an diesem bestimmten Standort der Bestand benötigt wurde. Doch der zusätzliche Bestand kann auch eine negative Belohnung erzeugen, wenn dieser lediglich die Lagerhaltungskosten erhöht, ohne die Ausführung besonders zu bessern.

Ähnlich müssen auch die Transportkosten berücksichtigt werde. Diese stellen gewöhnlich Investitionen dar, die getätigt werden müssen, um den Bestand von einem Standort zu einem anderen zu transportieren. Diese Kosten können eine lineare Komponente besitzen, durch die die Transportkosten linear mit steigender Menge von den zu transportierenden Gütern steigen. Gleichzeitig kann hier aber auch eine nicht-lineare Komponente bei pauschalen Transportkosten auftreten.

Genau aufgrund dieser Transportbedingungen sind nicht alle Standortpaare für den Transport geeignet. Immer wenn Bestand zwischen zwei kompatiblen SKUs ausgeglichen werden kann, oder anders ausgedrückt, wenn zwei SKUs, die dasselbe Produkte im Bestand halten, wird dieses Transportpaar als transportation edge bezeichnet.

Allgemein liegt das Ziel darin, die wirtschaftliche Belohnung, die aus den neu erhaltenen Bestandspositionen entsteht, zu maximieren, indem Produkte an einem anderen Standort maximiert werden, wobei die entsprechenden Transportkosten minimiert werden.

Formale Definition des Verteilungsproblems

Seien $i$ und $j$ die Standorte und sei $k$ die Produkte. Sei $T_{ijk}$ die nicht negative Menge der Produkte $k$, die von $i$ nach $j$ transportiert werden. Sei $U_{ijk}$ die Transportkosten pro Einheit. Sei $G$ ein Teil der Tripele $(i,j,k)$ und $V_g$ mit $g \in G$ als Schwelle der Transportkosten der Teilmenge $g$. Sei $R_{ik}: \mathbb{Z}\to\mathbb{R}$ die Belohnungsfunktion, die der Bestandsvariationen des Produkt $k$ im Standort $i$ zugeordnet sind. Sei $Q_{ik}$ die maximale Bestandsmenge von Produkt $k$, die aus dem Standort $i$ wegtransportiert werden kann. Sei $H$ die Heaviside Funktion.

Wir suchen die Transportlösung $T_{ijk}$ die Folgendes maximiert: $$\sum_{i,k} R_{ik}\left(\sum_j (T_{ijk} - T_{jik}) \right) + \sum_{i,j,k} T_{ijk} U_{ijk} + \sum_{g \in G} V_g\ H\left(\sum_{(i,j,k) \in g} T_{ijk}\right) $$ Während folgende Bedingungen berücksichtigt werden: $$ \forall i, \forall j, \forall k, T_{ijk} \geq 0 \\ \forall i, \forall k, \sum_j T_{ijk} \leq Q_{ik} $$ Hier stellt die Belohnung $R$ gewöhnlich den Positivteil der Gleichung, während die Kosten $U$ und $V$ den Negativteil darstellen.

Im Normalfall ist die Suche nach dem optimalen Transportlevel ein komplexes numerisches Problem, dennoch liefert der spezifische Löser eine Näherungslösung.

Envision-Syntax für den Verteilungslöser

Lokad bietet eine Komponente, die der numerischen Auflösung des Verteilungsproblems, Verteilungslöser genannt, dient. In diesem Abschnitt stellen wir die Syntax Envisions für diesen Löser vor. Die solve.dispatch() Funktion nutzt die genannten Argumente:
T.Q = solve.dispatch(
  // 'Prd' für Produkt, 'Loc' für Standort
  sku: S.Prd, S.Loc
  reward: S.Reward
  stockAvailable: S.Available
  stockEligible: S.Eligible // optional
  // 'Src' für Bezugsort, 'Dest' für Zielort
  edge: T.Prd, T.Src, T.Dest
  unitCost: T.UnitCost // optional
  groupId: T.Group // optional
  groupCost: T.GroupCost) // optional
Tabelle S ist zur Darstellung aller SKUs gedacht, also aller Produkt+Standort Paare. Tabelle T ist als Transportgraph konzipiert, der alle edges anzeigt, bei denen der Transport möglich wäre. Die zurückgegebenen Mengen - T.Q – stellen die optimierten Transportmengen dar.

Dies sind die Argumente:

  • sku (Text, Text): das Produkt und der Standort der SKU, implizit mit dem edge-Argument verbunden, der alle möglichen Übertragungen anzeigt.
  • reward (Verteilung): die Belohnungsverteilung, die der endgültigen Bestandsposition eines Artikels am angegebenen Standort zugeordnet wird.
  • stockAvailable (Zahl): stellt den Ausgangspunkt zur Berechnung der Belohnung jeder SKU vor jeglicher Bestandsübertragung dar.
  • stockEligible (Zahl): stellt die Höchstmenge an Bestand, die aus einer SKU entfernt werden kann. Wird dies ausgelassen, wird der gesamte stockAvailable als wählbar betrachtet. In der Praxis wird zählt der Bestand, der auf dem Weg ist, zum stockAvailable, doch dieser Bestand kann nicht den sofortigen (erneuten) Transfer betrachtet werden.
  • edge (Text, Text, Text): die Liste aller zulässiger transfer edges. Wenn ein edge nicht in dieser Tabelle erscheint, können keine Mengen über diese Kombination transportiert werden.
  • unitCost (Zahl): lineare Transportkosten pro Einheit, wenn Mengen über dieses edge transportiert werde. Wenn dies ausgelassen wird, wird davon ausgegangen, dass die Kosten bei null liegen.
  • groupId (Text) und groupCost (Zahl): nicht-lineare Transportkosten, die eintreten, wenn jegliche der edges der Gruppe nicht null sind. Andernfalls bleiben die Transportkosten bei null. Wenn diese Kosten ausgelassen werden, wird davon ausgegangen, dass sie bei null liegen.

Der Verteilungslöser nutzt das Algebra der Verteilungen, das Envision zur Darstellung von wirtschaftlichen Belohnungen zur Verfügung stellt. Diese Verteilungen werden gewöhnlich im Voraus generiert und nutzen dabei die Bestands-Belohnungsfunktion.

Auf Grundlage der vom Verteilungslöser berechneten Ergebnisse, ist die Berechnung der sich ergebenden Bestandsvariationen für jede SKU mit Folgendem sehr einfach:
S.In = sum(T.Q) by [T.Prd, S.Dest] at [S.Prd, S.Loc]
S.Out = sum(T.Q) by [T.Prd, S.Src] at [S.Prd, S.Loc]
S.Variation = S.In - S.Out

Referenzen

Das Verteilungsproblem in Lieferketten kann als Hybrid des klassischen Transportproblems (Wikipedia) und des klassischen Economic Dispatch Problems (Wikipedia). Das Transportproblem konzentriert sich auf die Transportkosten, die beim Transport von Gütern zwischen verschiedenen Standorten entstehen. Hingegen beschäftigt sich das Economic Dispatch Problem (wirtschaftliche Verteilungsproblem) auf die Belohnung, die von den Mengen, die in den verschiedenen Standorten ankommt abhängt. Außerdem kann vorliegendes Verteilungsproblem als ein Sonderfall des Problems der Ressourcenallokation betrachtet werden.