Ich hab in dem Archiv keine Implementierungen für Rezeptor, Output und Synapse etc. gefunden.
Ohne diese Klassen kann man nicht viel zum Programm sagen.
Ein paar Tipps hätte ich aber schon:
1. Benennung von Komponenten: Du solltest die Namen deiner Bezeichner sorgfältig wählen. Wenn du dir diesen Code in einem halben Jahr wieder anschaust, wirst du keine Ahnung haben, was Button1 und was Button2 gemacht hat. "btnLearn" und "btnTest" wären wesentlich geeignetere Namen, aus denen man immer gleich den Sinn ersehen kann.
Code wird nur einmal geschrieben, aber sehr oft gelesen. Die Lesbarkeit des Codes sollte mit an erster Stelle stehen.
Code:
Dim rezeptor(5, 8) As rezeptor
rezeptor(5, ist doch die Menge aller Rezeptoren. Warum dann nicht
Code:
Dim rezeptoren(5,8) As rezeptor
?
Wenn du später mal auf statische Methoden zugreifen musst, ist sofort klar, ob du gerade auf dem Typ, oder der Instanz operierst.
2. Separation of Concerns:
Du hast deine ganze Logik in deine Main-Form gepackt. Das ist sehr unsauber, sorgt für starke Kopplung des Codes und macht Wiederverwendung unmöglich. Wenn du mit deinem Lernprojekt am Ende bist, willst du die ANNs doch in anderen Projekten einsetzen. Wie soll das gehen, wenn du den Lernmechanismus direkt mit deinen Checkboxen verheiratet hast? ;D
Deine Rezeptoren, Synapsen und Outputs gehören erstmal in eine eigene Klasse. Die stellt ein definiertes Interface zur Verfügung (inputs, outputs, methoden etc.). Damit erhälst du ein wiederverwendbares Stück Code, dass du dann auch in anderen Projekten einsetzen kannst. Die Details des Lernens, der Berechung der Ausgänge etc. behält die Klasse für sich, das geht niemand anderen etwas an. Auf den ersten Blick würde folgende Signatur ausreichen:
Methoden:
Konstruktor(InputCount, OutputCount)
GetOutput
SetInput
Learn(desiredOutput)
Dein Programm muss sich dann nur noch darum kümmern, die Werte der Checkboxen an die Eingänge zu legen und die Ausgaben irgendwie anzuzeigen.
Lesezeichen