遺傳演算法(genetic algorithm)是一類借鑑生物界的進化規律(適者生存、優勝劣汰遺傳機制)演化而來的隨機化搜尋方法。
其主要特點是直接對結構物件進行操作,不存在求導和函式連續性的限定;具有內在的隱並行性和更好的全域性尋優能力;採用概率化的尋優方法,能自動獲取和指導優化的搜尋空間,自適應地調整搜尋方向,不需要確定的規則。
染色體(chromosome)
染色體又可以叫做基因型個體(individuals),一定數量的個體組成了群體(population),群體中個體的數量叫做群體大小。
基因(gene)
基因是串中的元素,基因用於表示個體的特徵。例如有乙個串s=1011,則其中的1,0,1,1這4個元素分別稱為基因。它們的值稱為等位基因(alletes)。
基因地點(locus)
基因地點在演算法中表示乙個基因在串中的位置稱為基因位置(gene position),有時也簡稱基因位。基因位置由串的左向右計算,例如在串 s=1101 中,0的基因位置是3。
基因特徵值(gene feature)
在用串表示整數時,基因的特徵值與二進位制數的權一致;例如在串 s=1011 中,基因位置3中的1,它的基因特徵值為2;基因位置1中的1,它的基因特徵值為8。
適應度(fitness)
各個個體對環境的適應程度叫做適應度(fitness)。為了體現染色體的適應能力,引入了對問題中的每乙個染色體都能進行度量的函式,叫適應度函式. 這個函式是計算個體在群體中被使用的概率。
遺傳演算法是基於生物學的,理解或程式設計都不太難。下面是遺傳演算法的一般演算法:
1建立乙個隨機的初始狀態
初始種群是從解中隨機選擇出來的,將這些解比喻為染色體或基因,該種群被稱為第一代,這和符號人工智慧系統的情況不一樣,在那裡問題的初始狀態已經給定了。
2評估適應度
對每乙個解(染色體)指定乙個適應度的值,根據問題求解的實際接近程度來指定(以便逼近求解問題的答案)。不要把這些「解」與問題的「答案」混為一談,可以把它理解成為要得到答案,系統可能需要利用的那些特性。
3繁殖(包括子代突變)
帶有較高適應度值的那些染色體更可能產生後代(後代產生後也將發生突變)。後代是父母的產物,他們由來自父母的基因結合而成,這個過程被稱為「雜交」。
4下一代
如果新的一代包含乙個解,能產生乙個充分接近或等於期望答案的輸出,那麼問題就已經解決了。如果情況並非如此,新的一代將重複他們父母所進行的繁衍過程,一代一代演化下去,直到達到期望的解為止。
非常容易將遺傳演算法用到平行計算和群集環境中。一種方法是直接把每個節點當成乙個並行的種群看待。然後有機體根據不同的繁殖方法從乙個節點遷移到另乙個節點。另一種方法是「農場主/勞工」體系結構,指定乙個節點為「農場主」節點,負責選擇有機體和分派適應度的值,另外的節點作為「勞工」節點,負責重新組合、變異和適應度函式的評估。
編碼策略:二進位制編碼、格雷碼編碼、浮點編碼
選擇策略:1
輪盤賭選擇
選擇誤差較大
2隨機競爭選擇
比輪盤賭選擇較好
3最佳保留選擇
保證迭代終止結果為歷代最高適應度個體
4無回放隨機選擇
降低選擇誤差
5確定性選擇
選擇誤差更少、操作簡易
6柔性分段複製
有效防止基因缺失、但需要選擇引數
7自適應柔性分段式動態群體選擇
群體自適應變化、提高搜尋效率
8無回放式餘數隨機選擇
誤差最小
9均勻排序
與適應度大小差異程度正負無關
10穩態複製
保留父代中高度適應的串
11最優儲存策略
12排擠選擇
提高群體的多樣性
交叉運算元:
1單點交叉
標準遺傳演算法成員符號2
兩點交叉
使用較多符號3
均勻交叉
每一位以相同概率交叉符號4
多點交叉
交叉點大於2符號5
部分匹配交叉序號6
順序交叉序號7
迴圈交叉序號8
啟發式交叉序號9
基於位置交換
序號10
算數交換序號
變異運算元:1
基本位突變
標準遺傳演算法成員符號2
有效基因突變
避免有效基因缺失符號3
自適應有效基因突變
最低有效基因個數
自適應變化符號4
概率自調整突變
兩個串的相似性確定
突變概率符號5
均勻突變
每乙個實屬元素以相同的概率在域內變動實數6
非均勻突變
使整個向量在解空間輕微變動實數7
邊界突變
適用於最優解位於或者接近於可行解的邊界時的一類帶約束條件的問題實數8
高斯近似突變
提高對重點搜尋區域的區域性搜尋效能實數9
基零突變實數
適應度函式:
設計滿足條件:
1.單值·、連續、非負、最大化。
2.合理、一致性。要求適應度值反應對應解的優劣情況。
3.計算量小。
4.適用性強。
適應度尺度的變換:線性尺度變換、乘冪尺度變換、指數尺度變換。
python遺傳演算法 Python 遺傳演算法實現
關於遺傳演算法 遺傳演算法是仿照自然界中生物進化而產生的一類優化演算法。個人感覺遺傳演算法簡單粗暴,適應性廣。關於遺傳演算法的介紹網上有很多了,這裡按照我自己的理解簡單概括一下。編碼解碼,將待優化的引數編碼為dna序列,最簡單直接的為二進位制編碼 即有兩種鹼基的dna鏈 生成隨機初代 選擇,適應度 ...
遺傳演算法 python 簡書 遺傳演算法
優化的演算法有很多種,從最基本的梯度下降法到現在的一些啟發式演算法,如遺傳演算法 ga 差分演化演算法 de 粒子群演算法 pso 和人工蜂群演算法 abc 舉乙個例子,遺傳演算法和梯度下降 梯度下降和遺傳演算法都是優化演算法,而梯度下降只是其中最基礎的那乙個,它依靠梯度與方向導數的關係計算出最優值...
遺傳演算法簡介
把電腦科學與演化論結合起來的嘗試始於50年代末,但由於缺乏一種通用的編碼方案 人們只能依賴變異而非交配來產生新的基因結構,故而收效甚微。到60年代中期,美 國michigan大學的john hol land在a s fraser和h j bremermann等人工作的基礎 上提出了位串編碼技術。這種...