0

Ich mache ein Projekt, das die Verwendung von genetischen Algorithmen in der Architektur erforscht, wo wir einen evolutionären Ansatz für die Erstellung von Voronoi-Tessellation in 3D verwenden. Dies geschieht mit ofxVoro ++ für openFrameworks (C++).Ist es notwendig mit binärer Kodierung in genetischen Algorithmen?

Unsere Chromosomen für den Genomen ist ein Vektor (Liste) von Punkten in 3D. Wir haben Single- und Two-Point-Crossover und eine Mutation implementiert, die diese Punkte mit einer gewissen Wahrscheinlichkeit randomisiert. In den meisten Beispielen, die ich gesehen habe, ist das Genom binär kodiert, was Mutation und Crossover vermutlich anders bewirken würde. diese

So ist meine Frage: Gibt es noch andere Vorteile für die binäre Codierung (mit Ausnahme Geschwindigkeit) und wie würden Sie eine solche Kodierung/Dekodierung in C++ behandeln? Von binär zu einer Liste von 3D-Punkten gehen.

Mit freundlichen Grüßen, Fred

+0

Wenn man bedenkt, dass alles auf einem Computer binär codiert ist, tun Sie es bereits. Das Behandeln der Chromosomen als 3d-Punkte bedeutet nur, dass alle Operationen eine Folge von Bits ergeben, die legale Darstellungen von Gleitkomma-/Festkommazahlen sind. – StoryTeller

+0

Brauchen Sie Hilfe bei künstlicher Intelligenz? https://area51.stackexchange.com/proposals/93481/artificial-intelligence – 6119

+0

Nein. Sie müssen keine Binärcodierung verwenden. Verwenden Sie alles, was Sie wollen. Stellen Sie nur sicher, dass Sie geeignete Mutations- und Crossover-Operatoren haben. – Ray

Antwort

0

können Sie echte Codierung verwenden auch, aber in diesem Fall ist wichtig, was Crossover und Mutation Sie verwenden. Wenn Ihre Frequenzweiche einfach (p1 + p2)/2 oder p1 * a + p2 * (1-a) ist, werden Sie keine guten Ergebnisse erhalten.

Ein guter Crossover-Operator für echte Codierung von K. Deb 1995 vorgeschlagen wurde, ist hier das Papier: http://www.complex-systems.com/pdf/09-2-2.pdf

0

Crossover und Mutation sind verschiedene Operatoren. Crossover verwendet vorhandene Genetik. Mutation führt neues genetisches Material in die Bevölkerung ein. Ohne viel mehr Informationen über Ihren Algorithmus zu wissen, klingt Randomisierung wie eine Mutation. Die Mutation wird typischerweise in einem sehr niedrigen Prozentsatz der Zeit (vielleicht 1%) durchgeführt, wo die Überkreuzung ziemlich hoch sein kann (50%).

Also für Ihren Algorithmus, würde ich nichts für Crossover „ändern“. Statt dessen würde ich beim Crossover versuchen, Material neu zu positionieren oder einfach verschiedene Teile von Punkten von den Eltern zu nehmen.

Für Mutation, könnte es sinnvoll hinzuzufügen, oder eine kleine Anzahl der Punkte abziehen, damit die Punkte modifizieren (Mutation).

Es ist schwierig, Vorschläge zu machen, ohne Darstellung mehr über Ihren Algorithmus und Chromosom zu kennen.

0

Ich verwendete verschiedene GA in Logistik und Finanzen Probleme. Sehr oft verwende ich keine binäre Darstellung. Das erste Beispiel, die ich Ihnen geben kann, ist das TSP Problem:

https://en.wikipedia.org/wiki/Travelling_salesman_problem

Hier verwendete ich Standarddarstellung: das Chromosom ein Array von Integer ist, wobei jeder Wert die Stadt darstellt.

So hängt es von der Art des Problems, das Sie versuchen zu lösen, wenn Sie einen Weg finden, können die GA ohne eine binäre Darstellung implementieren Sie eine Einstellung nicht benötigen. Darüber hinaus bevorzuge ich die natürliche Darstellung, weil einfacher zu verstehen ist, während Sie den Code debuggen, wenn Ihr GA funktioniert wie Sie wollen.