2016-06-26 55 views
0

我似乎無法找到一個很好的網站來GA(這我完全新的),但我讀一本書,它說:遺傳算法的二進制表示

如果我們限制的可能值截距範圍爲[-5,1.5]並將範圍線性轉換爲二進制範圍[0,2^8 - 1],則值0.74將轉換爲10011110,參數值[.74,-.11 ]可以通過10011110110010.表示

有人能向我解釋
1)如何工作範圍內的線性變換,並
2)如何爲0.74由1001111爲代表的0

我的二進制的粗糙知識肯定會翻譯,作爲

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

是318

如果你知道這或許可以解釋這是一個很好的介紹任何網站,這將有助於。謝謝!

回答

1

線性變換範圍非常簡單。開始時使用整數可能更容易。

假設你有[0,10]的範圍,並且你想將它翻譯成範圍[0,20]。每個值簡單乘以2,因此0 => 0,1 => 2,2 => 4,3 => 6等。

現在讓我們換個例子,您想翻譯[1,10]進入[2,11]。要做到這一點,你只需減去1(對於第一個範圍的底部),然後加2(對於第二個範圍的最小值)。所以只需在每個數字中加1,所以1 => 2,2 => 3,3 => 4等。

現在如果要合併它們,會發生什麼情況。假設你想把10,110翻譯成30,230。首先減去第一個數字的最小值10,所以最小值爲0.然後乘以比例因子。在這種情況下,110-10 = 100和230-30 = 200,所以縮放因子是200/100 = 2.然後添加第二個範圍的最小值,即30。因此,要將i1轉換爲i2,您需要i2 =(i1 - 10)* 2 + 30,然後您可以簡化。

如果你想將[-5,1.5]範圍轉換爲[0,255],你減去-5(即加5),乘以256除以6.5(從1.5 - -5 = 6.5),然後加上0.然後,因爲你正在處理整數值,你需要將結果四捨五入到最接近的整數。

此外,您的二進制計算中有一個輕微的錯誤,最低的數字是2^0,而不是2^1。所以你需要將318除以2得到正確的答案。

1

我寫了一些簡單的遺傳算法用於C++中的函數優化。這裏是源代碼:

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

有2個實施方式:一個用於實際編碼和一個用於二進制表示,其還示出了如何從一個二進制串變換爲真實的時間間隔。

代碼中有很多評論,你需要更多,請告訴我什麼不清楚,我會補充更多。

關於, mihai