Diskussion zum Artikel "Genetische Algorithmen - Leicht gemacht!" - Seite 9
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Ich schlage vor, dass die Bevölkerungsgröße berechnet werden sollte:
Vielen Dank für diesen Artikel! Wenn nicht für sie - ich habe nie gelernt, was genetische Methoden sind :)
Aber es gibt eine Frage! Wenn wir Chromosomen aus der Datenbank überprüfen - im Falle einer Übereinstimmung - wird eine Einheit vom Chromosomenindex aus der Datenbank abgezogen. Und warum? Und was ist, wenn der Index Null ist?
Wo liege ich falsch?
Ich schlage vor, dass die Bevölkerungsgröße berechnet werden sollte:
Ich will die Kompetenz der zitierten Quelle nicht bestreiten, aber ich muss ihr widersprechen.
Die Durchführbarkeit des Einsatzes von GA bei Optimierungsproblemen liegt in der Verringerung der Anzahl von FF-Durchläufen, die zur Bestimmung des Optimums erforderlich sind, im Vergleich zur direkten Suche.
Wenn wir der Empfehlung folgen
ChromosomeCount=GeneCount*11;wird das Problem mit 1000 Argumenten eine Populationsgröße von 11000 Individuen erfordern! Und das sind 11000 FF-Läufe in nur 1 Epoche! Man kann genauso gut die zufällige Generierung von Genen verwenden, und das Ergebnis wird beim Finden des Optimums nicht viel schlechter sein. Die angegebene Quelle geht die "Wette" ein, dass in einer großen Population genügend genetisches Material vorhanden ist, um die Population in jeder Epoche in Richtung Verbesserung weiterzuentwickeln. Ich versuche, dasselbe zu erreichen, indem ich mit Wahrscheinlichkeiten mit genetischen Operatoren spiele, ohne die Gesamtzahl der FF-Läufe zu erhöhen.
Vielen Dank für diesen Artikel! Wenn nicht für sie - ich habe nie gelernt, was genetische Methoden sind :)
Aber es gibt eine Frage! Wenn wir Chromosomen aus der Datenbank überprüfen - im Falle einer Übereinstimmung - wird eine Einheit vom Chromosomenindex aus der Datenbank abgezogen. Und warum? Und was ist, wenn der Index Null ist?
Wo liege ich falsch?
Die Datenbank wird nur überprüft, wenn mindestens ein Chromosom in der Datenbank vorhanden ist. Sie haben nicht den gesamten Abschnitt des Codes für die Datenbanksuche zitiert.
Daher ist der Fall, dass keine Chromosomen in der Datenbank vorhanden sind, die Nut aber geprüft wird, unmöglich.
Die Datenbankprüfung wird nur durchgeführt, wenn mindestens ein Chromosom in der Datenbank vorhanden ist. Sie haben nicht den gesamten Abschnitt des Codes für die Suche nach Basen angegeben.
Daher ist der Fall, dass keine Chromosomen in der Datenbank vorhanden sind, aber die Rillenprüfung durchgeführt wird, unmöglich.
Vielen Dank für die schnelle Antwort! Ich habe nicht genau das gemeint, was Sie meinen!
1) Angenommen, es gibt tatsächlich ein Chromosom in der Datenbank (ChrCountInHistory = 1 - d.h. die Array-Dimension ist gleich eins) - dann ist sein Index in der Datenbank Null! (ChrCountInHistory ist standardmäßig Null - der Index eines Elements im Array ist Null).
Und wir subtrahieren eins von diesem Index:
Außerdem beginnt die Suche bei Ch1=0.
2) Wir vergleichen mit HistoryHromosomes[Ge][Ch1 ], und weisen HistoryHromosomes[0][Ch1-1] zu.
Sie haben Recht, vielen Dank.
Das ist der richtige Weg:
Sie haben Recht, vielen Dank.
Das ist der richtige Weg:
Hmm.
Jetzt"Array out of range" auf HistoryHromosomes[0][Ch1], obwohl alles korrekt zu sein scheint...
joo:
Sie haben Recht, vielen Dank.
Gern geschehen! Die Hauptsache ist, dass es jetzt noch besser funktioniert als vorher :)
joo:
Hmm.
Jetzt "Array out of range" bei HistoryHromosomes[0][Ch1], obwohl alles korrekt zu sein scheint...
Es ist schwer zu sagen, warum - wir haben unterschiedlichen Code zu analysieren. Vielleicht liegt es an der "position"-Variablen - ihr Analogon im Artikel ist "chromos". Ich habe mir den Code im Artikel bestimmt 10 Mal angesehen - ich konnte nicht verstehen, wo der Fehler liegt :( Ich werde mir später die Beispiele im Artikel ansehen - vielleicht wird dann etwas klarer.
P.S.: Es ist gerechtfertigt, eine Speicherbank zu verwenden, wenn eine Variable aus ~150 Werten besteht. Und es gibt 100000 Individuen in der Historie. Vielleicht wäre es in einem solchen Fall schneller zu berechnen, als alles zu überprüfen (zu suchen)? Sie haben es nicht überprüft?
P.S.: Es ist gerechtfertigt, eine Speicherbank zu verwenden, wenn eine Variable aus ~150 Werten besteht. Und es gibt 100000 Individuen in der Historie. Vielleicht wäre es in einem solchen Fall schneller, zu zählen, als alles zu überprüfen (erneut zu überprüfen)? Sie haben es nicht überprüft?
Es hängt alles von der Zeit ab, die für die Berechnung der FF benötigt wird. Wenn die FF nur eine mathematische Funktion ist, dann ist die Bank nicht sinnvoll. Aber wenn die FF historische Läufe (Neuronenlernen usw.) und andere ressourcenintensive Aufgaben verwendet, dann ist die Bank notwendig und kann die Optimierungszeit erheblich reduzieren.
Nun, das hängt auch von der Genauigkeit der Gene ab. Je "gröber" die Gene sind, desto häufiger treten Wiederholungen auf, und desto sinnvoller ist die Verwendung einer Chromosomenbank.
....
:)
Trotzdem, es gibt keinen Fehler, du hast mich sehr verwirrt. Hier habe ich ein Testskript gemacht, probier es aus, dann verstehst du alles.
Hier vergleicht es zwar das Chromosom mit der Position von Ch1, aber in der oberen Schleife wird ihm +1 zugewiesen, also ziehe ich danach -1 ab.
Ich stimme zu, es ist ein bisschen schief, das könnte man besser machen.
Hier ist ein Skript, um es zu überprüfen: