Lagemaße · Verständlich erklärt

Der Weber-Punkt verständlich erklärt

Wo muss ein Lager stehen, damit der Gesamtweg zu allen Kunden am kürzesten ist? Die Antwort liegt nicht immer zwischen den Kunden: Ein Kunde mit großer Menge kann den besten Standort auf sich ziehen. Und das übliche Rechenverfahren wird ausgerechnet dann langsam, wenn das Ergebnis ein Kunde ist.

Zuletzt aktualisiert:

Teil 1 · Für Einsteiger

Ein Wort unbekannt? Das Begriffsverzeichnis erklärt es in wenigen Sätzen.

Die Frage: Wo soll das Lager stehen?

Ein Lager soll viele Kunden beliefern. Jeder Kunde hat eine Sendungsmenge; sie zählt als sein Gewicht. Gesucht ist der Standort mit dem kürzesten Gesamtweg: Man multipliziert für jeden Kunden die Menge mit der Entfernung zum Lager und addiert alles. Gerechnet wird mit der Luftlinie; Straßen, Kapazitäten und Lagerkosten fehlen.

Naheliegend wäre der Durchschnitt aller Kundenorte. Er hat aber eine Schwäche: Ein Kunde weit draußen zieht ihn umso stärker zu sich, je weiter er entfernt ist. Für den kürzesten Gesamtweg braucht man eine andere Mitte.

Das Bild: Zugkräfte an einem Ring

Legen Sie die Karte als Tisch vor sich hin. Ein Ring stellt das Lager dar, und von jedem Kunden führt ein Seil zu ihm. Jedes Seil zieht den Ring zum Kunden, mit einer Kraft, die der Menge des Kunden entspricht: Wer mehr bekommt, zieht stärker. Wo der Ring zur Ruhe kommt, heben sich alle Züge auf, und dort steht das Lager mit dem kürzesten Gesamtweg.

Warum zieht ein ferner Kunde nicht stärker? Rückt das Lager einen Kilometer auf einen Kunden zu, spart man bei jeder Lieferung dorthin genau einen Kilometer, ob er nah ist oder fern. Wie viel das zusammen zählt, bestimmt nur die Menge, die dorthin geht. Darum ziehen die Seile mit gleichbleibender Kraft.

Warum der Standort auf einem Kunden liegen kann

Was geschieht, wenn ein Kunde eine große Menge hat? Reichen die Seile aller anderen zusammen nicht aus, um den Ring von ihm wegzuziehen, bleibt er dort hängen: Das Lager steht dann genau auf dem Kunden.

Dafür gibt es eine klare Regel: Hat ein Kunde mindestens die Hälfte der gesamten Menge, also mindestens so viel wie alle anderen zusammen, kann der Rest ihn nicht wegziehen, selbst wenn alle in dieselbe Richtung ziehen. Es genügt aber auch weniger, wenn die übrigen in verschiedene Richtungen ziehen und sich teilweise aufheben.

In der Demo, einem Programm zum Ausprobieren (Link), würfelt man Kunden gleicher Menge: Bei wenigen Kunden liegt der beste Standort manchmal auf einem Kunden, bei mehr Kunden seltener. Zahlen dazu stehen im zweiten Teil.

So rechnet man den Standort aus

Eine fertige Formel gibt es dafür nicht. Man rechnet sich in Schritten heran: Start irgendwo, dann rückt der Ring jeweils ein Stück dorthin, wohin der Zug aller Seile gerade weist, und das so lange, bis er kaum noch wandert.

Wo das Verfahren stolpert

Liegt der beste Standort auf einem Kunden, kommt die Rechnung dort kaum voran: Der Kunde hält den Ring fest, aber die Schritte werden immer kleiner. Am schlimmsten ist es, wenn die Menge des Kunden gerade so groß ist, dass er den Ring noch hält, also genau an der Grenze, ab der ein Kunde den Standort für sich beansprucht. In der Demo braucht die Rechnung dort um ein Vielfaches mehr Schritte als bei Kunden, deren Menge von dieser Grenze weit entfernt ist.

Auch der Start kann in die Irre führen: Beginnt man auf dem Ort eines Kunden, bleibt der Ring dort hängen. In der Demo (Kunden gleicher Menge, Start auf dem Kunden, der dem Durchschnitt am nächsten liegt) endet die Rechnung so in mehr als der Hälfte der Fälle nicht im besten Standort. Ein Start im Durchschnittspunkt oder eine Rechnung, die am Kunden prüft, ob die anderen ihn wegziehen könnten, kam in dieser Messung ans Ziel.

