Page 4 of 5

Re: Optimierung des Straßenverkehrs durch Ampelschaltung

Posted: Mon 29. Feb 2016, 09:22
by netGuy
Anbei noch ein paar Beispiele für unsere momentan verwendeten Netze:
Eingang loop1, übergang von loop 1 zu loop 2 und umgekehrt und für den Rücktransport von Behältern aus den K-plätzen:
Image
Eingang loop2 an den WE-Plätzen (sind jetzt neu dazu gekommen):
Image
---
Eventuell muss ich für die K-Plätze und WE-Plätze das selbe Netz verwenden, da sie am selben Loop sitzen und auch physisch nebeneinander sind. Aber momentan hab ich auch so gute Ergebnisse.
---
Ich bin jetzt gerade dabei, die Simulation noch um ein weiteres Loop mit angeschlossener Produktion zu erweitern. Dieses Loop sorgt für mehr Verkehr in Loop 1, da die Behälter nur in die RBG an den Lagerplätzen fließen.
Falls Sie möchten, kann ich Sie gerne weiter auf dem Laufenden halten. (Ist ja gerade die spannende Phase). :mrgreen:

netGuy

Re: Optimierung des Straßenverkehrs durch Ampelschaltung

Posted: Mon 29. Feb 2016, 09:59
by TJetter
netGuy wrote:Falls Sie möchten, kann ich Sie gerne weiter auf dem Laufenden halten. (Ist ja gerade die spannende Phase). :mrgreen:
Ja, gerne!
Mich verunsichert etwas die Tatsache, dass in den Abbildungen alle Neuronen entweder auf 0 oder 1 stehen. Keine Zwischenwerte?
Ist denn die Normalisierung für die Inputs und Outputs richtig eingestellt?

Re: Optimierung des Straßenverkehrs durch Ampelschaltung

Posted: Mon 29. Feb 2016, 10:01
by netGuy
Momentan haben wir die Normalisierung deaktiviert. Die Abbildungen der Netze sind hier noch im untrainierten Zustand.
Ist denn eine Normalisierung zwingend notwendig?
Sie hat sich bisher als äußerst schwierig herausgestellt.

Re: Optimierung des Straßenverkehrs durch Ampelschaltung

Posted: Mon 29. Feb 2016, 11:18
by TJetter
netGuy wrote:Ist denn eine Normalisierung zwingend notwendig?
Je nach Aktivierungsfunktion können Inputs und Outputs bei deaktivierter Normalisierung nur einen Wertebereich von [0..1] bzww. [-1..1] verarbeiten.
Legt man höhere Werte an, dann werden Sie auf diesen Bereich begrenzt (abgeschnitten). MemBrain (nicht die dll) erzeugt dabei auch eine Warnung, die man i.d.R. nicht ignorieren sollte.
Um dieses Problem zu lösen kann man entweder alle Daten selbst normalisieren (also auf einen passenden Wertebereich umrechnen) oder eben die Normalsierungsfunktion der Neuronen aktivieren und den gewünschten Werteberich für jedes Input- und Output-Neuron angeben.
netGuy wrote:Sie hat sich bisher als äußerst schwierig herausgestellt.
In wie fern denn? Welche Probleme gab es dabei?

Re: Optimierung des Straßenverkehrs durch Ampelschaltung

Posted: Mon 29. Feb 2016, 11:34
by netGuy
In wie fern denn? Welche Probleme gab es dabei?
Es gestaltete sich insofern schwierig, dass sich die min-max-Bereiche im Verlauf der Simulation ändern können und ich vorab keinen genauen Wertebereich festlegen konnte.
Aber das erklärt die vielen 1-en als Ausgabewerte in den Trainingsdaten.
---
Es reicht wahrscheinlich nicht aus, nur das Ausgangsneuron zu normalisieren?
Reicht es die Eingangsneuronen auf 0...1 zu normalisieren?
Das könnte ich ja auch schon in der Simulation machen und die Werte dann einfach membrain übergeben.
Edit:
Ich müsste ja vor jedem Trainingsschritt alle Trainingsdatensätze durchlaufen und neu normalisieren - oder?

Re: Optimierung des Straßenverkehrs durch Ampelschaltung

Posted: Mon 29. Feb 2016, 14:20
by TJetter
netGuy wrote:Es gestaltete sich insofern schwierig, dass sich die min-max-Bereiche im Verlauf der Simulation ändern können und ich vorab keinen genauen Wertebereich festlegen konnte.
Man muss dann eine Abschätzung durchführen, was der größte anzunehmende Wertebereich sein wird und diesen zur Normalisierung verwenden. Grundregel ist immer: Ausreichend groß, aber nicht unnötig groß.
Werte während des Betriebs umzunormalisieren ist keine gute Idee, nein.

