「交叉」與其說是一個定義良好的操作者由於考慮父母的方面,並利用他們產生類似於在某些方面,每個父母子女的一般想法。因此,對於如何進行交叉的問題沒有真正的正確答案。
實際上,您應該爲您的問題域和編碼做任何有意義的事情。像二進制編碼個體的兩個母體重組一樣,有一些明顯的選擇 - 例如像n點和均勻交叉的東西。對於實值編碼,如果從嚴格的生物學角度來看,有些事情像SBX那樣不太明智。相反,它們只是設計成具有一些預定的屬性。類似地,置換編碼提供了許多衆所周知的操作符(順序交叉,循環交叉,邊緣裝配交叉等),這同樣是分析父母的哪些特徵對於使特定問題域可遺傳是有意義的結果。
你可以自由地做同樣的事情。如果你有三位家長(與像二進制一些離散的編碼),你可以這樣做以下:
child = new chromosome(L)
for i=1 to L
switch(rand(3))
case 0:
child[i] = parentA[i]
case 1:
child[i] = parentB[i]
case 2:
child[i] = parentC[i]
這是否是一個很好的操作與否將取決於幾個因素(問題域,的解釋編碼等),但它是生成後代的完美合法方式。你也可以發明你自己的更復雜的方法,例如,對每個等位基因值進行多個父母的加權平均,做AND和OR等布爾操作。如果你喜歡哪個不同,你也可以構建一個更「結構化」的操作符父母有特定的角色。基本的差異進化算法選擇三個父母,a,b和c,並計算一個像a + F(b - c)
(具有某些函數F)的更新,大致對應於後代。