建模方法(五) 遺傳演算法的定義和應用

2021-08-25 08:59:25 字數 2112 閱讀 7402

遺傳演算法(genetic algorithm)是從達爾文生物演化論中「適者生存」衍生出的演算法,是對進化的模擬。它可以應用於tsp問題,組合優化問題等。拿tsp問題來說,我們將n個地點排成乙個解(1,2...n),這個解相當於生物演化論中的個體,解的不斷優化越來越靠近最優值時,相當於個體的進化過程使得個體更加適應他所處的環境,而個體的進化是包含基因突變,交配遺傳和選擇這些過程,在遺傳演算法中,解要靠近最優值它也需要「突變」,「交配」和「選擇」,這裡的突變交配選擇對應的可能是將(1,2...n)中的某個子串進行了顛倒,如果他更適應環境(即耗費更小)就說明他更接近最優值,我們就希望把這個適應度高的個體進行遺傳給子代。實質是遺傳演算法就是對窮舉法進行了優化,他搜尋的方向更具目的性。遺傳演算法的效能由初始解的產生、雜交演算法和變異運算元決定。其中雜交運算元和變異運算元起著決定性的作用。它和模擬退火演算法一樣都是搜尋啟發式演算法的一種。

遺傳演算法的運算物件是表示個體的符號串,如上訴(1,2,...n)。個體就表示乙個可行解。

遺傳演算法是對群體進行的進化操作,需要給其淮備一些表示起始搜尋點的初始群體資料,即隨機多個個體。進化就需要選擇運算,交叉運算和變異運算。下面分別介紹。

在介紹之前還是要知道表示個體的字串的生成方式(叫做個體的編碼),編碼就是為了計算機能夠操作方便,占用資源少(如記憶體資源),乙個基因型即字串和乙個表現型即個體是一一對應的。常用以下方法進行編碼:

基於二進位制的編碼是一種傳統的編碼方式,那tsp問題來舉例。例如現在有6個地點的乙個序列或者說是解{1,2,3,4,5,6},這是自變數的取值也即表現型,而001 010 011 100 101 110則是基因型即編碼。基因型很明顯可以和表現型之間相互轉化,即使用二進位制<->十進位制轉化即可。但是這種方式的編碼,在經過遺傳操作以後很難保證後代還是乙個可行解,還需要另外的修正操作;基於矩陣的編碼、鄰接的編碼以及索引的編碼均比較複雜,並且需要占用大量的記憶體,應用的不是很廣泛;目前最普遍用的編碼方式就是基於路徑的編碼方式,因為它最直觀最容易理解,操作起來也比較方便,比如tsp問題就可以使用此類方法。

選擇運算:遺傳演算法中以個體適應度的大小來評定各個個體的優劣程度,從而決定其遺傳機會的大小。個體適應度與待解決問題的目標函式有關。把當前群體中適應度較高的個體按某種規則或模型遺傳到下一代群體中。一般要求適應度較高的個體將有更多的機會遺傳到下一代群體中。例如我們採用與適應度成正比的概率來確定各個個體複製到下一代群體中

的數量即使用輪盤賭的選擇方法。其具體操作過程是:

•  先計算出群體中所有個體的適應度的總和;

•  其次計算出每個個體的相對適應度的大小 即佔總和的比值,它即為每個個體被遺傳

到下一代群體中的概率,

•  每個概率值組成乙個區域,全部概率值之和為1;

•  最後再產生乙個0到1之間的隨機數,依據該隨機數出現在上述哪乙個概率區

域內來確定各個個體被選中的次數。

交叉運算:交叉運算是遺傳演算法中產生新個體的主要操作過程,它以某一概率相互交換某兩個個體之間的部分染色體。交叉運算元有很多,對於不同問題,不同的交叉運算元對遺傳演算法的效能影響不同。如tsp問題是一類順序排列問題,這類問題中,鄰域資訊有非常重要的作用,而位置資訊影響不大。因此在設計雜交運算元時,若考慮到保留較多的鄰域資訊(保持乙個排列中地點之間的相對位置),那麼肯定有更好的效能。tsp問題常用的交叉運算元有er、ox1、pos、ox2。我們使用乙個簡單例子,來說明交叉運算的過程,例如

採用單點交叉的方法,其具體操作過程是:

• 先對群體進行隨機配對;

• 其次隨機設定交叉點位置;

• 最後再相互交換配對染色體之間的部分基因。

變異運算: 變異運算是對個體的某乙個或某一些基因座上的基因值按某一較小的概率進行改變,它也是產生新個體的一種操作方法。變異運算元也很多,對於不同問題效能不同。可能問題的要求是允許在個體中出現重複值而像tsp就不允許,所以運算元肯定不同,可以自己設計。對於tsp問題的常用變異運算元有dm、ivm、ism.我們還是用乙個簡單例子介紹變異運算過程。例如在二進位制編碼中我們採用基本位變異的方法來進行變異運算,其具體操作過程是:

• 首先確定出各個個體的基因變異位置,下表所示為隨機產生的變異點位置,

其中的數字表示變異點設定在該基因座處;

• 然後依照某一概率將變異點的原有基因值取反。

對群體p(t)進行一輪選擇、交叉、變異運算(先選擇再交叉,最後變異)之後可得到新一代的群體p(t+1)。      然後繼續迭代,直到出現達到我們要求的解。      

遺傳演算法的簡單應用

遺傳演算法採用概率化的尋優方法,在大範圍內對解進行優化,不限於區域性。遺傳演算法擅長解決全域性最優化問題。基本過程可以是 1 隨機產生第一代個體 2 計算第一代個體的適應度 3 迴圈 達到某個條件跳出 1 0根 據適應度 從這一代 中挑選下 一代的父 母1 0根據適應度從這一代中挑選下一代的父母 1...

遺傳演算法的C 實現及應用

以下 實現了乙個簡單的花朵進化的模擬過程。花朵的種群數量是10,共進化了50代。通過執行程式,你會發現通過不斷的進化,種群的總的適應環境的能力在逐步提高 fitness的值下降 實現 using system using system.collections.generic using system...

遺傳演算法在黑盒測試中的應用

在軟體測試中,黑盒測試主要是針對模組進行的功能測試。最普遍的方法是以軟體的功能說明書為基礎將軟體的輸入劃分為若干個等價類,多次執行該軟體來檢驗軟體對於不同的等價類是否能滿足要求。但是在實際應用中,有的模組太大或輸入引數太多,等價類劃分後需要進行的測試工作可能是乙個極大的任務。這時,如何選擇最優的測試...