1. 程式人生 > >演化演算法及其衍生演算法的主要思想

演化演算法及其衍生演算法的主要思想

…/lib/libcaffe.so.1.0.0: undefined reference to leveldb::DB::Open(leveldb::Options const&, std::string const&, leveldb::DB**)' ../lib/libcaffe.so.1.0.0: undefined reference toleveldb::Status::ToString() const’
collect2: error: ld returned 1 exit status
tools/CMakeFiles/compute_image_mean.dir/build.make:142: recipe for target ‘tools/compute_image_mean’ failed
make[2]: *** [tools/compute_image_mean] Error 1
CMakeFiles/Makefile2:495: recipe for target ‘tools/CMakeFiles/compute_image_mean.dir/all’ failed
make[1]: *** [tools/CMakeFiles/compute_image_mean.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs…

Wiki:

In artificial intelligence, an evolutionary algorithm (EA) is a subset of evolutionary computation,[1] a generic population-based metaheuristic optimization algorithm. An EA uses mechanisms inspired by biological evolution, such as reproduction, mutation, recombination, and selection. Candidate solutions to the optimization problem play the role of individuals in a population, and the fitness function determines the quality of the solutions (see also loss function). Evolution of the population then takes place after the repeated application of the above operators.

Evolutionary algorithms often perform well approximating solutions to all types of problems because they ideally do not make any assumption about the underlying fitness landscape. Techniques from evolutionary algorithms applied to the modeling of biological evolution are generally limited to explorations of microevolutionary processes and planning models based upon cellular processes. In most real applications of EAs, computational complexity is a prohibiting factor.[2] In fact, this computational complexity is due to fitness function evaluation. Fitness approximation is one of the solutions to overcome this difficulty. However, seemingly simple EA can solve often complex problems[citation needed]; therefore, there may be no direct link between algorithm complexity and problem complexity.

百度:

進化演算法,或稱“演化演算法” (evolutionary algorithms, EAS) 是一個“演算法簇”,儘管它有很多的變化,有不同的遺傳基因表達方式,不同的交叉和變異運算元,特殊運算元的引用,以及不同的再生和選擇方法,但它們產生的靈感都來自於大自然的生物進化。與傳統的基於微積分的方法和窮舉法等優化演算法相比,進化計算是一種成熟的具有高魯棒性和廣泛適用性的全域性優化方法,具有自組織、自適應、自學習的特性,能夠不受問題性質的限制,有效地處理傳統優化演算法難以解決的複雜問題。

進化演算法包括遺傳演算法、遺傳規劃、進化規劃和進化策略等等。進化演算法的基本框架還是簡單遺傳演算法所描述的框架,但在進化的方式上有較大的差異,選擇、交叉、變異、種群控制等有很多變化。

同遺傳演算法一樣,進化演算法的收斂性也有一些結果,文獻證明了在儲存最優個體時通用的進化計算是收斂的,但進化演算法的很多結果是從遺傳演算法推過去的。

遺傳演算法對交叉操作要看重一些,認為變異操作是演算法的輔助操作;而進化規劃和進化策略認為在一般意義上說交叉並不優於變異,甚至可以不要交叉操作。

進化計算是基於自然選擇和自然遺傳等生物進化機制的一種搜尋演算法。與普通的搜尋方法一樣,進化計算也是一種迭代演算法,不同的是進化計算在最優解的搜尋過程中,一般是從原問題的一組解出發改進到另一組較好的解,再從這組改進的解出發進一步改進。而且在進化問題中,要求當原問題的優化模型建立後,還必須對原問題的解進行編碼。進化計算在搜尋過程中利用結構化和隨機性的資訊,使最滿足目標的決策獲得最大的生存可能,是一種概率型的演算法。

知乎

遺傳演算法的思想在於,認為優質的基因片段一定會在多次迭代過程中保留下來。(其它演算法也許會在目標值表達,交叉變異的,目標值篩選等步驟上和遺傳演算法的思路不同,可以嘗試觸類旁通。)但是遺傳演算法這樣的演算法存在的問題在於 沒法證明問題的收斂性,也就是說,如果我想得到一個精度在x%範圍內的解,從理論上遺傳演算法沒法給出得到一個這樣精度的解所必需的迭代次數。所以這種方法也被很多學者所不齒,認為它純粹是一個撞運氣的大規模隨機搜尋演算法。

作者:Sixiang
連結:https://www.zhihu.com/question/39152390/answer/85645463
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

分類

演化演算法(進化演算法)的四種典型模型

1、遺傳演算法(Genetic Algorithm,GA)
2、進化策略 (Evolution Strategy,ES)
3、遺傳規劃 (Genetic Programming,,GP)
4、進化規劃 (Evolutionary Programming,EP)

演化演算法(進化演算法)的衍生

1、多目標演化演算法((Multi-Objective Evolutionary Algorithm,MOEA))
2、神經進化演算法(Neuroevolution)
3、差分進化演算法(Differential Evolution,DE)
4、文化基因演算法(Memetic Algorithm,MA)
5、蟻群演算法(Ant Colony Optimization,ACO)
6、粒子群演算法(Particle Swarm Optimization,PSO)

literature:

視覺機器學習20講:

第19講 遺傳演算法

遺傳演算法(Genetic Algorithm)起始於20世紀60年代,受達爾文進化論的啟發,借鑑生物學中的遺傳、突變、自然選擇以及雜交等思想,是一種模擬自然界生物進化機制的啟發式搜尋方法。最早的相關著作為1975年美國Michigan大學的John Holland編寫的 Adaptation in Natural and Artificial Systems,引用次數超過37000次。

核心思想:遺傳演算法通常是使一定數量的候選解抽象表示的種群向更好的種群進化的過程。遺傳演算法的進化過程從完全隨機生成的種群開始,隨後逐代向適應度更高的種群進化。在進化的每一代中,整個種群的適應度按照一定規則被評價,基於個體的適應度高低從當前種群中隨機選擇多個個體,通過個體自然選擇和基因突變操作而產生新種群,生成的新種群在演算法的下一次迭代中成為當前種群。在遺傳演算法中,需解決的問題的解通常被成為基因個體,它通常以引數列表的形式進行標示,被稱作染色體或基因串。其中染色體通常以編碼形式體現,即表達為簡單的字串或數字串。

遺傳演算法流程圖

遺傳演算法的優點:

遺傳演算法一般從問題解的串集開始搜尋,而並不是從單個解開始搜尋。這是遺傳演算法與傳統進化計算方法的區別。
傳統進化演算法一般採用單點搜尋機制,因此這種方法容易導致區域性最優解。遺傳演算法可以同時處理種群中的多個個體,可以對搜尋空間中的多個不同的解進行評估,因此可以使演算法減少陷入區域性最優解的風險;同時也可以使演算法更容易實現並行優化。
遺傳演算法在求解過程中通常不借助搜尋空間或其他輔助資訊,而僅採用適應度函式對個體進行評估,並進行相應的遺傳變異等操作。遺傳演算法的適應度函式不僅沒有連續可微的約束,而且適應度函式的定義域也可以任意設定,這便使得遺傳演算法的應用範圍大大擴充套件。遺傳演算法通常不採用確定性規則,而採用有規律的變遷規則來對搜尋方向進行指導。遺傳演算法通常具有自組織、自適應和自學習性,在利用獲得的資訊進行組織搜尋時,適應度高的個體具有較高的生存概率,更加容易獲得適應環境的基因結構。

遺傳演算法的不足:

對於任何優化問題,遺傳演算法的引數調節都會影響收斂速度,具體引數包括種群規模、初始種群個體、交叉概率、變異概率和個體適應度函式等。引數選擇沒有實用的上下限,初始種群的數量很重要,過多會佔用大量系統資源,過少會忽略掉最優解。變異率非常重要,太大會導致丟失最優解,過小會導致過早收斂於區域性最優。在適應度函式選擇不當時,可能收斂於區域性最優,不能達到全域性最優解。遺傳演算法並不一定是最好的優化策略,優化問題要具體情況具體分析。遺傳演算法不能解決大海撈針問題,所謂的大海撈針問題就是沒有確切的適應度函式表徵個體好壞的我呢提,從而使演算法的進化失去導向。

其他

一個演算法的提出,必須以解決一個問題為目標。真正的研究就是:面向科學問題的研究,是可能增加人類知識的研究。