Frage

Ich bin ein Parameterauswahl Problem konfrontiert, die Ich mag würde mit genetischem Algorithmus (GA) lösen. Ich soll aus 3000 möglichen, nicht mehr als 4 Parameter auswählen. die binäre Chromosom Darstellung unter Verwendung scheint wie eine natürliche Wahl. Die Bewertungsfunktion straft zu viele „ausgewählt“ Attribute und wenn die Anzahl von Attributen ist akzeptabel, es wertet dann die Auswahl.

Das Problem ist, dass die GA in diesen spärlichen Bedingungen kaum die Bevölkerung zu verbessern. Weder die durchschnittlich Fitness-Kosten, noch die Fitness des „worst“ individual verbessert über Generationen hinweg. Alles, was ich sehe, ist gering (auch kleine) Verbesserung der Punktzahl des besten Individuums, die, nehme ich an, ein Ergebnis der Stichprobe ist.

Encoding das Problem Indizes des Parameters verwendet funktioniert auch nicht. Dies ist wahrscheinlich auf Grund der Tatsache, dass die Chromosomen gerichtet sind, während die Auswahlproblem nicht (dh Chromosomen ist [1, 2, 3, 4], [4, 3, 2, 1], [3, 2, 4, 1] usw. sind identisch)

Welches Problem Darstellung würden Sie vorschlagen?

P. S Ist dies wichtig ist, verwende ich Pyevolve .

War es hilfreich?

Lösung

Ich bin nicht vertraut mit mit Pyevolve, aber von dem, was ich über genetische Algorithmen erinnern kann, sind Sie mit 4 Stufen betreffen,

  1. Chormosome vielfältigste Auswertesysteme (Sie haben wahrscheinlich bereits diese heraus)
  2. Chromosome Initialisierung
  3. Chromosome Crossover
  4. Chromosome Mutation

Ich denke, man kann mit Listen dies tut einfach gut. Sie werden einige Betreiber überlasten müssen, aber es sieht aus wie Pyevolve können Sie dies tun, eine einfache Sache wäre, die Listendarstellung zu halten, so dass sie nur numerisch sortieren, bevor Sie das Chromosom zurück.

Ich müsste mehr über Ihr Problem wissen, aber hier sind meine Vorschläge. Da Sie eine variable Anzahl von Parametern haben, müssen Sie mit irgendeiner Art von Wahrscheinlichkeitsverteilung für die Anzahl der Parameter in einem Chromosom kommen. Ich werde eine einheitliche zufällig auf 1,2,3,4 nehmen hier an, aber man kann versuchen, etwas anderes, wenn du das besser gefällt. Ich werde diese Verteilung P_n nennen.

  1. Initialisierung. Seed Ihre Bevölkerung mit (mindestens) 3000 Chromosomen. Rufen Sie diese c_1, ..., c_3000. Zeichnen Sie n_j von P_n. setzen j in C_J. Wählen Sie die restlichen n_j -. 1 Parameter mit einer einheitlichen statistischen Verteilung von den übrigen Parametern
  2. Crossover. Lets nehme an, dass wir zwei Chromosomen haben. C_1 und C_2. Wir gehen zu schaffen (und zurück) Chromosom C_3. Wählen Sie aus n_3 {n_1, n_2} jeweils mit Wahrscheinlichkeit 1/2. Setzen Sie nun die Parameter C_1 und C_2 in einer Liste (und einzigartig sie, also, wenn beide C_1 und C_2 enthalten Parameter 1, ist es nur in der Liste ist einmal). Zeichnen Sie n_3 Parameter aus der gemeinsamen Liste und legt sie in dem Chromosom C_3.
  3. Mutation. Angesichts Chromosome C_1, zeichnen n_1 * von P_n. wenn n_1 * n_1 zufällig Elemente C_1 hinzufügen, bis ihre Größe, n_1 hat *.

Nun, es gibt viele Möglichkeiten, um dies zu realisieren, so zu tun, was am meisten Sinn für Ihr Problem macht.

Andere Tipps

Ich denke, eine Einzelwertzerlegung ( http://en.wikipedia.org/wiki/Singular_value_decomposition ) kann hier wegen der Begrenzung der Anzahl von Parametern besser geeignet sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top