遺傳算法是對生物遺傳的模擬。在算法中,初始化壹個種群,種群中的每條染色體都是壹個解,我們通過自適應適應度來衡量這個解的好壞。並且它們被選擇、變異和交叉以找到最佳解決方案。
總結遺傳算法的基本步驟:
1.初始化壹個群體並評估對應於每個染色體的個體的適應度。
2.選擇、交叉和變異產生新的種群。
3.重新評估每個個體的適應值。如果適應值滿足要求或達到最大循環數,否則重復2繼續生成新種群。
了解了GA的大致流程後,我們再來詳細分析壹下細節,以及如何實現。
我們知道遺傳算法起源於生物遺傳,所以種群中的每個個體都是壹條染色體。那麽如何對染色體進行編碼,讓它代表我們的解(也就是把現實中要優化的參數編碼到壹條染色體中)。這裏我們遇到壹個編碼和解碼的問題。我們把需要優化的目標編碼成染色體,然後解碼成我們可以用來計算適應度的解。
參數優化壹般有兩種方式:實數編碼和二進制編碼。
實數編碼:基因直接用實數表示,相對簡單,不需要特殊解碼,但在交叉和變異時容易過早收斂,陷入局部最優。
二進制編碼:基因以二進制形式表示,參數值轉換為二進制形式,在交叉和變異時更容易操作,多樣性好,但占用存儲空間大,需要解碼。
染色體被稱為個體。對於壹個實驗來說,壹個個體就是壹個需要優化的解,很多這樣的個體就構成了壹個種群。
面對群體中如此多的個體,如何判斷個體的好壞是通過適應度函數,將解帶入適應度函數。適應值越大,解越好。
在遺傳算法中,怎樣才能讓裏面的個體變得越來越好?
核心思想是:擇優汰劣,為了產生更好的解,要盡量交叉變異,帶來新的解。
選擇就是從當前種群中選擇更好的個體,淘汰不好的個體。
常見的選擇方法有:輪盤賭選擇、錦標賽選擇、最佳保留地選擇等。
輪盤賭輪選擇是根據每個個體的適應度與種群所有適應度之和的比較,確定每個個體被選中的概率,然後進行n次選擇,形成新的種群,這是壹種放回抽樣的方式。
錦標賽是壹次從種群中選出m個個體,選擇最好的壹個,放入新的種群中,重復選擇,直到新種群中的個體數達到n。
最好的選擇是在輪盤賭的基礎上加入適應度個體到新種群中,因為輪盤賭是壹個概率模型,可能會出現最優秀的個體沒有進入新種群的情況。
選擇之後,需要考慮生成新的更好的解決方案,並為群體帶來新的血液。遺傳算法的思想是將兩個優秀的解交叉,往往會得到壹個好的解。
交叉:通過在選擇的群體中隨機選擇壹對父母,並交叉他們的染色體,產生壹個新的個體來代替原來的解。
常用的交會方法有:單點交會、多點交會等。
交叉就像生物體內的染色體交換基因壹樣~但並不是群體中的所有個體都交叉。當它實現時,我們可以設置壹個交叉率和交叉概率,在種群中隨機選擇兩個個體和壹個隨機數。如果小於交叉率,我們就進行交叉操作,根據交叉概率判斷交叉的程度,從而產生新的個體,否則我們就保留這兩個個體。
突變也是產生新個體的壹種方式。通過改變個體上的基因,有望產生更好的解決方案。例如,在有二進制代碼的個體中,二進制代碼中的0,1會發生變化,即0變1,1變0。還要考慮變異率和變異產生的新解是不可控的,可能是好的也可能是壞的,不能像交叉壹樣保證壹定的效果,所以變異率往往設置得比較小。