Kilometer gegen Minuten

Der beste Standort hängt auch von den Einheiten ab. Misst man eine Achse in Minuten statt Kilometern, wird die Karte in dieser Richtung gestreckt. Wer den Standort in Kilometern rechnet und dann nach Minuten fährt, hat den falschen Punkt: In der Demo wandert der Standort dabei deutlich, die Mehrkosten sind aber klein. Nahe am besten Punkt kostet ein Versatz kaum etwas, wie am Boden einer flachen Schale.

Wie ernst ist das Modell zu nehmen?

Das Modell rechnet mit Luftlinie, ohne Straßen, Kapazitäten und Lagerkosten, und mit erzeugten Kundenlagen; der beste Punkt kann auf einem Feld oder See liegen. Echte Kundenlagen können abweichen.

Was Sie mitnehmen: Der kürzeste Gesamtweg liegt nicht im Durchschnitt, kann auf einem Kunden liegen, und die Rechnung kommt dort schwer voran. Ein Lager am falschen Punkt kostet auf jeder Lieferung Mehrkilometer, die erst auffallen, wenn jemand den Standort nachrechnet. Woran Sie es im Betrieb merken: Meldet eine Standortrechnung, gleich ob Tabelle, Solver oder Planungssoftware, den Ort eines Kunden, oder ändert sich der Ort, sobald Sie den Startwert wechseln oder eine Achse in Minuten rechnen, trauen Sie ihr nicht ungeprüft. Rechnen Sie mit einem zweiten Startwert nach; bei einem Kunden mit mindestens so viel Menge wie alle anderen zusammen ist sein Ort ohnehin richtig.

Hinweis: Alle Demos rechnen mit synthetischen oder frei verfügbaren Beispieldaten und laufen auf einem externen Anbieter (Datenschutz). Bitte geben Sie darin keine vertraulichen oder personenbezogenen Daten ein. Die Ergebnisse gelten für die jeweilige Demo-Instanz und lassen sich nicht ungeprüft auf reale Fälle übertragen; für darauf gestützte Entscheidungen übernehme ich keine Gewähr.

Teil 2 · Für Fachleute

Modell und Annahmen

Dieser Teil ist eigenständig lesbar. Er fasst die formale Beschreibung der Demo zusammen; die vollständige Fassung steht im Expander „📐 Mathematische Formulierung“ der Demo. Der gesuchte Punkt heißt geometrischer Median, in der Standortplanung Weber-Punkt; das übliche Rechenverfahren heißt Weiszfeld-Verfahren.

  • Instanz: Kunden an Orten \(x_i\) in der Ebene (Einheit 1 km, Luftlinie) mit Gewichten \(w_i > 0\) (Sendungsmenge). Die Instanzen stammen aus einem eigenen SplitMix64-Generator, damit sie auf jeder Plattform gleich sind. Layouts: Normal, Quadrat, Kern + Außenposten, Kern + Seitengruppe; Gewichte: gleich, lognormal (σ = 0,5 oder 1), Großkunde mit gewähltem Anteil, Großkunde an der Schwelle.
  • Aufgabe: minimiere den Gesamtweg \(F(c)\) (unten). \(F\) ist konvex; liegen die Kunden nicht alle auf einer Geraden, ist das Minimum eindeutig.
  • Messungen: Alle Zahlen sind Messungen an erzeugten Instanzen. Jede Zelle nutzt vier feste Zufalls-Seeds; die genannte Streuung ist die zwischen diesen Seeds, kein Konfidenzintervall.

Die Formeln

Gesamtweg. Gegeben sind Kunden an Orten \(x_1, \dots, x_n\) mit Gewichten \(w_i > 0\); gesucht ist ein Punkt \(c\), der

\[F(c) = \sum_{i=1}^{n} w_i \,\|x_i - c\|.\]

minimiert. Optimalität zwischen den Kunden. Steht das Minimum an keinem Kundenort, hebt sich die Zugkraft auf:

\[\sum_{i=1}^{n} w_i \,\frac{c - x_i}{\|c - x_i\|} = 0.\]

Optimalität auf einem Kunden (Schwellentest). Das Minimum liegt genau dann an \(x_k\), wenn die Zugkraft der übrigen höchstens das Gewicht von \(k\) ist; dabei ist \(u_{kj}\) der Einheitsvektor von \(x_k\) zu \(x_j\):

