Aliter Geschrieben 6. Februar 2012 Teilen Geschrieben 6. Februar 2012 Hallo zusammen, vor ein paar Monaten wollte ich mich mit neuronalen Netzen auseinander setzen. Das Tutorial empfiehlt jedoch, sich erstmal gut mit genetischen Algorithmen (Genetic Algorithm) aus zu kennen. Am Besten ich erklär erstmal, was das Programm tun soll: Ein Zahlenwert gibt das Ziel an, welches ein Chromosom durch mutieren, "fortpflanzen" mit anderen Chromosomen, erreichen soll. Das Ziel ist erreicht wenn die Fitness eines Chromosoms mit dem angegebenen Zahlwert übereinstimmt. Es gibt ein Pool in dem n-Chromosome vorhanden sind. Ein Chromosom besteht aus einem "bit string". Anhand des bit strings wird die Fitness eines Chromosoms gemessen. Je höher die Fitness, desto "stärker". Und desto höher die Wahrscheinlichkeit, dass dessen Bits mutieren bzw. dass es selektiert wird (Roulette wheel selection). Dadurch sollten starke Chromosome stärker werden... Soweit mal die Kurzfassung. Das Ganze läuft auch ganz gut. Nur die Konsolen-Ausgaben sind sehr unübersichtlich und nun wollte ich darum eine GUI basteln. Der o.g. Ablauf läuft in einem eigenen Thread und feuert Events ab. (scored, mutated, evolutate, usw.) Was ist die "best practice" um alle Chromosome in einer JTable darzustellen, welche immer dann aktualisiert wird, wenn sich z.B. die Fitness ändert? Der EventListener der Chromosome müsste ja gleichzeitig das Model vom JTable sein, oder? :confused: Ich habe schon ein wenig rumprobiert und bin auf sehr merkwürdige Konstruktionen gekommen... Der Source (Netbeans 7.0.1) findet sich im Anhang, ihr könnt gerne rumprobieren und machen was ihr wollt, damit. Findet ihr ja eine Lösung? Vielleicht finden auch Andere das Thema genetische Algorithmen ganz interessant... Wäre euch sehr dankbar! AliterMathGA.zip Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Aliter Geschrieben 12. Februar 2012 Autor Teilen Geschrieben 12. Februar 2012 Niemand? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 12. Februar 2012 Teilen Geschrieben 12. Februar 2012 Thread-Pushing ist unerwünscht. @topic: ein Bitmuster sollte man nicht durch einen String repräsentieren, sondern durch einen Zahlenwert (Speicherplatz), das Verändern von Bits kann mit einfachsten Operationen geschehen. Bei genetischen Algorithmen kann die Population sehr groß werden, so dass selbst ein JTable nicht übersichtlich ist. Es empfiehlt sich jedes Individuum anhand seines Wertes innerhalb eines 2D oder 3D Koordinatensystems darzustellen, so dass der Wert des Individuums die Position innerhalb des Systems ergibt (man muss ggf. falls man keine direkte Darstellung machen kann, das Individuum anhand von Ähnlichkeiten zu den anderen darstellen hierzu wäre z.B. MDS geeignet oder andere Projektionsverfahren) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Aliter Geschrieben 12. Februar 2012 Autor Teilen Geschrieben 12. Februar 2012 @topic: ein Bitmuster sollte man nicht durch einen String repräsentieren, sondern durch einen Zahlenwert (Speicherplatz), das Verändern von Bits kann mit einfachsten Operationen geschehen. Zum Beispiel? Bei genetischen Algorithmen kann die Population sehr groß werden, so dass selbst ein JTable nicht übersichtlich ist. Es empfiehlt sich jedes Individuum anhand seines Wertes innerhalb eines 2D oder 3D Koordinatensystems darzustellen, so dass der Wert des Individuums die Position innerhalb des Systems ergibt (man muss ggf. falls man keine direkte Darstellung machen kann, das Individuum anhand von Ähnlichkeiten zu den anderen darstellen hierzu wäre z.B. MDS geeignet oder andere Projektionsverfahren) Die Population wächst in diesem Fall nicht an. Es geht nur um die Fitness eines Individuums. Ist es nicht sehr aufwendig, sich deswegen in solche Projektionsverfahren einzuarbeiten? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 12. Februar 2012 Teilen Geschrieben 12. Februar 2012 Zum Beispiel? Schau Dir die Operatoren & und | an. Aber eigentlich solltest Du das wissen, wenn Du Dich mit neuronalen Netzen / genetischen Algorithmen auseinander setzt, denn das sind wirklich Grundlagen. Die Population wächst in diesem Fall nicht an. Es geht nur um die Fitness eines Individuums. Ist es nicht sehr aufwendig, sich deswegen in solche Projektionsverfahren einzuarbeiten? Es spielt keine Rolle, ob die Population sich während der Iterationen verändert. Wenn Du 1000 Individuen hast, dann werde ich sicherlich nicht 1000 Einträge in Deiner Tabelle durchscrollen, sondern ich will über die Zeit (Iterationen) sehen, wie sich die Population verändern. Das einzelne Individuen spielt nur eine untergeordnete Rolle. Ob es aufwändig ist, sich in Projektionsverfahren einzuarbeiten, ist von Dir abhängig. Es muss nicht zwingend ein Projektionsverfahren sein, Du musst eine graphische Darstellung Deiner Population finden, die eine entsprechende Aussage hat. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.