Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
ws1516:logistische_probleme [2016/03/19 16:30] jakobfaustus [Implementierte Algorithmen:] |
ws1516:logistische_probleme [2016/05/10 14:46] (aktuell) |
||
---|---|---|---|
Zeile 39: | Zeile 39: | ||
Der Grundaufbau ist so konzipiert, dass einzelne Programmteile reibungslos ausgetauscht werden können: | Der Grundaufbau ist so konzipiert, dass einzelne Programmteile reibungslos ausgetauscht werden können: | ||
- | * [[ws1516:logistische_probleme:master|Masterdatei]], sie ruft die Unterprogramme auf. In ihr werden sämtliche Eigenschaften für Strecke usw. Eingetragen. | + | **__BITTE DIE VERLINKTEN UNTERSEITEN IN DIESER AUFZÄHLUNG BEACHTEN__** |
- | * Die Züge sind samt ihrer Eigenschaften wie Geschwindigkeit, Ort usw. Wörterbücher, die in einer Liste gespeichert sind, in einer Textdatei hinterlegt. Dies hat den Nutzen, dass eine eindeutige Reihenfolge festgelegt werden kann, ohne weitere Hilfsmittel zu verwenden. | + | |
- | * Ein [[ws1516:logistische_probleme:einleseprogramm|Einleseprogramm]] liest nun diese Textdatei ein und stellt die daraus gelesene Zugliste dem Master zur Verfügung. | + | * [[ws1516:logistische_probleme:master|Masterdatei, sie ruft die Unterprogramme auf. In ihr werden sämtliche Eigenschaften für Strecke usw. Eingetragen.]] |
- | * Dieser ruft dann die vom Benutzer ausgewählten Algorithmen auf, stoppt die Zeit und [[ws1516:logistische_probleme:auswertung|wertet die Ergebnisse aus.]] | + | * [[ws1516:logistische_probleme:einleseprogramm|Die Züge sind samt ihrer Eigenschaften wie Geschwindigkeit, Ort usw. Wörterbücher, die in einer Liste gespeichert sind, in einer Textdatei hinterlegt. Dies hat den Nutzen, dass eine eindeutige Reihenfolge festgelegt werden kann, ohne weitere Hilfsmittel zu verwenden.]] |
- | * Die Grundlage der Algorithmen bildet das [[ws1516:logistische_probleme:simulationsprogramm|Simulationsprogramm]], welches in zwei Varianten existiert. | + | * Ein [[ws1516:logistische_probleme:einleseprogramm|Einleseprogramm liest nun diese Textdatei ein und stellt die daraus gelesene Zugliste dem Master zur Verfügung. ]] |
+ | * [[ws1516:logistische_probleme:auswertung|Dieser ruft dann die vom Benutzer ausgewählten Algorithmen auf, stoppt die Zeit und wertet die Ergebnisse aus.]] | ||
+ | * [[ws1516:logistische_probleme:simulationsprogramm|Die Grundlage der Algorithmen bildet das Simulationsprogramm, welches in zwei Varianten existiert.]] | ||
===== Beschreibung der Programmteile: ===== | ===== Beschreibung der Programmteile: ===== | ||
==== Implementierte Algorithmen: ==== | ==== Implementierte Algorithmen: ==== | ||
Zeile 80: | Zeile 82: | ||
=== 2. 2er-Tauschheuristik: Tauschen zufälliger Paare === | === 2. 2er-Tauschheuristik: Tauschen zufälliger Paare === | ||
Dieser Algorithmus wählt zufällig zwei Züge aus der Liste, vertauscht beide und testet die neu gewonnene Reihenfolge auf eine Verringerung der Verspätung. Die Laufzeit hängt lediglich davon ab, wie oft man das Programm tauschen lässt. Die Tauschzahl wird beim Programmaufruf übergeben. Alternativ könnte man auch eine Methode implementieren, die das Tauschverfahren bei einer Verbesserung um x Prozent beendet. | Dieser Algorithmus wählt zufällig zwei Züge aus der Liste, vertauscht beide und testet die neu gewonnene Reihenfolge auf eine Verringerung der Verspätung. Die Laufzeit hängt lediglich davon ab, wie oft man das Programm tauschen lässt. Die Tauschzahl wird beim Programmaufruf übergeben. Alternativ könnte man auch eine Methode implementieren, die das Tauschverfahren bei einer Verbesserung um x Prozent beendet. | ||
- | [[ws1516:logistische_probleme:2ercode|Quelltext]] | + | * [[ws1516:logistische_probleme:2ercode|Quelltext]] |
+ | |||
+ | Es wurde eine Testreihe mit 6 Zügen und jeweils 50 Wiederholungen angefertigt, bei der die Tauschzahl verändert wurde. | ||
+ | {{ :ws1516:2ertausch2.png?direct |}} | ||
+ | Es lässt sich schnell erkennen, dass ab etwa 75 Tauschen kaum noch Verbesserungen erzielt werden können. Die Werte darüber variieren lediglich durch die Streuung der Zufallskomponente. Deshalb sei im Anschluss noch einmal ein genauerer Blick auf das Diagramm geworfen: | ||
+ | |||
+ | {{ :ws1516:2ertauschzoom.png?direct |}} | ||
+ | |||
+ | Diese Grafik deckt sich sehr gut mit der Beobachtung, dass selbst bei einer Tauschzahl >200 sehr selten nach mehr als 50 Versuchen noch einmal getauscht wird. | ||
=== 3. 3er-Tauschheuristik: Tauschen einer 3er-Kombination === | === 3. 3er-Tauschheuristik: Tauschen einer 3er-Kombination === | ||
Zeile 86: | Zeile 96: | ||
Aus kuriosen Gründen funktioniert dieser Algorithmus jedoch nicht, näheres im Protokoll. | Aus kuriosen Gründen funktioniert dieser Algorithmus jedoch nicht, näheres im Protokoll. | ||
[[ws1516:logistische_probleme:2ercode|Quelltext]] | [[ws1516:logistische_probleme:2ercode|Quelltext]] | ||
+ | |||
=== 4. Simulated Annealing === | === 4. Simulated Annealing === | ||
Das Simulated Annealing ist eine Heuristik, die Beispielsweise für die Chipentwicklung genutzt wird. So wie bei Leiterplatten die Leiterbahnen möglichst kurz sein sollen, sollen bei uns möglichst schnell alle Züge ihren Bestimmungsort erreicht haben. | Das Simulated Annealing ist eine Heuristik, die Beispielsweise für die Chipentwicklung genutzt wird. So wie bei Leiterplatten die Leiterbahnen möglichst kurz sein sollen, sollen bei uns möglichst schnell alle Züge ihren Bestimmungsort erreicht haben. | ||
Zeile 92: | Zeile 103: | ||
Die Sprungwahrscheinlichkeit für eine Verschlechterung ist abhängig von der „Temperatur“ des Systems, die wiederum abhängig von der Laufzeit ist (das System kühlt ab). Die Geschwindigkeit und Form dieser Abkühlung ist nun imminent wichtig für den Erfolg des Annealing-Algorithmus. | Die Sprungwahrscheinlichkeit für eine Verschlechterung ist abhängig von der „Temperatur“ des Systems, die wiederum abhängig von der Laufzeit ist (das System kühlt ab). Die Geschwindigkeit und Form dieser Abkühlung ist nun imminent wichtig für den Erfolg des Annealing-Algorithmus. | ||
- | Wir haben mehrere Abkühlungschemata getestet: | + | Wir haben mehrere Abkühlungschemata getestet, Aufstieg bezeichnet eine Verschlechterung, Abstieg eine Verbesserung. |
- | Multiplikation mit konstantem Faktor: | + | Grunddaten: |
- | FIXME | + | 6 Züge |
- | Lineare abkühlung: | + | Brutale Rechenzeit auf Acer c720p mit Ubuntu 14.04 in chroot-Umgebung: 8,646 s |
- | FIXME | + | |
+ | Multiplikation mit konstantem Faktor, 50 Wiederholung, 2er-Tauschverfahren: | ||
+ | |||
+ | |||
+ | {{ :ws1516:diagramm.png?direct |}} | ||
+ | |||
+ | Es zeigt sich, dass das Annealing im Vergleich stets ein bisschen besser ist als das reine Tauschen, also alles wie erwartet. Der Unterschied ist jedoch alles andere als frappierend. | ||
+ | |||
+ | {{ :ws1516:annealing.png?direct |}} | ||
+ | |||
+ | Aufgrund der Mehrfachausführung einzelner Temperaturstufen beim Annealing überträgt sich der Effekt des "Einpendelns" der Tauschheuristik vor allem auf die schnellen Abkühlungen. Beim langsamen Abkühlen kann das Annealing jedoch seine Stärke beweisen. Besonders groß sind die Differenzen bei 6 Zügen jedoch auch noch nicht. Für das Aufstellen von Statistiken mit mehr als 6 Zügen fehlte jedoch die Rechenzeit bzw. Leistung. | ||
+ | |||
+ | * [[ws1516:logistische_probleme:annealing|Quelltext]] | ||
+ | |||
+ | ====== Rückblick/Selbstreflektion/Ausblick ====== | ||
+ | |||
+ | === Probleme des Programms === | ||
+ | * Das Programm ist nicht Objektorientiert geschrieben. Dies wirkte zu Beginn nicht notwendig, jedoch wuchs der Code Tumorartig in alle Richtung und selbst mit Dokumentation und Kommentaren ist es für Außenstehende wohl schwer zu verstehen. | ||
+ | * Wir haben viel Zeit an irritierenden Bugs verloren, trotz der "Großzügigste Schätzung * 2"-Zeitplanung | ||
+ | * Die Ergebnisse werden nicht sehr handlich dargestellt | ||
+ | |||
+ | === Probleme vor dem Computer === | ||
+ | * Keiner aus dem Team hat LinA belegt, was für die Algorithmenprogrammierung eine große Hürde ist | ||
+ | * Durch die Differenz in der Programmiererfahrung wurde viel Zeit beim erklären verloren | ||
+ | * Mathesis stand stets im Termin-/Prioritätenkonflikt mit Analysis und Einführung in das Verkehrswesen, welche beide vorher fällig waren. | ||
+ | * Nach der Mathesis-Blockveranstaltung war wieder Terminkonflikt mit Familie usw., größtes Problem war dabei viel Zeit ohne Internet, sodass nicht an der Wiki gearbeitet werden konnte. | ||
+ | |||
+ | === Ausblick === | ||
+ | * Ich selbst (Jakob) befürchte, dass wenn man wirklich weiterarbeiten wollte, ein komplettes neuschreiben des Programmes bereits mittelfristig der erste wichtige Punkt wäre, der sich dann schnell auszahlt. | ||
+ | |||
+ | Trotz allem hat das Mathesis-Labor viel Freude bereitet und war definitiv die richtige Wahl! | ||
- | FIXME [Details Annealing, Abkühlen usw. einfügen] | ||
- | [[ws1516:logistische_probleme:annealing|Quelltext]] | ||
====== Protokoll ====== | ====== Protokoll ====== | ||
Klick: | Klick: | ||
- | [[ws1516:logistische_probleme:protokoll|Protokoll]] | + | * [[ws1516:logistische_probleme:protokoll|Protokoll]] |
- | [[ws1516:logistische_probleme:todo|td]] | + |