\[\Big\| \sum_{j \ne k} w_j \, u_{kj} \Big\| \le w_k.\]

Wegen der Dreiecksungleichung gilt \(\big\| \sum_{j \ne k} w_j u_{kj} \big\| \le \sum_{j \ne k} w_j\). Hat Kunde \(k\) mindestens die Hälfte des Gesamtgewichts, ist \(w_k \ge \sum_{j \ne k} w_j\), der Schwellentest also erfüllt: Der Standort liegt auf ihm. Die Norm der linken Seite ist die Schwelle des Kunden; die Demo gibt das Gewicht von Kunde 1 als Vielfaches \(f\) dieser Schwelle vor (ab \(f = 1\) liegt das Optimum auf ihm).

Weiszfeld-Schritt. Der neue Standort ist der Schwerpunkt mit den Gewichten \(w_i/\|x_i - c\|\), nahe Kunden zählen also mehr:

\[c^{+} = \frac{\sum_i w_i \,x_i / \|x_i - c\|}{\sum_i w_i / \|x_i - c\|}.\]

Ist \(c = x_k\) für einen Kunden, ist der Schritt nicht definiert. Vardi–Zhang-Schritt. Sei \(T(c)\) der Weiszfeld-Schritt über die Kunden, die nicht an \(c\) stehen, \(\eta\) das Gesamtgewicht der Kunden an \(c\) und \(r\) die Norm ihrer Zugkraft. Ist \(r \le \eta\), ist \(c\) optimal; sonst

\[c^{+} = (1 - \gamma)\,T(c) + \gamma\,c, \qquad \gamma = \min\!\Big(1, \frac{\eta}{r}\Big).\]

Drei Kunden. Hat das Dreieck einen Winkel von mindestens \(120^\circ\), liegt der Standort auf dieser Ecke; sonst im Torricelli-Punkt, in dem alle drei Seiten unter \(120^\circ\) erscheinen.

Löser-Varianten, Einheiten und Drehung

VerfahrenWas es tutWas schiefgehen kann
Klassisch (Weiszfeld)Schwerpunkt mit Gewichten \(w_i/d_i\), \(d_i\) = Abstand zu Kunde \(i\); bricht ab, wenn ein Iterat exakt auf einem Kunden stehtDort ist \(d_i = 0\). Nahe der Schwelle sehr viele Schritte.
Mit Epsilon-SchutzWie klassisch, aber Abstände nach unten auf 10⁻¹² begrenztDer Kunde zieht den Iterat mit dem Gewicht \(w_i/10^{-12}\) an sich: Das Verfahren bleibt dort und meldet „konvergiert“ (Messung unten).
Vardi–ZhangSteht der Iterat auf Kunden mit Gesamtgewicht \(\eta\), wird geprüft, ob die Zugkraft der übrigen höchstens \(\eta\) ist (dann Optimum); sonst ein gedämpfter SchrittBleibt langsam nahe der Schwelle und bricht nicht ab; das Schrittkriterium bleibt an der Schwelle trotzdem unzuverlässig.
Tiefster Datenpunkt (Tukey)Der Kunde, den die wenigsten Halbebenen „abschneiden“ können (Halbraumtiefe); bei Gleichstand der Schwerpunkt dieser KundenKein Abstandsmaß, daher unabhängig von Einheiten und Drehung; aber ein Datenpunkt, nicht die Mitte der tiefsten Region.

Einheiten und Drehung. Wird die y-Achse um den Faktor \(s\) gestreckt, werden die Abstände zu \(\sqrt{\Delta x^2 + s^2 \Delta y^2}\); der Weber-Punkt der gestreckten Daten ist im Allgemeinen nicht der gestreckte Weber-Punkt. Bei einer Drehung bleiben alle Abstände erhalten, der Weber-Punkt dreht mit. Der Koordinatenmedian (jede Achse für sich) geht bei der Streckung mit, bei der Drehung nicht; der tiefste Datenpunkt braucht kein Abstandsmaß und hängt von beidem nicht ab.

Hohe Dimension. Standardnormale Punkte im \(\mathbb{R}^d\), davon 10 % durch einen engen Haufen auf der Diagonale ersetzt. Fall A: Haufen weit entfernt (Abstand \(5\sqrt{d}\), das Mittel wandert mit); Fall B: Haufen im festen Abstand 3. Der Fehler ist der Abstand des Schätzers vom wahren Zentrum (Ursprung). Der einfache Filter ist eine eigene vereinfachte Fassung und kein Nachbau eines Literaturalgorithmus.