Wichtig ist auch das Randomisieren der Netze vor dem ersten Training. Bei der Verwendung der dll geht das oft vergessen, da einen die dll ja nicht extra danach fragen kann, bevor man das Training beginnt, so wie MemBrain das tut.

Re: Optimierung des Straßenverkehrs durch Ampelschaltung

Posted: Mon 29. Feb 2016, 16:06
by netGuy
Man muss dann eine Abschätzung durchführen, was der größte anzunehmende Wertebereich sein wird und diesen zur Normalisierung verwenden. Grundregel ist immer: Ausreichend groß, aber nicht unnötig groß.
Check ;-)
Dann muss ich nur noch mal über die Abschätzung der maximalen Verweildauer nachdenken. Irgendwie muss ich ja ausreißer auch mit reinbringen. Wobei ich denke, dass ich die maximale Verweildauer mal auf 6 Minuten als Maximum 0 als Minimum normalisiere. 6 Minuten entsprechen ca. dem 3maligen Durchlauf von Loop 1. Das wäre dann ja schon sehr viel, könnte aber passieren.

Re: Optimierung des Straßenverkehrs durch Ampelschaltung

Posted: Tue 1. Mar 2016, 08:35
by netGuy
So, ich hab die Normalisierung jetzt mal implementiert.
Ich normalisiere alle Werte inklusive des Augabeneurons mittels

Code: Select all

double normalizedValue = ((ceil_ - floor_) * (value - min)) / (max - min) + floor_;
auf das Intervall -1...1.
Mit den folgenden Werten:
min = 0
max: entsprechend der Abschätzung (hier muss ich glaube ich für die einzelnen Agenten bessere, also immer eigene, max-Werte für die Abschätzung der Verweildauer definiern).
ceil = 1
floor = -1

Re: Optimierung des Straßenverkehrs durch Ampelschaltung

Posted: Tue 1. Mar 2016, 19:37
by TJetter
Warum nun doch die 'händische' Normalisierung aller Daten, anstatt die eingebaute Normalisierung der Input- und Output-Neuronen zu verwenden und die Daten stattdessen im Original zu belassen?
Das führt außerdem dazu, dass alle bereits existierenden Daten um-normalisiert werden müssen, sobald sich die Normalisierungsgrenzen mal ändern. Dass das Netz erneut (nach-)trainiert werden muss, ist in beiden Varianten der Fall, aber die Umrechnung aller bestehenden Daten entfiele, wenn die eingebaute Normalisierung verwendet würde.
Hinzu kommt, dass man für so eine 'Umnormalisierung' bestehender Daten immer auch noch wissen muss, wie die Normalsierungsgrenzen (Quelle und Ziel!) für jedes Neuron waren, zum Zeitpunkt als die Normalsierung durchgeführt wurde.

Außerdem wichtig: Die angegebene Normalisierungsberechnung führt zu einem normalsierten Wertebereich von [-1..+1]. Dieser passt so nur auf Eingangsneuronen mit Aktivierungsfunktion 'IDENTICAL', nicht aber 'IDENT 0 TO 1' und auf Ausgabeneuronen mit Aktivierungsfunktion TAN-H, nicht aber LOGISTIC. Die eingebaute Normalsisierung von MemBrain passt sich selbstverständlich korrekt an die jeweilig gewählte Aktivierungsfunktion an.

Re: Optimierung des Straßenverkehrs durch Ampelschaltung

Posted: Tue 1. Mar 2016, 20:07
by netGuy
Warum nun doch die 'händische' Normalisierung aller Daten, anstatt die eingebaute Normalisierung der Input- und Output-Neuronen zu verwenden und die Daten stattdessen im Original zu belassen?
Ok, macht Sinn. Dann müsste ich nur die Normalisierungsgrenzen dynamisch zur Laufzeit anpassen (für den Fall einer Änderung).
Aber zu Beginn kann ich sie ja erst mal in membrain direkt hinterlegen.
dass das Netz erneut (nach-)trainiert werden muss, ist in beiden Varianten der Fall, aber die Umrechnung aller bestehenden Daten entfiele, wenn die eingebaute Normalisierung verwendet würde.
Also muss ich das Netz dann nachtrainieren, sobald sich die Grenzen geändert haben?

Dann geb ich als min-max-Werte für das Range der normalization die entsprechenden min-max werte an, die sich aus den Eigenschaften der Neuronen ergeben`? ZB: Für Loop1 0...28