我正在嘗試實現一個非常簡單的遺傳算法示例。按位交叉兩個整數
有一次,你必須做一個「交叉」(生物學)與兩個數字(父母)才能得到一個「孩子」。
你可以找到交叉在這裏的解釋:(第二個圖中,更容易「一點」跨接一個我正在試圖做的)
How to "crossover" two strings (1234 & abcd -> 12cd & ab34)
染色體(父母和孩子)是數字,但「交叉」將有點操作。
我發現對於「染色體」中的一個的解決方案,這是這樣的:
- 移動的位X量向右(
>>>
操作者) - 然後再次移動至位X位置但是這次是在左側(
<<
運營商)
所以這將保持其中一條染色體的末端,並以0開頭。
但我真的不知道如何解決其他染色體的問題,然後也做交叉。
(可能是XOR一次我保持染色體的開始/結束,並用0填充其餘部分。)
或者我應該甚至從另一個角度來處理這個問題呢?
你總是知道你的兩個輸入有多大的數字(例如,16位整數) ? – David 2012-07-29 01:01:11
是的,它們總是16位整數。可以修改的一件事是交叉百分比。例如,75%將保留父A的前4位(25%),然後從父B的12位(75%)位跟隨這4位。 – 2012-07-29 01:05:42