Befunde

Alle Zahlen stammen aus der README der Demo (jede steht in deren Tests, tests/test_claims.py) und gelten für die erzeugten Instanzen der Demo; die Bedingungen stehen jeweils dabei.

FrageBefund
Wie oft liegt der Standort auf einem Kunden?Normalverteilte Kunden gleichen Gewichts, Mittel über vier Zufalls-Seeds: 43,2 % (n = 3), 26,5 % (n = 5), 12,8 % (n = 10), 4,2 % (n = 30), 1,6 % (n = 100); bei n = 100 liegt der Wert je nach Zufalls-Seeds etwa bei 1,2 bis 1,6 %. Bei lognormal verteilten Gewichten (σ = 1) ist der Anteil höher: 86,3 % bei n = 3, 3,9 % bei n = 100.
Ab welchem Gewichtsanteil gehört der Standort dem Großkunden?Anteil der Instanzen mit dem Standort auf dem Großkunden: 0,4 % (Gewichtsanteil 5 %), 1,5 % (10 %), 7,1 % (20 %), 22,0 % (30 %), 52,1 % (40 %), 100,0 % (50 % und 60 %). Ab der Hälfte folgt es aus der Dreiecksungleichung.
Und bei drei Kunden?Ein Winkel von mindestens 120° kommt in 43,8 % (normalverteilt) bzw. 40,0 % (Quadrat) der Dreiecke vor; dann liegt der Standort auf dieser Ecke. In 2.000 Dreiecken beträgt der Abstand zwischen Torricelli-Konstruktion und Vardi–Zhang höchstens 3,8·10⁻¹⁰, nie ein schlechterer Gesamtweg.
Wie viele Schritte braucht das klassische Verfahren an der Schwelle?Sechs normalverteilte Kunden, Gewicht von Kunde 0 gleich f mal seine Schwelle, Start im Schwerpunkt, Schritt < 10⁻⁹, Grenze 100.000, 96 Instanzen je Zeile. Median der Iterationen: 54,5 (f = 0,5), 153,5 (0,9), 1.240,5 (0,99), 8.027,5 (0,999), 55.970,5 (1,0), 8.049,5 (1,001), 1.267,5 (1,01), 179 (1,1), 49 (1,5), 19 (3,0). Bei f = 1,0 erreichen 19,8 % der Läufe die Grenze von 100.000 Schritten.
Und bei Zufallsinstanzen?Gleiche Gewichte, 2.000 Instanzen je n, Start im Schwerpunkt: Median 48 / 56 / 48 / 36 / 31 Iterationen für n = 3 / 5 / 10 / 30 / 100, größter Wert 10.000 / 9.275 / 3.797 / 1.137 / 695.
Wie fällt der Fehler?Messung an 24 Instanzen, kein Beweis: Weg von der Schwelle linear, an ihr sublinear. Quotient e(k+1)/e(k) bei f = 1,0: 0,933 (k = 10), 0,991 (k = 100), 0,999 (k = 1.000), 0,9999 (k = 10.000); Steigung von log e über log k: −1,00, der Fehler fällt dort also etwa wie 1/k.
Taugt das Abbruchkriterium an der Schwelle?Der Abbruch bei Schritt < 10⁻⁹ ist dort kein Maß für den Fehler: Bei f = 1,0 liegt der Iterat im Median noch 5,6·10⁻⁵ km vom Optimum entfernt, bei f = 3,0 sind es 2,6·10⁻¹⁰ km; bei f = 0,999 und 1,001 etwa 10⁻⁶ km.
Was bewirkt der Start auf einem Kunden?Start auf dem Kunden, der dem Schwerpunkt am nächsten liegt, gleiche Gewichte, normalverteilte Kunden; „nicht optimal“ heißt Gesamtweg mehr als 10⁻⁷ über dem Optimum. Klassisch und mit Epsilon-Schutz: 56,55 / 74,45 / 87,70 / 96,80 % (n = 3 / 5 / 10 / 30), Vardi–Zhang 0,00 %; klassisch mit Start im Schwerpunkt 0,00 %. Der klassische Lauf bricht vom Kunden aus ab, weil der Start ein Kunde ist. Die Epsilon-Absicherung, die den Abstand nach unten auf 10⁻¹² begrenzt, ändert am Ergebnis nichts; Kunden mit Abstand unter ε auszulassen ist nicht gemessen.
Wie stark wandert der Standort bei Streckung und Drehung?40 Kunden im Layout Kern + Seitengruppe, 600 Instanzen, Achsenfaktor s = 1,5 / 2 / 5 / 10: Abstand zwischen „Mitte, dann strecken“ und „strecken, dann Mitte“ 0,03 / 0,06 / 0,25 / 0,58 Streuungen der x-Werte; Mehrweg im Mittel 0,03 / 0,10 / 0,46 / 0,71 % des Gesamtwegs (bei s = 5 größter Fall 2,5 %). Koordinatenmedian und tiefster Datenpunkt weichen bei s = 5 (60 Instanzen) höchstens 2·10⁻¹⁵ ab. Der Standort wandert deutlich, die Kosten kaum: das Optimum ist flach. Bei einer Drehung um 45° weicht der Koordinatenmedian um 0,16 Streuungen ab (größter Fall 0,45), der geometrische Median um 2·10⁻¹⁵.
Was geschieht in hoher Dimension?10 % Haufen, 40 Läufe je Zelle, n = 1.000, Fehler des Schätzers bei d = 2 / 20 / 200. Fall A: Mittel 0,706 / 2,236 / 7,080, Koordinatenmedian 0,204 / 0,640 / 2,050, geometrischer Median 0,180 / 0,519 / 1,635, einfacher Filter 0,041 / 0,147 / 0,542; der geometrische Median geteilt durch ε·√d liegt zwischen 1,16 und 1,28. Fall B: Mittel 0,302 / 0,327 / 0,526, geometrischer Median 0,179 / 0,406 / 0,666; ab etwa d = 20 ist das Mittel besser als der geometrische Median, bei d = 10 liegen beide nahe beieinander (0,306 gegen 0,317).
Hilft der einfache Filter?In Fall B schlägt er das Mittel bei n = 1.000 nur bis d = 50 (0,316 gegen 0,372) und liegt ab d = 100 darüber (0,532 gegen 0,433 bei d = 100, 0,706 gegen 0,526 bei d = 200). Mit n = 20·d ist er bei d = 100 gleich gut wie das Mittel (0,365 gegen 0,368) und bei d = 200 schlechter (0,408 gegen 0,369).

