Allgemeines MOQ-Problem lösen (Mindestbestellmenge)

Allgemeines MOQ-Problem lösen (Mindestbestellmenge)


Startseite » Wissensdatenbak » Hier
Von Joannès Vermorel, Januar 2016

MOQ (Mindestbestellmengen) stellen eine universelle Form von Bestellbedingungen in der Lieferkette dar. Eine MOQ-Bedingung deutet darauf hin, dass ein Lieferanten keine Bestellungen unter einer bestimmten Grenze, häufig in Einheiten oder in Dollar ausgedrückt, zulässt. Oft bestehen mehrere MOQ-Bedingungen, die gleichzeitig erfüllt werden müssen. Das allgemeine MOQ-Problem dreht sich um die Berechnung einer (fast) optimalen Bestellung, die alle MOQ-Bedingungen erfüllt, und gleichzeitig die wirtschaftliche Rendite der gekauften Einheiten maximiert.

Das allgemeine MOQ-Problem wird als schweres nichtlineares Optimierungsproblem formalisiert. Dieses Problem wird als schwer eingestuft, weil bewiesen werden kann, dass die Berechnung einer optimalen Lösung gewöhnlich rechnerisch nicht möglich ist. Doch, auch wenn man gewöhnlich keine optimale Lösung erhält, können fast optimale Lösungen durch nichtlineare Constraint-Löser Algorithmen erzielt werden. Konkret stellen wir im Folgenden moqsolv vor, einen fortgeschrittenen numerischen Löser, der von Lokad für das allgemeine MOQ-Problem eingeführt wurde.

Gewöhnliche MOQ-Bedingungen

MOQ-Bedingungen können in vielen Formen auftreten. Unter den häufigsten, die in der Praxis in Lieferketten vorkommen, befinden sich:

  • Eine Mindestmenge, die in Einheiten pro SKU ausgedrückt wird, und sich auf Artikel bezieht, die zu billig sind um einzeln verkauft zu werden.
  • Eine Mindestmenge, die in Dollar pro Bestellung oder insgesamt ausgedrückt wird, die oft auftaucht, wenn der Lieferanten keine Versandkosten berechnet.
  • Eine Mindestmenge, die in Einheiten pro Kategorie ausgedrückt werden, was oft bei Produkten vorkommt, die auf Bestellung und mit minimalen Losgrößen gefertigt werden.

Liegt nur eine Bedingung gleichzeitig vor, ist diese einfach zu handhaben. Doch sobald mehrere MOQ-Bedingungen gleichzeitig berücksichtigt werden müssen, wird es viel komplizierter, eine Bestellung zu schaffen, die all diese Bedingungen erfüllt.

MOQ-Konzepte

Bevor wir uns der numerischen Optimierung des Problems widmen, führen wir die wichtigsten für das allgemeine MOQ-Problem relevanten Konzepte ein:

  • Die items (Artikel) stellen das, was man tatsächlich kaufen kann, dar. Artikelmengen sind oft ganze Zahlen, obwohl es hierzu keine Beschränkung gibt.
  • Die ordered quantities (Bestellmengen) für jeden Artikel (unter Umständen Null), die eine potenzielle Lösung des MOQ-Problems darstellen.
  • Die rewards (Belohnungen), die mit jeder zusätzlichen Einheit jedes Artikels einhergehen - im Grunde genommen, was die stockrwd-Funktion ergibt (Bestandsbelohnung), obwohl die Nutzung dieser Funktion nicht erforderlich ist.
  • Die costs (Kosten), die aus den zu erwerbenden Einheiten entstehen. Das Ziel ist, die Belohnung für ein bestimmtes Budget, das in costs (Kosten) ausgedrückt wird, zu maximieren. Normalerweise erwartet man einheitliche Kosten pro Einheit, doch hier verlassen wir uns nicht auf solche Annahmen. Daher können auch Nachlässe berücksichtigt werden.
  • Die targets (Ziele), die sozusagen Kriterien zum Stoppen darstellen und nicht unbedingt von den tatsächlichen Kosten bestimmt werden. Dieses Konzept ist etwas feinfühliger, daher wird weiter unten näher darauf eingegangen.

Das meistgenutzte Kriterium, um beim Einkauf über eine Prioritätenliste für den Einkauf das Ende einer Bestellung festzulegen, ist die Bestimmung eines maximalen Budgets: Die Einheiten werden nach ihrer abfallenden ROI eingekauft, bis das gesamte Budget ausgegeben ist. Doch eine Deckelung durch Budgets sagt weniger über die gesamte Bestandsleistung aus, die erreicht werden kann. Daher kann es äußerst praktisch sein, auch wenn das Ziel an sich, die Optimierung des ROI ist, unabhängig vom gewählten Stopp-Kriterium, alternative Kriterien, wie etwa eine erwünschte allgemeine Auftragserfüllungsrate als Ziel zu erwägen.

