遺傳演算法入門(二)

2021-07-07 09:01:50 字數 2215 閱讀 7051

(一)遺傳演算法的特點

(二)遺傳演算法的應用

諸如尋路問題,8數碼問題,囚犯困境,動作控制,找圓心問題(在乙個不規則的多邊形中,尋找乙個包含在該多邊形內的最大圓圈的圓心),tsp問題,生產排程問題,人工生命模擬等。

問題的提出與解決方案

先考慮下面這個問題的解決辦法。

已知一元函式:

現在要求在既定的區間內找出函式的最大值  

極大值、最大值、區域性最優解、全域性最優解

在解決上面提出的問題之前有必要先澄清幾個以後將常常會碰到的概念:極大值、最大值、區域性最優解、全域性最優解。學過高等數學的人都知道極大值在乙個小鄰域裡面左邊的函式值遞增,右邊的函式值遞減,在上圖中的表現就是一 個「山峰」。當然,在圖上有很多個「山峰」,所以這個函式有很多個極大值。而對於乙個函式來說,最大值就是在所有極大值當中最大的那個。所以極大值具有區域性性,而最大值則具有全域性性。

因為遺傳演算法中每一條染色體對應著乙個解決方案,一般用適應性函式(fitness function)來衡量這個解決方案的優劣。所以從乙個基因組到其解的適應度形成乙個對映。所以也可以把遺傳演算法的過程看作是乙個在多元函式裡面求最優解的過程。在這個多維曲面裡面也有數不清的「山峰」,而這些最優解所對應的就是區域性最優解。而其中也會有乙個「山峰」的海拔最高的,那麼這個就是全域性最優解。而遺傳演算法的任務就是盡量爬到最高峰,而不是陷落在一些小山峰。(值得注意的是,遺傳演算法不一定要找「最高的山峰」,如果問題的適應度評價越小越好的話,那麼全域性最優解就是函式的最小值,對應的遺傳演算法所要找的就是「最深的谷底」)

「袋鼠跳」問題

把函式曲線理解成乙個個山峰和山谷組成的山脈,那麼可以設想所得到的每乙個解就是乙隻袋鼠,希望它們不斷的向著更高處跳去,直到跳到最高的山峰。所以求最大值的過程就轉化成乙個「袋鼠跳」的過程。下面介紹介紹「袋鼠跳」的幾種方式。

爬山法、模擬退火和遺傳演算法

解決尋找最大值問題的幾種常見的演算法:

1.爬山法(最速上公升爬山法)

從搜尋空間中隨機產生鄰近的點,從中選擇對應解最優的個體,替換原來的個體,不斷重複上述過程。因為只對「鄰近」的點作比較,所以目光比較「短淺」,常常只能收斂到離初始位置比較近的區域性最優解。對於存在很多區域性最優點的問題,通過乙個簡單的迭代找出全域性最優解的機會非常渺茫。

2.模擬退火

這個方法來自金屬熱加工過程的啟發。在金屬熱加工過程中,當金屬的溫度超過它的熔點(melting point)時,原子就會激烈地隨機運動。與所有的其它物理系統相類似,原子的這種運動趨向於尋找其能量的極小狀態。在這個能量的變遷過程中,開始時溫度非常高,使得原子具有很高的能量。隨著溫度不斷降低,金屬逐漸冷卻,金屬中的原子能量就越來越小,最後達到所有可能的最低點。利用模擬退火的時候,讓演算法從較大的跳躍開始,使得它有足夠的「能量」逃離可能「路過」的區域性最優解而不至於限制在其中,當它停在全域性最優解附近的時候,逐漸的減小跳躍量,以使其「落腳 」到全域性最優解上。

3.遺傳演算法

模擬物競天擇的生物進化過程,通過維護乙個潛在解的群體執行了多方向的搜尋,並支援這些方向上的資訊構成和交換。以麵為單位的搜尋比以點為單位的搜尋更能發現全域性最優解。

(三)遺傳演算法實現過程

遺傳演算法的實現過程實際上就像自然界的進化過程那樣。首先尋找一種對問題潛在解進行「數位化」編碼的方案。(建立表現型和基因型的對映關係)然後用隨機數初始化乙個種群(第一批袋鼠就被隨意地分散在山脈上),種群裡面的個體就是這些數位化的編碼。接下來通過適當的解碼過程之後

(得到袋鼠的位置座標)

,用適應性函式對每乙個基因個體作一次適應度評估。用選擇函式按照某種規定擇優選擇。讓個體基因交叉變異。然後產生子代。遺傳演算法並不保證你能獲得問題的最優解,但是使用遺傳演算法的最大優點在於你不必去了解和操心如何去「找」最優解,而只要簡單的「否定」一些表現不好的個體就行了。

總結出遺傳演算法的一般步驟

編碼,建立初始種群

種群中個體適應度計算

評估適應度

根據適應度選擇個體

被選擇個體進行交叉繁殖

在繁殖的過程中引入變異機制

繁殖出新的種群,

回到第二步

遺傳演算法入門

術語 1.基因 gene 是串中的元素 2.染色體 chromosome 是基因的集合,為乙個解 3.基因組 genome 也稱為個體 4.群體 population 是基因組的集合 5.適應度 fitness 表示個體對環境的適應程式 6.雜交率 crossover rate 用來確定兩個染色體進...

遺傳演算法入門(一)

一 遺傳演算法簡介 遺傳演算法的概念最早是由 bagley j.d 於1967年提出,後來michigan大學的 j.h.holland 教授於1975年開始對遺傳演算法的機理進行系統化的研究。遺傳演算法是受達爾文演化論啟發,借鑑生物進化過程而提出的一種啟發式搜尋演算法,它是對達爾文生物進化理論的簡...

遺傳演算法(二) 編碼

在實現遺傳演算法時,首要遇到的關鍵問題就是編碼 encode 編碼的方法直接影響到了遺傳演算法的交叉運算元 變異運算元等遺傳運算元的運算,因此很大程度上決定了遺傳進化的效率。編譯碼過程圖示 編碼原則 下面主要總結一下最主流的一些編碼方法 含義 個體基因型使用二值符號集來構成,整個基因型是乙個二進位制...