Grenzen

  • Luftlinie in der Ebene: Keine Straßen, keine Kapazität, keine Fixkosten; der Weber-Punkt kann an einem unbrauchbaren Ort liegen. Dafür gibt es die Standortplanung mit diskreten Kandidaten.
  • Simulierte Layouts: Alle Häufigkeiten und Raten gelten für die vier Layouts und fünf Gewichtsarten der Demo; echte Kundenlagen können abweichen.
  • Vier Seeds je Zelle: Die angegebene Streuung ist die zwischen diesen Seeds, kein Konfidenzintervall.
  • Die Rate ist eine Messung: Das Verhalten wie 1/k an der Schwelle ist an 24 Instanzen gemessen und nicht bewiesen; Konvergenzbeweise werden nicht geführt.
  • Epsilon-Absicherung: Die Aussage, sie ändere nichts, gilt für die gemessene Variante (Abstand nach unten auf 10⁻¹² begrenzt) und für den Start auf dem dem Schwerpunkt nächsten Kunden bei gleichen Gewichten; Kunden mit Abstand unter ε auszulassen ist nicht gemessen.
  • Der einfache Filter ist eine eigene vereinfachte Fassung und setzt Kovarianz \(I\) der guten Punkte voraus; sein Abschneiden sagt nichts über den Literaturalgorithmus.
  • Tiefster Datenpunkt statt Tukey-Median: Der Tukey-Median im engeren Sinn ist die Mitte der tiefsten Region.
  • Vardi–Zhang nach der Beschreibung umgesetzt: Die Originalarbeit wurde nicht eingesehen; geprüft ist der Schritt gegen scipy.optimize, eine Gitter-Suche und die Torricelli-Konstruktion.

Quellen

  • Weiszfeld (1937), Kuhn (1973) sowie Vardi und Zhang (2000) gelten als die Grundlagen der Verfahren (Angabe nach der README der Demo).
  • Quelltext, Messreihen und Tests der Demo: github.com/sebastian-hanisch/weiszfeld-demo.

Die Originalarbeiten wurden für diese Seite und für die Demo nicht eingesehen; die Verfahren sind nach ihrer Beschreibung umgesetzt und gegen unabhängige Rechenwege geprüft.