
Ich möchte mit Ihnen die Erfahrung teilen, ein Logistiksystem in einem Handelsunternehmen aufzubauen.
Eines schönen Tages, nahe 2012, stellte sich der Leiter die Aufgabe: über das Problem der Optimierung der Kosten für die Transportlogistik der Organisation nachzudenken.
Das Haupttätigkeitsfeld des Unternehmens ist der Großhandel und die Lieferung von Produkten, wobei die Transportkosten einen erheblichen Teil der Kosten ausmachen.
Das Management war der Ansicht, dass es an der Zeit war, die Dinge in Ordnung zu bringen, um Geld für Treibstoff auszugeben, und es gab auch den Verdacht, dass die Fahrer zusätzlich an der „linken“ Lieferung zwischen den Flügen beteiligt waren. In kleinen und mittleren Unternehmen basiert vieles auf Vertrauen, da es unrentabel und nicht immer ratsam ist, Einzelpersonen zur Kontrolle zu halten. Wenn die Kosten steigen und die Effizienz sinkt, müssen Sie nur noch etwas tun.
Zunächst haben wir versucht, das Problem durch Managementmethoden zu lösen: kontinuierliche Messung des Kraftstoffstands, Drehzahlmesserwerte, Messung der Lieferzeit mit persönlicher Begleitung der Ladung. Der Effekt war nichts anderes als Negativität, Misstrauen und unnötige Bewegungen (dies zu messen ist auch eine Aufgabe für jemanden). Wenn es immer noch möglich war, einen ungefähren Umfang mit einer einzigen Route zu bestimmen, dann änderte sich bei einem Flug von 25 bis 35 Einzelhandelsgeschäften alles sehr, die Streuung war sowohl zeitlich als auch kraftstoffmäßig sehr groß.
Ziel: Entsendung vielbeschäftigter Fahrzeuge an Handelsunternehmen, Reduzierung der Kilometerleistung und damit der Kosten. Vermeiden Sie nach Möglichkeit Abweichungen von der Route. Ziel ist es, die Kosten sozusagen gestern mit minimalen Investitionen in Finanzen und Implementierungszeit zu senken. Während der Diskussionen einigten sie sich auf mehrere Alternativen:
- Verwenden Sie einen der Dienste zur Berechnung von Routen und zur Berücksichtigung von Kraftstoff und Schmiermitteln.
- die Flottenverfolgungs- / Verfolgungsmodule aufsetzen;
- entwerfe selbst etwas;
Wir haben uns entschlossen, alle drei Lösungen auszuprobieren und die besten auszuwählen:
1. Zu diesem Zeitpunkt fanden wir keine gute schlüsselfertige Lösung. Entweder schlüsselfertiges Design, aber teuer, oder wie es ist und weiter nach Vereinbarung. Habe mehrere Online-Dienste ausprobiert. Im Großen und Ganzen ist es nicht schlecht, aber im Grunde bestand die Schwierigkeit darin, Informationen aus dem Buchhaltungssystem zu duplizieren, die Anzahl der Aktionen, um das Ergebnis zu erhalten (hier klicken, hier klicken, das Verzeichnis aktualisieren), alles ist online (zu diesem Zeitpunkt war es kritisch). Der größte Nachteil ist jedoch die Schwierigkeit, Routen mit vielen Punkten zu erstellen und die beste Route auszuwählen. Normalerweise musste alles manuell ausgewählt werden, um die Werte anzupassen, was lang war und daher nicht immer erfolgreich war.
Nach ein paar Monaten Arbeit lehnten sie diese Entscheidung ab.
2. Als Experiment installierten sie GSM-Tracking-Module in einem Dutzend Autos.
Das Ergebnis ist erfolgreicher. Sie wissen immer, wo das Auto war. Die Kosten sind jedoch teurer als bei der ersten Option. Nachdem jedoch einige Fälle von Abweichungen von der Route festgestellt worden waren (ein Fahrer-Schabbat, der zweite besuchte die Frau des Herzens während der Arbeitszeit), begannen die Mitarbeiter, solche Geräte intensiv loszuwerden. Obwohl sie diese Innovation zuvor nicht begeistert angenommen hatten. Entweder blinkte der Stromanschluss versehentlich, oder als der Motor repariert wurde, fiel das Gerät aus oder die Elektronik "überhitzte" sich in der Sonne. Also haben wir drei Jahre lang 9 Geräte verloren. Im Allgemeinen erwies sich die Entscheidung als positiv, aber von den Minuspunkten - ich musste mir die lange zurückgelegten Strecken ansehen, um verdächtige Aktivitäten zu identifizieren, was nicht sehr praktisch ist. Ein Plus im Tracking-System war das Element beim Exportieren des Tracks, mit dem bestimmte Statistiken zu Routen gesammelt werden konnten.
Später verwendeten wir ein anderes System eines der größten Mobilfunkbetreiber für die Unternehmenskommunikation und die Verfolgung der Aktivitäten von Handelsvertretern. Das Ergebnis war ähnlich: SIM-Karten brachen, Telefone gingen verloren, sie wurden zu Hause vergessen, der Akku war erschöpft, die Leute fanden immer einen Ausweg.
3. Parallel zu den ersten beiden Ansätzen haben wir beschlossen,
ein Fahrrad zu
erfinden , um in unserem Buchhaltungssystem die Fähigkeit zu realisieren, selbst Routen zu bauen.
Zuerst haben wir alle Besuchsorte mitgebracht und ihre Geokoordinaten in die Datenbank eingetragen. Wir haben die Koordinaten gemäß dem GPS-Tracker beim Besuch sowie visuell von den
OSM- Karten erhalten, den richtigen Ort mit der Maus gefunden und die Koordinaten kopiert.
In der zweiten Phase war es notwendig, Vektorkarten der Region in einem geeigneten Format zu erhalten.
Die Wahl fiel auf dasselbe OSM, da die Karten ein offenes Format haben. Wir haben den Dump des Planeten nicht gemeistert, also haben wir die Daten zunächst in XML-Teilen durch Export aus dem OSM selbst hochgeladen und dann die Gebiete verbunden. Später stieß ich auf ein
GIS-LAB- Projekt. Diese würdigen Menschen legten jahrelang eine
tägliche Müllhalde von Gebieten an, die nach Regionen aufgeschlüsselt waren. Aber jeder will essen, das Projekt ist vor kurzem ins Stocken geraten, und die Jungs sind
umgezogen , und sie machen den gleichen Job zu einem vernünftigen Preis.
Nachdem wir die Karte im XML-Format erhalten haben, haben wir den für die Straßen verantwortlichen Layer gemäß der
Spezifikation extrahiert. Da das Kartenvolumen mehrerer benachbarter Regionen zehn Gigabyte belegte, wurde der SAX-Parser in RUBY geschrieben, er wählte nur die erforderlichen Tags aus und führte benachbarte Regionen zusammen, in denen Aktivitäten in einer einzigen Struktur ausgeführt wurden.
Das Projekt selbst wird als externe DLL in das in Pascal geschriebene Buchhaltungssystem geschrieben. Die Flotte von Geräten, auf denen das System funktionieren sollte, war, gelinde gesagt, veraltet, daher gab es ein Limit von 1 GB RAM (Ja, es gibt auch Unternehmen, die diese Technik verwenden, seit 10 Jahren arbeiten und die gleiche Menge arbeiten werden). Ursprünglich bestand der Wunsch, die Karte in Stücke zu zerbrechen und nach Bedarf (wie bei Navigatoren) in den Arbeitsspeicher zu laden, aber es war extrem langsam. Infolgedessen haben wir es geschafft, bis zu fünfzig MB zu komponieren.
In OSM werden Straßenkarten als Vektorabschnitte der Fahrbahn mit zusätzlichen Attributen dargestellt. Bei unserer Entscheidung haben wir
Adjazenzlisten verwendet . Wo der Peak ein Punkt auf der Karte ist und die Kanten die Pfade zu einem benachbarten Punkt sind. Zur Optimierung glauben wir, dass es maximal vier Pfade (Schnittpunkte) von einem Scheitelpunkt geben kann. Wenn es mehr als 4 Pfade gibt, müssen Sie die Kante in zwei zusätzliche Pfade aufteilen, sodass wir für jeden Kartenpunkt immer eine feste Anzahl von Kanten = 4 haben. Dieser Ansatz ermöglicht es uns, die Daten im Speicher auszurichten, obwohl sie etwas redundant sind.
Es ist erwähnenswert, dass die Erde keine Kugel ist (unerwartet), sondern ein
Geoid , aber zum Zwecke der Kartographie wird sie zu einem Sphäroid oder
Ellipsoid vereinfacht.
Für unsere Zwecke habe ich eine Formel zur Berechnung der Abstände zwischen zwei Punkten auf der Oberfläche eines Ellipsoids gefunden, deren tiefste Bedeutung ich nicht verstehen konnte, die uns jedoch nicht daran hindert, sie zu verwenden.
Codefunction distance(StartLong:Single; StartLat:Single; EndLong:Single; EndLat:Single) : Single; const D2R: Double = 0.017453;
Nach dem Erstellen der Straßenbasis wurde eine visuelle Ebene benötigt, um die Umgebung anzuzeigen. Das
Maperitive- Projekt hat
hier geholfen. Es hat
uns ermöglicht
, die OSM-Karte von Regionen durch Approximationsebenen in
Kachelabschnitte zu analysieren , genau wie 10 ^ 100 oder Yandex. Es wurde versucht, mit den Karten von Riesen online zu arbeiten, indem eine Vektorkarte über der Browserebene gerendert wurde. Aufgrund von Lizenzbeschränkungen haben wir uns jedoch entschlossen, diese abzulehnen. Als Ergebnis haben wir eine virtuelle Festplatte erstellt und dort einen Speicherauszug von Kacheln auf einige zehn Gigabyte hochgeladen, aber alles ist zur Hand und verlangsamt sich nicht. Zwar müssen Sie etwa alle sechs Monate eine Aktualisierung durchführen, dies fällt normalerweise mit der Überlastung der Karten zusammen.

