一、遺傳算法原理介紹
遺傳算法(Genetic Algorithm)是模擬達爾文生物進化論的自然選擇和遺傳學機理的生物進化過程的計算模型,是一種通過模擬自然進化過程搜索最優解的方法。遺傳算法是從代表問題可能潛在的解集的一個種群(population)開始的,而一個種群則由經過基因(gene)編碼的一定數目的個體(individual)組成。每個個體實際上是染色體(chromosome)帶有特征的實體。染色體作為遺傳物質的主要載體,即多個基因的集合,其內部表現(即基因型)是某種基因組合,它決定了個體的形狀的外部表現,如黑頭發的特征是由染色體中控制這一特征的某種基因組合決定的。因此,在一開始需要實現從表現型到基因型的映射即編碼工作。由於仿照基因編碼的工作很復雜,我們往往進行簡化,如二進制編碼,初代種群產生之后,按照適者生存和優勝劣汰的原理,逐代(generation)演化產生出越來越好的近似解,在每一代,根據問題域中個體的適應度(fitness)大小選擇(selection)個體,並借助於自然遺傳學的遺傳算子(genetic operators)進行組合交叉(crossover)和變異(mutation),產生出代表新的解集的種群。這個過程將導致種群像自然進化一樣的后生代種群比前代更加適應於環境,末代種群中的最優個體經過解碼(decoding),可以作為問題近似最優解。[1]
簡單而言,遺傳算法是一種模擬自然界生物進化過程,通過不斷試錯和篩選得到最優解的算法。
二、遺傳算法的計算機表達
在對遺傳算法的流程進行介紹前,本節將以字符編碼方式為例對如何以計算機語言表達種群、個體等生物概念進行介紹。
2.1 個體、染色體、基因
個體是由染色體組成的帶有特定屬性的實體,一般而言,為了簡化概念,我們認為一個個體由一條染色體組成,兩者相互等價。因此,在后文中個體與染色體統一稱為染色體。
由生物知識可知,染色體由一個個獨立的基因組成,為了在計算機中表達這一概念,我們建立一維數組代表染色體,數組內每一個元素代表一個基因。如圖2.1所示:

圖2.1 染色體的計算機表達(字符編碼)
圖2.1左側為A、B、C三條獨立的染色體,其內部的字符代表其所在位置的基因。在此,我們采用一種偽16進制的字符編碼方式對基因進行表達。字符取值范圍為1~10、A~F共16個值,A~F分別表示11~16。
注:此處並非真正的16進制,僅是一種為了表達兩位數以上基因且便於理解而設置的偽16進制表示方法。之所以不使用整形變量數組,習慣使然。
圖2.1右側為染色體的計算機表達,按照從左到右的次序,其基因作為元素被儲存在數組中。一般來說,為了便於計算和存儲,我們認為所有染色體的長度都相同,在程序中可以聲明一個全局常量lengthOfChromosome用以表達。
2.2 種群

圖2.2 種群的計算機表達(字符編碼)
由第一節給出的定義可知,種群是個體的集合,因此,相對於使用一維數組表達的染色體,我們使用二維數組表達由多個染色體組成的種群,如圖2.2右側。行號代表染色體編號,列號代表染色體內基因編號。
注:2.1中假定染色體長度固定的作用便體現在此,由於染色體長度固定,我們很容易就可以建立起由二維數組表達的種群。
2.3 變異——基因重組、基因突變
在生物概念中,變異包括基因重組、基因突變、染色體變異在內。由於基因突變與染色體變異作用類似,為了簡化算法,僅選取基因重組、基因突變兩種進行表達。首先,對基因重組與基因突變的意義做出解釋。
基因突變:基因突變是生物變異的根本來源,為生物的進化提供了原材料。[2]
基因重組:基因重組可以產生多種多樣的基因組合的子代,其中有一些子代會含有適應某種環境變化的基因組合。所以說,基因重組是生物變異的來源之一,是形成生物多樣性的重要原因,對生物的進化具有重要的意義。[2]
簡單地說,基因突變保證種群能夠出現新的基因型,是進化的根本保障;而基因重組為提高種群內生物多樣性提供了條件,為種群的進化提供了足夠多的試錯樣本。
2.3.1 基因重組——單點互換、基因移位(並非嚴謹稱呼,請勿與生物學術概念等同)
2.3.1.1 單點互換
單點互換即在染色體中選擇任意兩個不同位置的基因進行交換,達到互換位置的目的。示意圖如下:

圖2.3.1.1 單點互換的計算機表達(字符編碼)
由上圖可以看出,A染色體左數第二個基因與左數第五個基因發生單點交換得到染色體A'。在算法中則體現為,字符數組A第二個元素與第五個元素的值發生交換。
2.3.1.2 基因移位
顯而易見,一次單點換位最多只改變兩個基因的位置,這給染色體帶來的變化並不大。當我們要求每次變異染色體都能發生足夠大的變化,該怎么做呢?這時,可以使用基因移位的辦法。仍以染色體A為例,如圖所示:

圖2.3.1.2 基因移位的計算機表達(字符編碼)
如上圖所示,我們隨機選取染色體A內任意基因,並將其插入到原染色體除基因初始位置以外的任意位置。通過這種方式,我們能夠給染色體帶來基因序列的較大變化。
注:根據應用場景和規則限制的不同,參與基因移位的基因數可以是多個,例如染色體A中8、6兩個基因同時插入到染色體其他位置。不過,在特定情況下,基因移位給染色體基因序列帶來的變化與單點互換接近,這將在4.1應用實例中進行解釋。
2.3.2 基因突變

圖2.3.2 基因突變的計算機表達(字符編碼)
在生物概念中,基因突變式發生在基因層面的改變,會產生一個新的基因,這正是自然種群變異的根本來源。在遺傳算法中,由於基因往往具備特定的意義(任務、判斷選擇等),我們不可能產生一個不存在於既定基因取值范圍(1~F)外的基因。因此,在遺傳算法中,基因突變僅產生既定取值范圍內的基因。如上圖,基因8由於基因突變變成基因1,反映在計算機中則體現為元素值的改變。
2.4 適應度fitness
適應度(fitness)即在特定評價標准下各種群的指標值,在不同應用環境下結果不同。在此僅簡述定義,4.1應用實例將給出一個實例。
2.5 選擇——輪盤賭法
為了模擬自然界“物競天擇,適者生存”的選擇過程,我們選擇輪盤賭法進行模擬。
輪盤賭法的實質是一種基於概率的選擇算法,參與選擇的個體被選中的概率與其適應度正相關。設染色體A、B、C的適應度分別為6、3、13,得到輪盤如下圖所示。

圖2.5-1 輪盤示意圖
在得到輪盤概率分布后,我們可以通過概率累加建立一條取值范圍為[0,1)的線段。如下圖:

圖2.5-2 概率累加直線示意圖
在算法中,我們可以通過隨機生成一個0~1的隨機數,若隨機數為0.15,則落在[0,0.27)區域,這表示染色體A被選擇出來。由於被選取概率與染色體適應度成正比,在統計規律上,適應度高的個體具有更高的可能性被選擇出來,從而達到優勝劣汰的目的。
2.6 改進的選擇方式——精英染色體
在遺傳算法的實際應用中,由於輪盤賭法的隨機性較大,種群進化的速度並不快。為了提高種群進化的速度,我們通過人為保留適應度較高的染色體的方式加速這一過程,這些被留下的染色體被稱為精英染色體。示意圖如下:

圖2.6 精英染色體示意圖
假設父代種群包含A、B、C三條染色體,在篩選出精英染色體C后,原種群發生變異,得到新的種群A'、B'、C',新的種群經過輪盤賭篩選得到兩個新染色體,與精英染色體C組成子代種群。通過這種方法,能夠確保每一代種群最優秀的染色體得以保留,從而提高種群進化速度。
三、遺傳算法流程介紹

圖3 遺傳算法流程圖
四、應用實例
待補充
參考文獻:
[1] 遺傳算法,百度百科
[2] 生物(必修二),人教版