Das Konzept des target (Ziel) wird als ein allgemeiner Mechanismus eingeführt, um ein alternatives Stopp-Kriterium zu definieren, wenn man mit einer priorisierten Bestellpolitik arbeitet. Vereinfacht gesagt, wird das Ziel, Bestellungen zu finden, die die höchsten ROI für die geringste Investition liefert, mit der man das target Ziel erreicht. Im Nachstehenden wird eine deutlichere Definition dieses Optimierungsprozesses gegeben.

Bsp.: Frank, der Manager der Lieferkette, legt ein Ziel bei 90% Auftragserfüllungsrate fest. Die Lösung des MOQ-Problems findet sich in der Berechnung der kleinsten Bestellung, was die Kosten belangt, und der gleichzeitigen Maximierung der Belohnung, die zu einer 90%igen Auftragserfüllungsrate führt. Diese Bestellung wird NICHT die kleinstmögliche Bestellung sein, mit der man einer Auftragserfüllungsrate von 90% erreicht - denn dies würde lediglich eine simple Priorisierung der Auftragserfüllungsrate darstellen. Stattdessen handelt es sich um die kleinste Bestellung, die unter Priorisierung der Belohnungen, groß genug ist, um eine 90%ige Auftragserfüllungsrate zu ermöglichen. Die Priorisierung der Auftragserfüllungsrate wäre ein Fehler gewesen, da diese, im Gegensatz zur Bestandsbelohnung, die Kosten von totem Bestand nicht berücksichtigt.

Formale Definition des allgemeinen MOQ-Problems

In diesem Abschnitt wird das allgemeine MOQ-Problem als formales nichtlineares Optimierungsproblem präsentiert. Zu zeigen, dass es sich um ein NP-schweres Problem handelt, ist ziemlich einfach. Tatsächlich geht das allgemeine MOQ-Problem über das Behälterproblem hinaus, das auch NP-schwer ist. Daher ist das allgemeine MOQ-Problem mindestens genauso schwer wie das Behälterproblem. Obwohl es ein NP-schweres Problem darstellt, sollte angemerkt werden, dass in der Praxis sehr gute Lösungen berechnet werden können.

Sei $I$ die Menge der Artikel, die für die Bestellung betrachtet werden. Sei $q_i$ mit $i \in I$ die Anzahl der zu bestellenden Menge des Artikels $i$.

Dann wird eine Reihe von Funktionen definiert.

  • Sei $r_i(q)$ die Belohnung, reward, wenn man $q$ Einheiten von Artikel $i$ besitzt.
  • Sei $c_i(q)$ die Kosten, cost, beim Kauf von $q$ Einheiten von Artikel $i$.
  • Sei $t_i(q)$ das Ziel, target, wenn man $q$ Einheiten von Artikel $i$ besitzt.

Die Belohnungsfunktion kann positive oder negative Werte ergeben, doch die Kosten- und die Zielfunktion sind beide positiv: $$\forall i, \forall q, c_i(q) > 0 \text{ and } t_i(q) >0$$ Sei $M$ die Gruppe der MOQ-Bedingungen. Für jede $m \in M$, haben wir $I_m$ die Artikelliste, die der Bedingung $m$ gehört und $Q_m$ die Mindestmenge, die erreicht werden muss, um die Bedingung zu erfüllen. Sei $m_i(q)$ die Funktion, die den Beitrag der Artikel $i$ zur MOQ-Bedingung $m$ leistet, wenn $q$ Einheiten gekauft werden. Die Bedingung $m$ gilt als erfüllt wenn: $$\forall i \in I_m, q_i = 0 \text{ or } \sum_{i \in I_m}m_i(q_i) \geq Q_m$$ So können alle MOQ-Bedingung auf zwei Arten erfüllt werden: entweder, wenn die MOQ-Schwelle erreicht wird, oder, wenn die Mengen aller Artikel bei Null liegen.

Dann, sei $C$ die Maximalkosten, die für die Bestellung getragen werden können. Wir definieren $\textbf{q}_C=(q_i)_i$ die beste Bestellung als: $$\textbf{q}_C = \underset{q}{\operatorname{argmax}} \left\{ \sum_i r_i(q_i) \text{ with $m$ satisfied } \forall m\in M \right\}$$ Die Bestellung ist die „beste“ im Sinne, dass sie die Belohnung für ein bestimmtes Budget maximiert. Die Lösung $\textbf{q}_C$ ist nicht die einzige, doch dies ist mehr aus theoretischer Sicht, da das MOQ-Problem zu schwer für eine exakte Lösung ist. Der Einfachheit halber fahren wir fort, als wenn diese die einzige Lösung wäre.