Um das Kachelbild und die Vektorkarte zu kombinieren, müssen Sie wissen, dass die Kacheln Google, OpenStreetMap, Bing und Yahoo in der
Mercator-Projektion (genauer
WEB MERCATOR , der Projektion auf die Kugel) dargestellt werden, wobei jede tiefere Ebene doppelt so detailliert ist wie die vorherige.

Yandex.Maps verwenden die Projektion des Mercator-Ellipsoids.
Es spielt keine Rolle, ob Sie die Geokoordinaten auf der Projektionsebene neu berechnen können und umgekehrt.
Wir haben die Detailstufe 17 als Maximum ausgewählt. Eine nähere Betrachtung macht keinen Sinn, da die Anzahl der Kacheln (jede Ebene ist viermal größer als die vorherige) erhöht wird und der Informationsgehalt gering ist.
2 ^ 17 * 256 = 33554432 (256 ist die Größe der Kachelkante in Pixel).
Nachdem wir die grundlegenden Werkzeuge haben, können wir direkt mit der Erstellung der optimalen Route fortfahren. Wir verbinden die Einkaufsobjekte mit der nächsten Kante im Straßendiagramm und beginnen dann mit der Suche nach dem kürzesten Weg. Zu diesem Zweck verwenden wir eine Variation des
Dijkstra-Algorithmus für die entladene Variation nacheinander für jeden Besuchspunkt. Am Ausgang erhalten wir eine
Adjazenzmatrix der Größe (N + 1) * (N + 1) mit unendlich auf der Hauptdiagonale (Ringverbot), wobei N die Anzahl der Besuchspunkte ohne Berücksichtigung des Austrittspunkts ist.
Die resultierende Matrix speichert den Mindestabstand entlang der Straßen zwischen allen Einkaufsmöglichkeiten, was ein klassisches
Problem für reisende Verkäufer ist . Da die algorithmische Komplexität eines solchen Problems übertrieben ist, haben wir
die Branch-and-Bound-Methode verwendet , um es zu lösen. Für n <15 ist es erschöpfend, andernfalls ist eine grobe Schätzung in der Tiefe verbunden. Die Option ist sicherlich nicht ideal, funktioniert aber durchaus.
Als Ergebnis haben wir eine Route in der Nähe der optimalen Entfernung mit einer Schätzung in km erhalten. Bei Bedarf kann der Bediener die Route manuell zugunsten der Priorität einzelner Punkte ändern.
Die Lösung arbeitet seit ungefähr 7 Jahren in der Organisation, ziemlich erfolgreich, wenn auch nicht ohne Mängel, sowohl in Bezug auf Genauigkeit als auch in Bezug auf Bequemlichkeit. Die Ergebnisse stimmen mit den GPS-Fahrzeugverfolgungsdaten überein. Nach meiner Einschätzung konnten durch die Einführung der Logistik 10-12% der zugewiesenen Mittel für Kraftstoff eingespart werden. Das Programm wurde von nur einer Person entworfen, gestartet und begleitet - Ihrem bescheidenen Diener.
Meine konservative Führung ist nicht bestrebt, „zu glänzen“, daher schlage ich ein fiktives Beispiel für den Weg der Aufmerksamkeit vor.

Ohne Visualisierung ist die Berechnung um ein Vielfaches schneller und innerhalb einer Siedlung fast sofort.
Nach so vielen Jahren juckt es manchmal, in den Code einzusteigen und ihn mit neuen Erfahrungen auf eine neue, modernere Plattform zu kopieren, aber bisher gibt es keine wirtschaftliche Machbarkeit.
Das ist alles, was ich dir sagen wollte, ich hoffe es war interessant.
Ich entschuldige mich, wenn ich irgendwo nicht genau war.