Zum Inhalt springen

GUI um einen Prozess bauen (Genetic Algorithm)


Aliter

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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