Hab's gerade ein bisschen eilig, deshalb nur ganz kurz:just4phil wrote:2.
derzeit habe ich die trainingsdaten (=lesson) im register "Trainig" als excel-tabelle protokolliert. jetzt frage ich mich, wie ich das eigentlich am sinnvollsten an das NN übermittle. dafür brauche ich ja ein CSV. also könnte ich aus dem excel-blatt "Training" ein CSV speichern und das dann vom NN laden lassen.
- Muss ich dann nach jedem würfeln ein CSV generieren, dann ins NN laden und dann "Teach Lesson" durchführen? das wird wahrscheinlich schon von den ganzen lese und schreiboperationen inperformant.
evtl. ist es sinnvoller die daten in einem großen array zu halten?! kann man das auch direkt an das NN übergeben oder geht das nur über den umweg erst ein CSV zu speichern und das dann wieder zu laden?
Das Lesson-Handling macht man einzig sinnvoll ebenso über die DLL. Dazu gibt es jede Menge Interface-Functionen z.B. AddPattern, SelectPattern, SetLessonInputs usw.
Die DLL hält die Lesson sehr effizient im Speicher und mit TeachStep() der DLL wird die ganze Lesson einmal trainiert.
Leider fehlt mir im Moment die Zeit, die nötigen Funktionen herauszusuchen, aber der DLL-Header sollte schon mal eine erste Idee vermitteln.
Die DLL bietet dann auch die Möglichkeit, das Ganze abzuspeichern, hier sollte man das MemBrain interne Speicherformat nehmen (also SaveLesson()). Wenn man möchte kann man am Ende mit der DLL oder auch MemBrain selbst die Lesson auch noch mal in CSV exportieren, aus Performanzgründen sollte man aber während des Programmlaufs immer nur in das interne Format speichern (z.B. alle 1000 Pattern, als Sicherung).
Es ist essenziell, die Gleichung vollständig umzusetzen. Wenn das geschehen ist, sind auch alle anderen Probleme aus der Frage 1) gelöst: Man muss keine Aktionen zusammenfassen und auch keine Punkte relativ umrechnen. Der Agent sollte duch Weitsichtigkeit selbst erlernen, was gut ist und was nicht.just4phil wrote:1.
die wertigkeit pro trainingsmuster soll ja wie folgt errechnet werden:
Inputs = [s, a], Output = Q(s, a) + alpha * [r +gamma * Qmax(s', a') - Q(s, a)]
dabei muss ich also im folgezustand s' auch die höchstwertige aktion bestimmen und dann nach der formel die wertigkeit berechnen. grundsätzlich kein problem. muss mir nur mal genau überlegen, wie ich das strukturell in meinem code am besten umsetzen kann. bisher habe ich daher erstmal nur die punkte genommen.
Da die Endpunktzahl der Summe der Einzelbelohnungen entspricht, ist am Ende auch keine zusätzliche Belohnung notwendig. Wichtig ist aber ein finaler Trainings- und Mustergenerierschritt nach der letzten Aktion, genau so wie nach allen anderen Aktionen.
Viele Grüße