2016-06-26 17 views
0

Ich kann nicht eine gute Website zu finden scheinen GA zu erklären (was ich völlig neu bin), aber ich war ein Buch zu lesen und es wird gesagt, dass:Genetic Algorithm Binäre Darstellung

Wenn wir beschränken möglichen Werte der Schnittpunkt zum Bereich [-5, 1,5] und linear den Bereich in den binären Bereich [0, 2^8 - 1] umwandelt, dann würde ein Wert von 0,74 in 10011110 und Parameterwerte von [.74, -11 ] könnte durch 10011110110010.

vertreten jemand
1) Wie die lineare Transformation des Bereichs Werke mir erklären konnte, und
2) Wie ist 0,74 vertreten durch 1.001.111 0

Meine grobe Kenntnis der binären hätte übersetzt, dass als

2^8 0 0 2^5 2^4 2^3 2^2 2^1 

die 318.

ist, wenn Sie von jeder Website wissen, dass dies als eine gute Einführung erklären könnte, das würde helfen. Vielen Dank!

Antwort

1

Lineares Transformieren einer Reihe ist ziemlich einfach. Es ist wahrscheinlich einfacher mit ganzen Zahlen zu arbeiten.

Sagen wir, Sie haben einen Bereich von [0, 10] und Sie wollen das in einen Bereich [0, 20] übersetzen. Jeder Wert wird einfach mit 2 multipliziert, also 0 => 0, 1 => 2, 2 => 4, 3 => 6 usw.

Nehmen wir ein anderes Beispiel, das Sie übersetzen möchten [1, 10] in [2, 11]. Dazu subtrahieren Sie einfach 1 (für den unteren Bereich des ersten Bereichs) und fügen dann 2 hinzu (für das Minimum des zweiten Bereichs). Also füge einfach 1 zu jeder Zahl hinzu, also 1 => 2, 2 => 3, 3 => 4 usw.

Was passiert jetzt, wenn du sie kombinieren willst? Nehmen wir an, Sie möchten 10.110 in 30.230 übersetzen. Zuerst subtrahieren Sie das Minimum der ersten Zahl, 10, also ist das Minimum 0. Dann multiplizieren Sie mit dem Skalierungsfaktor. In diesem Fall sind 110-10 = 100 und 230-30 = 200, also ist der Skalierungsfaktor 200/100 = 2. Dann addierst du das Minimum des zweiten Bereichs, also 30. Also um i1 in i2 zu konvertieren, hast du i2 = (i1 - 10) * 2 + 30, die Sie dann vereinfachen können.

Wenn Sie [-5, 1.5] in [0, 255] konvertieren möchten, subtrahieren Sie -5 (dh addieren Sie 5), multiplizieren Sie mit 256, dividieren Sie durch 6.5 (von 1.5 - -5 = 6.5), und fügen Sie dann 0 hinzu. Da Sie sich mit ganzzahligen Werten beschäftigen, müssen Sie das Ergebnis auf die nächste ganze Zahl runden.

Auch haben Sie einen kleinen Fehler in Ihrer binären Berechnung, die niedrigste Ziffer ist 2^0, nicht 2^1. Sie müssen also 318 durch 2 teilen, um die richtige Antwort zu erhalten.

1

Ich habe einige einfache Genetische Algorithmen für die Funktionsoptimierung in C++ geschrieben. Hier ist der Quellcode:

https://github.com/mihaioltean/genetic-algorithms

Es gibt 2-Implementierungen: ein für echte Codierung und ein für die binäre Darstellung, die auch zeigt, wie aus einer binären Zeichenfolge in ein reellen Intervall zu transformieren.

Es gibt viele Kommentare im Code, in Sie brauchen mehr, bitte sagen Sie mir, was nicht klar ist, und ich werde mehr hinzufügen.

grüße, mihai