① 進化演算法的差分演算法
差分進化演算法(Differential Evolution, DE)是一種新興的進化計算技術,或稱為差分演化演算法、微分進化演算法、微分演化演算法、差異演化演算法。它是由Storn等人於1995年提出的,最初的設想是用於解決切比雪夫多項式問題,後來發現DE也是解決復雜優化問題的有效技術。DE與人工生命,特別是進化演算法有著極為特殊的聯系。
差分進化演算法是基於群體智能理論的優化演算法,通過群體內個體間的合作與競爭產生的群體智能指導優化搜索。但相比於進化演算法,DE保留了基於種群的全局搜索策略,採用實數編碼基於差分的簡單變異操作和一對一的競爭生存策略,降低了遺傳操作的復雜性。同時,DE特有的記憶能力使其可以動態跟蹤當前的搜索情況,以調整其搜索策略,具有較強的全局收斂能力和魯棒性,且不需要藉助問題的特徵信息,適於求解一些利用常規的數學規劃方法所無法求解的復雜環境中的優化問題。
差分進化演算法是一種基於群體進化的演算法,具有記憶個體最優解和種群內信息共享的特點,即通過種群內個體間的合作與競爭來實現對優化問題的求解,其本質是一種基於實數編碼的具有保優思想的貪婪遺傳演算法。
DE是一種用於優化問題的啟發式演算法。本質上說,它是一種基於實數編碼的具有保優思想的貪婪遺傳演算法 。同遺傳演算法一樣,DE包含變異和交叉操作,但同時相較於遺傳演算法的選擇操作,DE採用一對一的淘汰機制來更新種群。由於DE在連續域優化問題的優勢已獲得廣泛應用,並引發進化演算法研究領域的熱潮。
DE由Storn 以及Price提出,演算法的原理採用對個體進行方向擾動,以達到對個體的函數值進行下降的目的,同其他進化演算法一樣,DE不利用目標函數的梯度信息,因此對目標的可導性甚至連續性沒有要求,適用性很強。同時,演算法與粒子群優化有相通之處 ,但因為DE在一定程度上考慮了多變數間的相關性,因此相較於粒子群優化在變數耦合問題上有很大的優勢。演算法的實現參考實現代碼部分。
② 進化演算法的簡介
進化演算法包括遺傳演算法、遺傳規劃、進化規劃和進化策略等等。進化演算法的基本框架還是簡單遺傳演算法所描述的框架,但在進化的方式上有較大的差異,選擇、交叉、變異、種群控制等有很多變化,進化演算法的大致框圖可描述如右圖所示:
同遺傳演算法一樣,進化演算法的收斂性也有一些結果,文獻證明了在保存最優個體時通用的進化計算是收斂的,但進化演算法的很多結果是從遺傳演算法推過去的。
遺傳演算法對交叉操作要看重一些,認為變異操作是演算法的輔助操作;而進化規劃和進化策略認為在一般意義上說交叉並不優於變異,甚至可以不要交叉操作。
③ 優化演算法筆記(七)差分進化演算法
(以下描述,均不是學術用語,僅供大家快樂的閱讀)
差分進化演算法(Differential Evolution Algorithm,DE)是一種基於群體的進化演算法,它模擬了群體中的個體的合作與競爭的過程。演算法原理簡單,控制參數少,只有交叉概率和縮放比例因子,魯棒性強,易於實現。
差分進化演算法中,每一個個體的基因表示待求問題的一個候選解。每次迭代將先進行變異操作,選擇一個或多個個體的基因作為基,然後選擇不同的個體的差分來構成差分基因,最後將作為基的基因與差分基因相加來得出新的個體。交叉操作將新的個體將於父代的對應個體交叉,然後進行選擇操作,比較交叉後的個體與父代的對應個體,選擇較優的個體保留至下一代。在迭代完成之後將選擇種群中最優個體的基因作為解。
差分進化演算法可以算是我所使用過的優化演算法中大魔王級別的演算法,雖然它每個方面都沒有強到離譜,但是綜合起來的效果好於大多數演算法。它就像一個每個科目都能考到90分(百分制)的學生,雖然沒門課都不是最優秀的,但是論綜合,論總分,它有極大的概率是第一名。
在我研究優化演算法的小路上,我的目標就是找到一個能打敗大魔王或是能在大多數方面壓制魔王的演算法。
這次的主角就選魔王軍吧(或者蟻王軍,為了與蟻群演算法區別還是叫魔王軍吧),個體則稱之為魔王兵。
魔王兵的能力取決於它們的基因,它們可以根據環境或者需要改變自己的基因使得自己更加強大,更方便的處理問題,問題的維度與基因維度相同。
表示第i個魔王兵在進化了第t次後的基因,該個體有D位基因。
與遺傳演算法同為進化演算法的差分進化演算法,它們的操作(運算元)也都非常相似的,都是交叉,變異和選擇,流程也幾乎一樣(遺傳演算法先交叉後變異,差分進化演算法先變異後交叉)。
說到差分進化演算法中的變異,我就想到一句論語 「三人行,必有我師焉。擇其善者而從之,其不善者而改之。」 ,其實這句論語已經向我們說明了差分進化演算法的整個流程:
「三人行,必有我師焉」——變異,交叉。
「擇其善者而從之,其不善者而改之」——選擇。
差分進化演算法中,當一個魔王兵變異時,它會先找來3個小夥伴,當然是隨機找來3個小夥伴,避免同化。在一個小夥伴的基因上加上另外兩個小夥伴基因之差作為自己的目標基因。其變異公式如下:
表示第i個魔王兵找到了編號為r1、r2和r3的三個魔王兵,當然了i、r1、r2、r3為互不相同的整數,F為縮放比例因子,通常 ,一般取F=0.5。 為第i個魔王兵交叉後的目標基因圖紙,不過這是個半成品,再經過交叉後,目標基因圖紙才算完成。
其實現在我們已經有了5個基因圖紙了 ,接下來將進行交叉操作。由於變異操作,差分進化演算法的種群中個體數至少為4,即魔王軍中至少有4個小兵。
交叉操作中,魔王兵i會將目標基因圖紙 進行加工得到 ,加工過程如下:
其中 。 為交叉概率,其值越大,發生交叉的概率越大,一般取 。 為{1,2,…,D}中的隨機整數,其作用是保證交叉操作中至少有一維基因來自變異操作產生的基因,不能讓交叉操作的努力白費。
從公式上可以看出交叉操作實際上是從變異操作得出的基因圖紙上選擇至少一位基因來替換自己的等位基因,得到最終的基因圖紙。
選擇操作相對簡單,魔王兵i拿到了最終的基因圖紙 ,大喊一聲,進化吧,魔王兵i的基因改變了。它拿出了能力測量器fitness function,如果發現自己變強了,那麼就將基因 保留到下一代,否則它選擇放棄進化,讓自己還原成 。
實驗又來啦,還是那個實驗 ,簡單、易算、好畫圖。
實驗1 :參數如下
圖中可以看出在第20代時,群體已經非常集中了,在來看看最終得出的結果。
這結果真是好到令人發指,惡魔在心中低語「把其他的優化演算法都丟掉吧」。不過別往心裡去,任何演算法都有優缺點,天下沒有免費的午餐,要想獲得某種能力必須付出至少相應的代價。
實驗2:
將交叉率CR設為0,即每次交叉只選擇保留一位變異基因。
看看了看圖,感覺跟實驗1中相比沒有什麼變化,那我們再來看看結果。
結果總體來說比實驗1好了一個數量級。為什麼呢?個人感覺應該是每次只改變一位基因的局部搜索能力比改變多位基因更強。下面我們將交叉率CR設為1來看看是否是這樣。
實驗3:
將交叉率CR設為1,即每次交叉只選擇保留一位原有基因。
實驗3的圖與實驗1和實驗2相比好像也沒什麼差別,只是收斂速度好像快了那麼一點點。再來看看結果。
發現結果比實驗2的結果還要好?那說明了實驗2我得出的結論是可能是錯誤的,交叉率在該問題上對差分進化演算法的影響不大,它們結果的差異可能只是運氣的差異,畢竟是概率演算法。
實驗4:
將變異放縮因子設為0,即變異只與一個個體有關。
收斂速度依然很快,不過怎麼感覺結果不對,而且個體收斂的路徑好像遺傳演算法,當F=0,時,差分進化演算法退化為了沒有變異、選擇操作的遺傳演算法,結果一定不會太好。
果然如此。下面我們再看看F=2時的實驗。
實驗5:
將變異放縮因子設為2。
實驗5的圖可以明顯看出,群體的收斂速度要慢了許多,到第50代時,種群還未完全收斂於一點,那麼在50代時其結果也不會很好,畢竟演算法還未收斂就停止進化了。
結果不算很好但也算相對穩定。
通過上面5個實驗,我們大致了解了差分進化演算法的兩個參數的作用。
交叉率CR,影響基因取自變異基因的比例,由於至少要保留一位自己的基因和變異的基因導致CR在該問題上對演算法性能的影響不大(這個問題比較簡單,維度較低,影響不大)。
變異放縮因子F,影響群體的收斂速度,F越大收斂速度越慢,F絕對值越小收斂速度越快,當F=0是群體之間只會交換基因,不會變異基因。
差分進化演算法大魔王已經如此強大了,那麼還有什麼可以改進的呢?當然有下面一一道來。
方案1 .將3人行修改為5人行,以及推廣到2n+1人行。
實驗6:
將3人行修改為5人行,變異公式如下:
五人行的實驗圖看起來好像與之前並沒有太大的變化,我們再來看看結果。
結果沒有明顯提升,反而感覺比之前的結果差了。反思一下五人行的優缺點,優點,取值范圍更大,缺點,情況太多,減慢搜索速度。
可以看出演算法的收斂速度比之前的變慢了一點,再看看結果。
比之前差。
差分進化演算法的學習在此也告一段落。差分進化演算法很強大,也很簡單、簡潔,演算法的描述都充滿了美感,不愧是大魔王。不過這里並不是結束,這只是個開始,終將找到打敗大魔王的方法,讓新的魔王誕生。
由於差分進化演算法足夠強,而文中實驗的問題較為簡單導致演算法的改進甚至越改越差(其實我也不知道改的如何,需要大量實驗驗證)。在遙遠的將來,也會有更加復雜的問題來檢驗魔王的能力,總之,後會無期。
以下指標純屬個人yy,僅供參考
目錄
上一篇 優化演算法筆記(六)遺傳演算法
下一篇 優化演算法筆記(八)人工蜂群演算法
優化演算法matlab實現(七)差分進化演算法matlab實現
④ 什麼是進化演算法
應該就是遺傳演算法。求解的一種方式而已。假設有多個比較好的解,則可以通過雜交,單個的話可以通過變異。還是參考下維基網路或者其他專業書籍比較好
⑤ 進化演算法的介紹
進化演算法,或稱「演化演算法」 (evolutionary algorithms, EAs) 是一個「演算法簇」,盡管它有很多的變化,有不同的遺傳基因表達方式,不同的交叉和變異運算元,特殊運算元的引用,以及不同的再生和選擇方法,但它們產生的靈感都來自於大自然的生物進化。與傳統的基於微積分的方法和窮舉法等優化演算法相比,進化計算是一種成熟的具有高魯棒性和廣泛適用性的全局優化方法,具有自組織、自適應、自學習的特性,能夠不受問題性質的限制,有效地處理傳統優化演算法難以解決的復雜問題。
⑥ 多目標進化演算法簡介
姓名:劉一婷;學號:20021210599;學院:電子工程學院
轉自https://blog.csdn.net/sinat_33231573/article/details/80271522
【嵌牛導讀】
在實際問題中大都具有多個目標且需要同時滿足,即在同一問題模型中同時存在幾個非線性目標,而這些目標函數需要同時進行優化處理,並且這些目標又往往是互相沖突的,進化演算法的特性往往能很好的解決此類問題。
【嵌牛鼻子】多目標,進化演算法
【嵌牛提問】多目標優化和多任務優化的區別?
【嵌牛正文】
1、多目標優化的基本概念
多目標優化問題(MOP)可以被表示為:
subject to
其中, ,Ω是決策空間, 由m個目標函數組成, 稱為目標空間。可達到的目標集合被定義為 。很多時候,由於目標彼此矛盾,Ω中的任何一點都不能同時最大化所有目標,所以我們必須平衡這些目標。目標之間的最佳折衷解可以根據Pareto最優性來定義。
Pareto支配:
Pareto最優解:
Pareto最優解集:
Pareto前沿面:
2、多目標進化演算法的基本流程
多目標進化演算法的種類很多,可以依據某一特徵將它們分門別類。基於不同的選擇機制,我們可以對其進行分類:
(1) 基於Pareto的方法(Pareto-based Approaches)
(2) 基於群體的方法(Population-based Approaches)
(3) 聚集函數(AggregatingFunctions)
為了深入理解進化演算法,我們給出了基於Pareto的MOEA的基本流程,如圖2.1所示。首先初始化種群P,然後選擇某一個進化演算法(如基於分解的多目標進化演算法,MOEA/D)對P執行進化操作(如選擇、交叉、突變),得到新的種群R。然後構造P∪R的最優解集Nset,我們將最優解集的大小設置為N,如果當前最優解集Nset的大小與N的大小不一致,那麼我們需要調整Nset的大小,同時必須注意調整過後的Nset需要滿足分布性要求。之後判斷演算法終止條件是否已經被滿足,如果不滿足條件則將Nset中的個體復制到種群P中繼續下一輪的進化,否則結束。我們一般用演算法的迭代次數來控制它的執行。
在MOEA中,演算法收斂的必要條件同時也是一個極其重要的方面是保留上一代的最優解集並將其加入新一代的進化過程。這樣進化下去,進化種群的最優解集不斷向真正的Pareto前沿面收斂,最終得到令人滿意的進化結果。
3、多目標優化問題測試集
測試函數可以幫助我們更好地理解演算法的優點和缺點,因此測試函數的選擇對演算法性能的理解與判斷尤為重要。構造的簡單性、對決策變數和目標數目的可擴展性以及對應於演算法的收斂性與多樣性均要設障等是選擇測試函數時的重要參考依據。DTLZ測試集與WFG測試集是兩個經常使用的多目標優化問題測試函數集。
Deb等人在2002年首次提出DTLZ測試函數集,並以共同研究者名字首字母命名(Deb,Thiele,Laumanns,Zitzler),根據不同難度的設置期望,2005年Deb等又在原有七個函數的基礎上加入了兩個測試函數,共同組成了DTLZ測試函數集。DTLZ測試函數集可以擴展至任意數量的目標(m>=2)並且可以有任意數目個變數(n>=m)。因為變數數與目標數易於控制,所以DTLZ函數集被廣泛應用於多目標優化問題當中作為標准測試函數。
WFG測試函數集是Huband等人在2006年提出來的,一共包含9個測試問題,這些問題的目標數目都可以擴展到任意數量。和DTLZ測試函數集比起來,DTLZ問題的變數都是可分離的,因此復雜程度不高,而WFG測試問題的復雜程度更高、處理起來更具有挑戰性。WFG測試問題的屬性包括可分性或者不可分性、單峰或者多峰、PF形狀為凸或者非凸、無偏差參數或有偏差參數。WFG測試函數集可以提供更有效的依據來評估優化演算法在各種不同問題上的表現性能。
4、演算法性能評價指標
通常在分析MOEA的性能時,我們希望演算法在以下三個方面能夠具有較好的性能。
(1) 真實的Pareto前沿面PFtrue與演算法求解的得出的PFknown與之間的距離應該最小。
(2) 盡管搜索到的解點只是部分解,但最後求得的解點在Pareto最優解集中該均勻分布,在Pareto前沿面上的點也盡量呈現均勻分布。
(3) 在整個前沿上應該能夠找出大量的解點,並且前沿上的各區域都應該有解點來代表,除非PFtrue上缺少這一區域。
我們一般認為上述指標當中的第一條是最重要的,因為MOEA的目標是找到一組近似解與真實前端的距離最近。
反向世代距離(Inverted GenerationalDistance):代表真實且均勻分布的Pareto最優解集P* 到演算法得到的最優解集P 的平均距離,定義如下:
其中,種群P中個體到個體v之間的最小歐幾里德距離用d(v,P)來表示;在真實PF上均勻選取一定數目的個體並將其用P*表示;該演算法求得的最優解集用P表示。IGD為演算法綜合性能評價指標,反映了演算法的分布性和收斂性,它是越小越好的。IGD值很小,說明演算法求得的最優解集的分布性和收斂性都好。
超體積HV(Hypervolume):超體積指標度量的是通過多目標優化演算法獲得的非支配解集與參照點圍成的目標空間中的維區域的體積。超體積的數學表示如下:
其中δ代表Lebesgue測度,用來測量體積。|S|表示非支配解集的數目,vi表示參照點z*與解集中第i個解構成的超立方體。HV是一個有效的一元質量度量指標,在Pareto支配方面是嚴格單調的,HV的值越大,表示對應演算法的性能越好。此外,HV指標的計算不需要測試問題的理想PF,這一點在實踐應用中大大方便了HV的使用。不過,HV指標存在兩點限制:1)超體積的計算成本高;2)HV的值受選擇的參照點影響大。
⑦ 人工智慧之進化演算法
進化計算的三大分支包括:遺傳演算法(Genetic Algorithm ,簡稱GA)、進化規劃(Evolu-tionary Programming,簡稱EP)和進化策略(Evolution Strategies ,簡稱ES)。這三個分支在演算法實現方面具有一些細微的差別,但它們具有一個共同的特點,即都是藉助生物進化的思想和原理來解決實際問題。
遺傳演算法是一類通過模擬生物界自然選擇和自然遺傳機制的隨機化搜索演算法,由美國Holand J教授於1975年首次提出。它是利用某種編碼技術作用於稱為染色體的二進制數串,其基本思想是模擬由這些串組成的種群的進化過程,通過有組織的、然而是隨機的信息交換來重新組合那些適應性好的串。遺傳演算法對求解問題的本身一無所知,它所需要的僅是對演算法所產生的每個染色體進行評價,並根據適應性來選擇染色體,使適應性好的染色體比適應性差的染色體有更多的繁殖機會。遺傳演算法尤其適用於處理傳統搜索方法難於解決的復雜的非線性問題,可廣泛用於組合優化、機器學習、自適應控制、規劃設計和人工生命等領域,是21世紀有關智能計算中的關鍵技術之一。
1964年,由德國柏林工業大學的RechenbergI等人提出。在求解流體動力學柔性彎曲管的形狀優化問題時,用傳統的方法很難在優化設計中描述物體形狀的參數,然而利用生物變異的思想來隨機地改變參數值並獲得了較好效果。隨後,他們便對這種方法進行了深入的研究和發展,形成了進化計算的另一個分支——進化策略。
進化策略與遺傳演算法的不同之處在於:進化策略直接在解空間上進行操作,強調進化過程中從父體到後代行為的自適應性和多樣性,強調進化過程中搜索步長的自適應性調節;而遺傳演算法是將原問題的解空間映射到位串空間之中,然後再施行遺傳操作,它強調個體基因結構的變化對其適應度的影響。
進化策略主要用於求解數值優化問題。
進化規劃的方法最初是由美國人Fogel LJ等人在20世紀60年代提出的。他們在人工智慧的研究中發現,智能行為要具有能預測其所處環境的狀態,並按照給定的目標做出適當的響應的能力。在研究中,他們將模擬環境描述成是由有限字元集中符號組成的序列。
進化演算法與傳統的演算法具有很多不同之處,但其最主要的特點體現在下述兩個方面:
進化計算的智能性包括自組織、自適應和自學習性等。應用進化計算求解問題時,在確定了編碼方案、適應值函數及遺傳運算元以後,演算法將根據「適者生存、不適應者淘汰"的策略,利用進化過程中獲得的信息自行組織搜索,從而不斷地向最佳解方向逼近。自然選擇消除了傳統演算法設計過程中的-一個最大障礙:即需要事先描述問題的全部特點,並說明針對問題的不同特點演算法應採取的措施。於是,利用進化計算的方法可以解決那些結構尚無人能理解的復雜問題。
進化計算的本質並行性表現在兩個方面:
一是進化計算是內在並行的,即進化計算本身非常適合大規模並行。
二是進化計算的內含並行性,由於進化計算採用種群的方式組織搜索,從而它可以同時搜索解空間內的多個區域,並相互交流信息,這種搜索方式使得進化計算能以較少的計算獲得較大的收益。
⑧ 什麼是G-p演算法
遺傳編程(GP)屬於進化計算(Evolutionary Computation,EC)模型的一種。EC是一種借鑒自然界進化機制而產生的並行隨機搜索演算法。進化演算法的基本原理是選擇和改變,它區別於其他搜索方法有兩個顯著特徵:首先這些演算法都是基於種群(population)的;其次在種群中個體(indvial)之間存在競爭。 為搜索特定的(感興趣的)查詢需要一種工具,這種工具可智能生成一組查詢並以它們是否能導出與用戶給定的同樣的對象集來進行評價。GP演算法對這一類問題是很實用的。
1 函數集與端點集
一般GP中可生成的程序集是使用者定義的函數集和端點集。表1給出了相應的函數集和端點集,其中函數集由1.3中定義的查詢運算元、邏輯運算運算元以及比較運算元所組成。
函數集 {SEL,REL,G-REL,RES},{UNI,INT,DIF},{AND,OR,NOT}, {>,>=,=,<,<=} 端點集類集,屬性集,值集
表1 函數集和端點集
在我們的應用中還有一些具有不同句法的查詢運算元。每個運算元具有不同的句法且假定的資料庫是面向對象的。因此,它具有為創建個體而使用的特別的函數集(或運算元集)和端點集。從而,構成種群的所有個體的創建必然受到每個運算元的約束[3]。約束可以是運算元的句法和查詢的類型,或者是為創建查詢選擇適當屬性值的領域知識。比較運算元和邏輯運算元只使用於查詢的謂詞。當比較符號操作數時,僅使用'='。
端點集由CLASS-SET、SLOT-SET和VALUE-SET組成。CLASS-SET由1.2中定義的類名組成,SLOT-SET由每個類的所有屬性構成,VALUE-SET由數值和符號值所構成(它們均為屬性值)。數值由整型或實型數構成,其數值范圍由所用資料庫模式定義。符號值由字元串表示的符號屬性值構成。
[編輯本段]
2 創建初始種群
為了創建一個個體(查詢),首先必須確定特定查詢所返回的對象類型。結果類型被選擇後,從所選類型返回例子的運算元集中隨機地選擇一個運算元,這個過程對查詢的每個參數遞歸地進行。最初,那些句法正確的預定義數量的查詢被隨機地產生,形成初始種群。
[編輯本段]
3 選擇屬性值
由於可選擇范圍大,要從某個查詢的值集中選擇一個屬性值(數值或符號常數)是相當困難的。對於一個范圍為[1,10000]的整數集,隨機選到一個特定整數的概率僅為1/10000。而對於符號常數,則需要很強的背景知識。因此,我們僅就發生在資料庫里的范圍選擇屬性值。
[編輯本段]
4 繁殖新一代種群
每個個體用預定義的適應函數來進行評價。較適應的查詢有較高的概率被選來繁殖新種群,這個過程用三個遺傳運算元:選擇、雜交和變異來完成。為了產生下一代,選擇運算元根據個體的適應值來選擇個體。我們用一個樹來表示一個查詢,雜交運算元用交換兩個父輩的子樹來創建兩個後代。變異運算元用一個新的子樹來代替一個父輩的子樹,從而產生一個新的後代。選擇-雜交-變異循環反復地進行直到終止標准被滿足。
[編輯本段]
5 評價(適應函數測量)
我們使用如下的適應函數f來評價種群中的個體查詢i :
f ( ni , hi ) = T - ( hi * hi ) / ni ,
其中:ni > 0 , T ≥ hi , 且 i = 1 ,2 ,… ,種群的大小(T是被確定的對象集的勢,hi是一個個體查詢i 被選中的次數,ni是查詢 i 結果集的勢)。
上述適應函數依賴於hi和ni ,如果一個查詢沒有被選中(hi=0),則函數的值為T,這是最差的一個適應值。另一方面,如果查詢結果能夠很好地匹配提交給系統的對象集,那麼它的適應值為0(在這種情況下hi = ni = T )。如果種群中出現個體適應值遠遠超過種群平均適應值,該個體很快就會在群體中佔有絕對的比例,從而出現過早收斂的現象。另一方面,在搜索過程的後期,群體的平均適應值可能會接近群體的最優適應值,從而導致搜索目標難以得到改善,出現停滯現象[4]。為了防止上述情況的發生,我們將對一個個體查詢的例子個數 ni 作為分母。
⑨ 進化演算法入門讀書筆記(一)
這里我參考學習的書籍是:
《進化計算的理論和方法》,王宇平,科學出版社
《進化優化演算法:基於仿生和種群的計算機智能方法》,[美]丹·西蒙,清華大學出版社。
進化演算法是 求解優化問題 的一種演算法,它是 模仿生物進化與遺傳原理 而設計的一類隨機搜索的優化演算法。
不同的作者稱進化演算法有不同的術語,以下。註:這里僅列舉出了我自己比較容易混淆的一些,並未全部列出。
進化計算: 這樣能強調演算法需要在 計算機上 實施,但進化計算也可能指不用於優化的演算法(最初的遺傳演算法並不是用於優化本身,而是想用來研究自然選擇的過程)。因此,進化優化演算法比進化計算更具體。
基於種群的優化: 它強調進化演算法一般是讓問題的候選解 種群 隨著時間的進化以得到問題的更好的解。然而許多進化演算法每次迭代只有單個候選解。因此,進化演算法比基於種群的優化更一般化。
計算機智能/計算智能: 這樣做常常是為了區分進化演算法與專家系統,在傳統上專家系統一直被稱為人工智慧。專家系統模仿演繹推理,進化演算法則模仿歸納推理。進化演算法有時候也被看成是人工智慧的一種。計算機智能是比進化演算法更一般的詞,它包括神經計算、模糊系統、人工生命這樣的一些技術,這些技術可應用於優化之外的問題。因此,進化計算可能比計算機智能更一般化或更具體。
由自然啟發的計算/仿生計算: 像差分進化和分布估計演算法這些進化演算法可能並非源於自然,像進化策略和反向學習這些進化演算法與自然過程聯系甚微。因此,進化演算法比由自然啟發的演算法更一般化,因為進化演算法包括非仿生演算法。
機器學習: 機器學習研究由經驗學到的計算機演算法,它還包括很多不是進化計算的演算法,如強化學習、神經網路、分簇、SVM等等。因此,機器學習比進化演算法更廣。
群智能演算法: 一些人認為群智能演算法應與進化演算法區分開,一些人認為群智能演算法是進化演算法的一個子集。因為群智能演算法與進化演算法有相同的執行方式,即,每次迭代都改進問題的候選解的性能從而讓解的種群進化。因此,我們認為群智能演算法是一種進化演算法。
進化演算法的簡單定義可能並不完美。在進化演算法領域術語的不統一會讓人困惑,一個演算法是進化演算法如果它通常被認為是進化演算法,這個戲謔的、循環的定義一開始有些麻煩,但是一段時間後,這個領域工作的人就會習慣了。
優化幾乎適用於生活中的所有領域。除了對如計算器做加法運算這種過於簡單的問題,不必用進化演算法的軟體,因為有更簡單有效的演算法。此外對於每個復雜的問題,至少應該考慮採用進化演算法。
一個優化問題可以寫成最小化問題或最大化問題,這兩個問題在形式上很容易互相轉化:
函數 被稱為目標函數,向量 被稱為獨立變數,或決策變數。我們稱 中元素的個數為問題的維數。
優化問題常常帶有約束。即在最小化某個函數 時,對 可取的值加上約束。不舉例。
實際的優化問題不僅帶有約束,還有多個目標。這意味著我們想要同時最小化不止一個量。
例子:
這里評估這個問題的一種方式是繪制 作為函數 的函數的圖:
如圖,對在實線上的 的值,找不到能同時使 和 減小的 的其他值,此實線被稱為 帕累托前沿 ,而相應的 的值的集合被稱為帕累托集。(此處的帕累托最優問題十分重要,可以參考這個鏈接來學習和理解: 多目標優化之帕累托最優 - 知乎 ,非常清晰易懂。)
該例子是一個非常簡單的多目標優化問題,它只有兩個目標。實際的優化問題通常涉及兩個以上的模目標,因此很難得到它的帕累托前沿,由於它是高維的,我們也無法將它可視化。後面的章節將會仔細討論多目標進化優化。
多峰優化問題是指問題不止一個局部最小值。上例中的 就有兩個局部最小值,處理起來很容易,有些問題有很多局部最小值,找出其中的全局最小值就頗具挑戰性。
對於前面的簡單例子,我們能用圖形的方法或微積分的方法求解,但是許多實際問題除了有更多獨立變數、多目標,以及帶約束之外更像上面的Ackley函數這樣,對於這類問題,基於微積分或圖形的方法就不夠用了,而進化演算法卻能給出更好的結果。
到現在為止我們考慮的都是連續優化問題,也就是說,允許獨立變數連續地變化。但有許多優化問題中的獨立變數智能在一個離散集合上取值。這類問題被稱為組合優化問題。如旅行商問題。
對於有 個城市的旅行商問題,有 個可能的解。對於一些過大的問題,硬算的方法不可行,像旅行商這樣的組合問題沒有連續的獨立變數,因此不能利用導數求解。除非對每個可能的解都試一遍,不然就無法確定所得到的組合問題的解是否就是最好的解。進化演算法對這類大規模、多維的問題,它至少能幫我們找出一個好的解(不一定是最好的)。