Zum Inhalt springen
View in the app

A better way to browse. Learn more.

#T/N/X/T

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

EA Kitchen: KI vs. Evolution

Geschrieben

Der eine oder andere hat vielleicht schon gesehen das ich wieder mal an einem EA-Projekt arbeite. Für die Umsetzung hab ich einfach mal das Kitchen-Framework hergenommen.

 

Details zur Idee und Hintergründe gibts im Blog.

 

Hier mal die Version 0.x, ich hab eigentlich nur mal das Framework für den konkreten EA angepasst und Stops/TP etc. implementiert (was in dem Fall äußerst minimalistisch ist.)

 

Interessant wird dann die calcEntry Funktion. Ich werde im weiteren Verlauf 2 include dateien machen. Eine für die KI-Variante, eine für die Evo-Variante. Aber das dürfte noch ein bissl dauern ;)

 

Die Kitchen soll ja nicht nur aus Indikatoren bestehen, sondern darf auch ein bissl "fancy-math-stuff" kriegen ;)

eKIvsEvo.mq4

Featured Replies

Geschrieben

Ich wusste jetzt nicht wo ich es einsetzten sollte ob im Blog als Kommentar oder hier rein. Falls es im Blog besser aufgehoben wäre wusste ich nicht ob du da nochmal rein schaust ;-)

http://www.tom-next....ntierung-teil2/

Also musste ein workaround her. Sieht im konkreten Fall so aus, das ich alles eindimensionale Arrays habe und die mehrdimensionalität mit der Indizierung "simuliere".

 

realesArray[0] entspricht theoretischesArray[0][0][0]

realesArray[1] entspricht theoretischesArray[0][0][1]

Schwierig wirds jetzt zusätzlich weil die Dimensionen nicht nur variabel in der Größe sind, sondern natürlich komplett unterschiedlich sind. Nehmen wir als Beispiel das "zweidimensionale" Array welches die Transferfunction-Id pro neuron speichert.

Theoretisch ist das Array so aufgebaut:

 

transferId[layer][neuron]

gibt es jetzt 5 Neuronen am Eingangslayer, 3 am layer1 und 2 am Layer2, dann ist

 

transferId[0][1]= realesArray[1]

transferId[1][1]= realesArray[5+1];

transferId[1][2]= realesArray[5+2];

transferId[2][0]= realesArray[5+3+0];

Ich muss mir hier also merken wieviele Neuronen es bis zum LayerX gibt, um dann für LayerX den richtigen Offset im Array zu wissen.

Diese Info hab ich wiederum in ein Array gespeichert (simple, eindimensional ;) das für jeden Layer genau diesen Offset speichert.

 

Könntest du bitte das näher erläutern?

Nochmal

5 Neuronen am Einganglayer

3 am Layer1

2 am Layer2

-> ergibt in diesem Fall "3 Layer" und "5 max Neuronen in einem Layer (Eingangslayer)"

transferId[0 bis 2][0 bis 4]

Arraysize 125 mit einem Offset von 25

 

oder aufgesplittet im konkret diesem Fall

transferId[0][0-4] (Eingangslayer) -> 5 verschiedene Möglichkeiten

transferId[1][0-2] (Layer1 3 Neuronen) -> 3 verschiedene Möglichkeiten

transferId[2][0-1] (Layer2 2 Neuronen) ->2 verschiedene Möglichkeiten

Arraysize 30 mit einem Offset von 6 (2*3)

ABER dann verstehe ich deine Zusammenführung nicht.

 

EDIT : Ich glaub ich hab es jetzt verstanden. Man addiert die Neuronen der vorherigen Layer bis man zum eigentlichen Layer kommt und zählt diese hinzu... Post kann vom Admin gelöscht werden.

transferId[0][0]= realesArray[0]; (realesArray[0])

transferId[0][1]= realesArray[1]; (realesArray[1])

transferId[0][2]= realesArray[2]; (realesArray[2])

transferId[0][3]= realesArray[3]; (realesArray[3])

transferId[0][4]= realesArray[4]; (realesArray[4])

transferId[1][0]= realesArray[5]; (realesArray[5+0])

transferId[1][1]= realesArray[6]; (realesArray[5+1])

transferId[1][2]= realesArray[7]; (realesArray[5+2])

transferId[2][0]= realesArray[8]; (realesArray[5+3+0])

transferId[2][1]= realesArray[9]; (realesArray[5+3+1])

 

Dein Satz "Ich muss mir hier also merken wieviele Neuronen es bis zum LayerX gibt, um dann für LayerX den richtigen Offset im Array zu wissen." hat in meinem Hirn kein Anschluss gefunden. Nu hat es aber die richtige Andockstelle erhalten.

Geschrieben
  • Autor

Post kann vom Admin gelöscht werden.

Wenns ok is, lass ich es stehen. Vielleicht hilfts wem anderen auch noch.

 

Nochmal zum Verständnis:

Das Problem an der Sache ist die Variable Größe der "hinteren" Dimensionen.

 

Wenn ich es als "wirkliches" zweidimensionales Array machen würde. Müsste ich die 2 Dimension auf eine fixe Größe einstellen. Die ist dann entweder immer viel zu groß, oder schnell mal zu klein. Oder wie im aktuellen Fall: der erste Layer hat 500 Neuronen, der zweite 32, der dritte 3. Dann müsste das Array double[][500] sein, und man verbraucht unnötig Speicher (und womöglich auch Performance).

 

Wie ich es gelöst hab, nochmal (hoffentlich) anschaulicher:

Mit dem alten Beispiel: 3 Layer, erster Layer 5, zweiter 3, dritter 2 Neuronen.

 

Das Array sieht dann so aus:

"transferId[x][y]" bezeichnet die Id für Neuron y auf Layer x:

 

{ transferId[0][0],transferId[0][1],transferId[0][2],transferId[0][3],transferId[0][4],

transferId[1][0],transferId[1][1],transferId[1][2],

transferId[2][0],transferId[2][1] }

 

transferId[1][0] liegt also bei Offset 5 ... Anzahl Neuronen am 1. Layer

transferId[2][0] liegt bei Offset 5+3= 8 ... Anzahl Neuronen am 1. und 2. Layer

 

HTH

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

Account

Navigation

Suche

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.