Sei zuletzt $T$ ein Mindestziel, wir definieren $\textbf{q}^T$ durch $$C^T = \underset{C}{\operatorname{min}} \left\{ \left(\sum_{q_i \in \textbf{q}_C} t_i(q_i) \right) \geq T \right\}$$ und $$\mathbf{q}^T = \textbf{q}_{C^T}$$ Die Lösung $\mathbf{q}^T$ wird auf $\textbf{q}_C$ gebildet, das heißt, dass es die kleinste optimale (bezüglich des Budgets), ROI maximierende Lösung ist, die gut genug ist, um das Ziel zu erreichen.

Die moqsolv-Funktion in Envision

Envision bietet einen nichtlinearen Löser für das allgemeine MOQ-Problem. Dieser Löser ist über die moqsolv-Funktion verfügbar und befreit Sie von überschaubaren numerischen Rezepten beim Umgang mit MOQ-Bedingungen. Die moqsolv-Funktion hat als Ziel die Verarbeitung einer Reihe von Vektoren, die Tabellen des Typs Id(*) zugeordnet sind, die gewöhnlich durch die Erweiterung eine Vektoren-Verteilung über extend.distrib() erhalten werden (siehe auch die Algebra der Verteilungen).

Die Funktion erwartet folgende Argumente:

moqsolv(Id, Min, Reward, Cost, Target, threshold, g0, oq0, moq0, g1, oq1, moq1, ...)

Mit:

  • Id die Spalte zur Gruppierung von Artikel
  • Min die Spalte zur Bestellung von Einheiten - wie bei Grid.Min
  • Reward die Belohnung für die Zeile - wie sie über die Bestands-Belohnungsfunktion stockrwd erhalten wird
  • Cost die Kosten der Zeile - gewöhnlich PurchasePrice * Grid.Q
  • Target ein Zielwert, das für eine einfache Deckelung des Budgets gleich `Cost` sein kann. Stellt man Target == Cost ein, wird der Löser von einem angewiesen, eine Optimierung des Budgets vorzunehmen (resp. Target != Cost eine Optimierung des Zielwertes).
  • threshold ein Skalarwert, der als Schwelle für das Zielwert, fungiert. Im Falle einer Optimierung des Budgets ist der Zielwert die obere Grenze der mit der Lösung einhergehenden Kosten. Im Falle eine Optimierung vom Zielwert, ist der Zielwert die untere Grenze des der Lösung zugeordneten Ziels.
  • g0, oq0, moq0 stellt ein Tripel von drei Vektoren dar, die mit jede MOQ-Bedingung assoziiert werden (im Anschluss erklärt).

Lesen Sie auch priorisierte Bestellungen mit Bedingungen, ein Tutorial, das veranschaulicht, wie die moqsolv-Funktion zur Erstellung einer Bestellung, die MOQ-Bedingungen erfüllt, genutzt werden kann.

Die Funktion gibt einen bool-Vektor zurück, in dem alle Zeilen, die zum Erreichen des Zieles in Frage kämen, als true gekennzeichnet sind. Die Kombination aller true Zeilen erfüllt die MOQ-Bedingungen. Der Löser ergibt die annähernde Lösung $\textbf{q}^T$, wie im vorangehenden Abschnitt erläutert. Wie aus den bereits eingeführten Definitionen hervorgeht, wird erwartet, dass die Argumente Cost, Target und threshold ausschließlich positiv sind.

Jede MOQ-Bedingung wird durch ein Tripel von drei Vektoren definiert:

  • G die MOQ-Gruppierung, die im Falle einer MOQ pro Artikel der `Id` entsprechen kann.
  • OQ der Beitrag der Zeile zur Bestellmenge, order quantity, der MOQ-Bedingung.
  • MOQ Die Schwelle, die zur Erfüllung der MOQ-Bedingung erreicht werden muss.

Die durch G definierten Gruppen, sollten eine Partition der Artikel-Identifikatoren definieren. Es wird erwartet, dass die MOQ-Schwelle für alle mit demselben G-Wert assoziierten Zeilen identisch ist. Auch wird erwartet, dass alle OQ-Beiträge ausschließlich positiv sind. Die MOQ-Werte sollten positiv sein, aber können auch gleich null sein, wenn sie die Abwesenheit von MOQ-Bedingungen darstellen.

Es können mehrere MOQs berücksichtigt werden, indem verschiedene Tripele angegeben werden. Envision unterstützt bis zu 4 gleichzeitige MOQ-Bedingungen.