【演算法】遺傳演算法GA中幾種交叉運算元小結
(圖片例子來自上課時老師的PPT,不過老師說PPT是他從網上組合的,所以沒有出處)
1、Partial-Mapped Crossover (PMX)
過程:
第一步,隨機選擇一對染色體(父代)中幾個基因的起止位置(兩染色體被選位置相同):
第二步,交換這兩組基因的位置:
第三步,做衝突檢測,根據交換的兩組基因建立一個對映關係,如圖所示,以1-6-3這一對映關係為例,可以看到第二步結果中子代1存在兩個基因1,這時將其通過對映關係轉變為基因3,以此類推至沒有衝突為止。最後所有衝突的基因都會經過對映,保證形成的新一對子代基因無衝突:
最終結果:
2、Order Crossover (OX)
過程:
第一步,與PMX相同,隨機選擇一對染色體(父代)中幾個基因的起止位置(兩染色體被選位置相同):
第二步,生成一個子代,並保證子代中被選中的基因的位置與父代相同:
第三步(可再分兩小步),先找出第一步選中的基因在另一個父代中的位置,再將其餘基因按順序放入上一步生成的子代中:
需要注意的是,這種演算法同樣會生成兩個子代,另一個子代生成過程完全相同,只需要將兩個父代染色體交換位置,第一步選中的基因型位置相同,本例中的另一個子代為:254913678
與PMX不同的是,不用進行衝突檢測工作(實際上也只有PMX需要做衝突檢測)。
3、Position-based Crossover (PBX)
過程:
第一步,隨機選擇一對染色體(父代)中幾個基因,位置可不連續,但兩染色體被選位置相同:
第二步,與OX的第二步相同,生成一個子代,並保證子代中被選中的基因的位置與父代相同:
第三步,也與OX的第三步相同,先找出第一步選中的基因在另一個父代中的位置,再將其餘基因按順序放入上一步生成的子代中:
與上倆個演算法不同的是,選擇的基因型位置可以不連續,出來這一點外與OX基本一致,同樣有兩個子代,本例的另一個為:243519678。
4、Order-Based Crossover (OBX)
過程:
第一步,隨機選擇一對染色體(父代)中幾個基因,位置可不連續,但兩染色體被選位置相同:
第二步(分為兩小步),先在父代2中找到父代1被選中基因的位置,再用父代2中其餘的基因生成子代,並保證位置對應:
第三步,將父代1中被選擇的基因按順序放入子代剩餘位置中:
同理,交換父代1、2可得到另一個子代(被選擇基因的位置不變),本例結果為:423156798。
OBX與PBX相比生成子代的“基礎”基因來源不同一個來自被選中基因,一個來自剩餘的,此外思想基本相似。
5、Cycle Crossover (CX)
過程:
第一步,在某個父代上隨機選擇1個基因,然後找到另一個父代相應位置上的基因編號,再回到第一個父代找到同編號的基因的位置,重複先前工作,直至形成一個環,環中的所有基因的位置即為最後選中的位置:
第二步,用父代1中選中的基因生成子代,並保證位置對應:
第三步,將父代2中剩餘基因放入子代中:
與上述演算法不同的是,僅需要在一個染色體上隨機選擇一個位置;本例另一個子代結果為:543926781。
6、Subtour Exchange Crossover
過程:
第一步,在某個父代上選擇1組基因,在另一父代上找到這些基因的位置:
第二步,保持未選中基因不變,按選中基因的出現順序,交換兩父代染色體中基因的位置,一次生成兩個子代:
與上述演算法不同的是,只在一個染色體上選擇基因的位置。
轉自:https://blog.csdn.net/u012750702/article/details/54563515/
相關文章
- 遺傳演算法(一):Basic GA演算法
- 遺傳演算法的改進——跳出區域性最優機制的研究(選擇運算元、交叉運算元、變異運算元的改進)演算法
- Python-遺傳演算法君主交叉程式碼實現Python演算法
- 在matlab中利用遺傳演算法(GA)求取函式全域性最大值Matlab演算法函式
- 遺傳演算法演算法
- 遺傳演算法 (轉)演算法
- Unity中利用遺傳演算法訓練MLPUnity演算法
- 遺傳演算法的基本框架演算法框架
- 遺傳演算法 (Genetic Algorithm)演算法Go
- 元啟發式演算法庫 MEALPY 初體驗-遺傳演算法為例演算法
- 幾種常見排序演算法總結排序演算法
- 人工智慧 (13) 遺傳演算法人工智慧演算法
- 10分鐘搞懂遺傳演算法演算法
- python遺傳演算法(詳解)Python演算法
- 粒子群演算法和遺傳演算法的比較演算法
- 幾種常見的排序演算法總結排序演算法
- 影像濾波演算法整理--均值、中值、高斯、拉普拉斯運算元、梯度運算元:演算法梯度
- 遺傳演算法詳解與實驗演算法
- 遺傳演算法解決TSP問題演算法
- 如何學習python遺傳演算法?Python演算法
- 遺傳演算法組卷使用心得演算法
- 遺傳演算法與C++實現演算法C++
- 遺傳演算法講解(Matlab描述)演算法Matlab
- 【Spark篇】---SparkStreaming中運算元中OutPutOperator類運算元Spark
- 遺傳演算法中適值函式的標定與大變異演算法演算法函式
- 【資料結構與演算法】位運算資料結構演算法
- SIFT運算元總結
- python實現:目標優化演算法——遺傳演算法Python優化演算法
- 用遺傳演算法進行特徵選擇演算法特徵
- 【演算法】位運算技巧演算法
- 【每日演算法】位運算演算法
- 演算法之位運算演算法
- 進化演算法、遺傳演算法與粒子群演算法之間的比較演算法
- 幾種常用的排序演算法排序演算法
- Python幾種加密演算法Python加密演算法
- 利用遺傳演算法庫DEAP優化交易策略演算法優化
- 使用MPI並行化遺傳演算法框架GAFT並行演算法框架
- 利用遺傳學演算法求解工作分配問題演算法