Ein Logistiker wird häufig mit Problemen dieser Art konfrontiert:
- Ein Handelsreisender möchte eine Reihe von Kunden an verschiedenen Orten besuchen. Nach Abschluss der Besuche möchte er zu seinem Ausgangsort zurückkehren.
- Für die Entsorgung muss eine Sammeltour zusammengestellt werden, die an allen Containern vorbeiführt, die einem Entsorgungsfahrzeug zugeordnet sind. Das Fahrzeug startet am Betriebshof und muss am Ende wieder dorthin zurückkehren.
- Ein Transportunternehmen muss in einer Tour verschiedene Kunden anfahren. Start und Ziel der Tour muss der Betriebshof der Spedition sein.
- Werden verschiedene Teile aus einem Lager benötigt, muss der Lagermitarbeiter vom Übergabeplatz aus alle Kommissionierplätze anfahren, von denen Teile benötigt werden, und am Ende die entnommenen Teile wieder am Übergabeplatz abliefern.
Welcher Weg soll gewählt werden - in welcher Reihenfolge soll der Lagerarbeiter die Kunden aufsuchen bzw. in welcher Reihenfolge soll das Regalbediengerät (RBG) die Regale anfahren - damit die insgesamt zurückgelegte Wegstrecke möglichst gering ist?
Dieses Problem wird allgemein als Problem des Handlungsreisenden oder auch Travelling Salesman Problem (TSP) bezeichnet. Es wurde bereits 1831 von Voigt (1831) behandelt. Da es sich um ein grundlegendes und weit verbreitetes Problem handelt, wird es schon seit langem untersucht.
Eine einfache Google-Suche liefert Millionen von Treffern. Auch ich habe mich während meiner Zeit am FLW in Dortmund damit beschäftigt. Einen kurzen und kompakten Überblick gibt die Arbeit von Matai et al. 2010 [8] und natürlich Lawlar et al. 1987 als Klassiker [9].
von Neuronale Netze und der Traveling Salesman
SOM zur Lösung des TSP mit Excel/VBA
Ich höre den Aufschrei bis in mein Homeoffice: "VBA, das ist doch total ineffizient! Da muss man [aktuelle Lieblingssprache einsetzen] nehmen". Nun, mit Excel und VBA geht wirklich alles, das hat jeder auf seinem Rechner und die Arbeitgeber finden es auch gut, wenn man das beherrscht. Außerdem komme ich damit sehr schnell zum ersten Prototypen und bin 100% bürokompatibel.
Für die Analyse eines Algorithmus und seiner Laufzeitkomplexität ist es aber egal, auf welcher Hardware mit welcher Sprache etwas implementiert ist. Das ist natürlich vereinfacht, weil durch Parallelisierung und Vektorisierung erhebliche Geschwindigkeitssteigerungen möglich sind, wie z.B. Tensorflow zeigt. Darüber wird noch zu sprechen sein.
Den Trainingsablauf zeige ich in ▷ diesem Video, andere Animationen im Netz unterscheiden sich darin, dass ein Vielfaches an Neuronen genommen wird, als Städte besucht werden sollen. In meiner Lösung gibt es einen starken Selektionsdruck. Neue Neuronen werden immer dort erzeugt, wo sie gebraucht werden. Neuronen, die keine Stadt "repräsentieren", bekommen 2 Lernzyklen lang eine Chance. Haben sie bis dahin keine Stadt gefunden, sind sie nutzlos und müssen sterben.
Statt also den Ring mit viel zu vielen Neuronen langsam zu verformen, werden in den "interessanten" Ecken mehr Neuronen gebildet und dort, wo wenig los ist, Neuronen abgebaut [2]. Also wieder nach biologischem Vorbild. Die Adaption während des Trainings, die Nachbarschaftsfunktion der Neuronen und die sogenannte Relaxation habe ich stark vereinfacht. Es gibt einfach keine Relaxation, die Nachbarschaft wird einfach periodisch abgebaut und die Adaption ist eine Dreiecksfunktion. Das beschleunigt die vorige Variante noch einmal erheblich.
Die erste hier veröffentlichte ▦ Version 1.9 erzeugt etwa 8% schlechtere Touren als das Optimum. Die Probleme entnehme ich der ↪ TSPLIB [6]. Meine früheren Versionen sind nur unwesentlich schlechter. Wenn ein neues Neuron erzeugt wird, muss es in den Ring eingefügt werden. Dabei kann es passieren, dass eine Kreuzung entsteht, die ich dann am Ende durch einfaches Vertauschen zweier Nachbarn beseitige.
Alle Daten der Läufe werden ebenfalls in der Excel-Tabelle gespeichert. Für weitere Auswertungen der Läufe werden Daten in verschiedenen Sheets gespeichert, die dank Excel leicht beliebig erweitert werden können. Beim ersten Start müssen die Makros aktiviert werden.
Statt also den Ring mit viel zu vielen Neuronen langsam zu verformen, werden in "interessanten" Ecken mehr Neuronen erzeugt und da, wo wenig los ist, werden die Neuronen abgebaut [2]. Eben wieder am biologischen Vorbild orientiert. Die Adaption während des Trainings, die Nachbarschaftsfunktion der Neuronen und die sog. Relaxation habe ich stark vereinfacht. Es gibt einfach keine Relaxation, die Nachbarschaft wird simpel periodisch reduziert und die Adaption ist eine Dreiecksfunktion. Das beschleunigt die vorige Variante noch mal erheblich.
Die erste hier veröffentlichte ▦ Version 1.9 erzeugt etwas schlechtere Touren ~9% als das Optimum. Die Probleme entnehme ich der ↪ TSPLIB [6]. Meine früheren Versionen sind nur marginal schlechter. Inzwischen ist ▦ Version 2.6 veröffentlicht knapp unter 3% (1.5-1.9 ~9% → 2.0-2.5 ~4.3% → 2.6 ~2,9%) Wenn ein neues Neuron erzeugt wird, dann muss es in dem Ring eingefügt werden. Dabei kann es passieren, dass eine Kreuzung erzeugt wird, die ich dann durch einfaches Vertauschen zweier Nachbarn zum Schluss beseitige.
Alle Daten der Läufe sind auch in dem Excel Sheet gespeichert. In verschiedenen Sheets werden Daten für weitere Auswertungen der Läufe gespeichert, was sich dank Excel leicht beliebig erweitern läßt. Bei ersten Start müssen die Makros aktiviert werden.
Weitere Schritte
- Die Bedienbarkeit des Programms lässt zu wünschen übrig, ich kann's 😉
Der VBA-Code kann sicher verbessert werden.Der Algorithmus ist noch nicht ausgereizt, gerade bei großen Problemen.Die Parameter sind in keiner Weise optimiert eingestellt.Es fehlt ein Review des Standes für TSP mit SOM→ △ Review TSP-SOM- Es können nur euklidische Probleme behandelt werden.
- Geokoordinaten müssen in euklidische umgerechnet werden.
- Probleme mit systematischen Positionen (Platinen) werden schlecht gelöst.
- Bei Problemen mit unbekanntem Optimum sollte ein Abschätzung gemacht werden.
- Eine Systematische KI gestützte Suche aus Publikationen und Experimenten
- Warum Excel - ein pragmatischer Ansatz alle. nicht nur für IT-Experte.
- Eine Portierung des Kernalgorithmus wäre effizient (Python, Keras)
Update 2.1.23
Update 16.1.23
Update 19.01.2023
Update 29.01.2023
Quellen
- Wölker M (2000), "Analyse Logistischer Systeme mit Selbstorganisierenden Merkmalskarten". Thesis at: Universität Dortmund. Dortmund, Juni, 2000. Verlag Praxiswissen. [BibTeX] [URL]
- B. Angéniol, G. de la, C. Vaubois, J-Y L. Texier, Self-organizing feature maps and the travelling salesman problem, Neural Netw. 1 (1988) 289–293.
- G. Schäfer, Beitrag zur Optimierung von Kommissionierfahrten in Hochregallagergassen mittels neuronaler Netze, Universität Dortmund, MB - FLW, 1991
- Jünemann R and Wölker M (1991), "Selbstlernende Systeme in der Kommissioniertechnik, Einsatz von Neuronalen Netzen", In Trends in Materialsflußsystemen, Tagungsband 9. Dortmunder Gespräche, pp. 251 - 259. TüV Rheinland. [BibTeX] [URL]
- Wölker M (1996), "Dem Denken abgeschaut, Neuronale Netze im praktischen Einsatz" Braunschweig, Wiesbaden , pp. 84 - 95. Vieweg, Facetten. [BibTeX] [URL]
- Gerhard Reinelt, TSPLIB 95, Universität Heidelberg, Institut für Angewandte Mathematik, 2016, http://comopt.ifi.uni-heidelberg.de/software/TSPLIB95/
- Udo Rätzer, UNtersuchung zu effizienten Beurteilungskriterien für das Training Selbstorganissierender Merkmalskarten, Universität Dortmund, Informatik Systemanalyse, Diplomarbeit, 5, 1996
- Matai, Rajesh, Surya Singh, and Murari Lal. 2010. “Traveling Salesman Problem: An Overview of Applications, Formulations, and Solution Approaches.” Traveling Salesman Problem, Theory and Applications, November. InTech. doi:10.5772/12909.
- E.L. Lawlar, J.K. Lenstra, A.H.G. Rinnooy Kan, and D.B. Shmoys. The Travelling Salesman Problem. John Wiley and Sons, Chichester, 1987.
- Seite „Heap-Algorithmus“. In: Wikipedia – Die freie Enzyklopädie. Bearbeitungsstand: 28. Mai 2021, 15:50 UTC. (Abgerufen: 29. Januar 2023, 15:26 UTC)
Kommentare
Kommentar veröffentlichen