Zum Inhalt springen

GUI um einen Prozess bauen (Genetic Algorithm)


Empfohlene Beiträge

Geschrieben

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. :D

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... :D 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! :)

Aliter

MathGA.zip

Geschrieben

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)

Geschrieben

@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?

Geschrieben
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.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...