優化算法筆記(二)優化算法的分類

1. 優化算法的分類

(以下描述,均不是學術用語,僅供大家快樂的閱讀)

1.1常見的優化算法

在分類之前,我們先列舉一下常見的優化算法(不然我們拿什么分類呢?)。
  1遺傳算法Genetic algorithm
  2粒子群優化算法Particle Swarm Optimization
  3差分進化算法Differential Evolution
  4人工蜂群算法Artificial Bee Colony
  5蟻群算法Ant Colony Optimization
  6人工魚群算法Artificial Fish Swarm Algorithm
  7杜鵑搜索算法Cuckoo Search
  8螢火蟲算法Firefly Algorithm
  9灰狼算法Grey Wolf Optimizer
  10鯨魚算法Whale Optimization Algorithm
  11群搜索算法Group search optimizer
  12混合蛙跳算法Shuffled Frog Leaping Algorithm
  13煙花算法fireworks algorithm
  14菌群優化算法Bacterial Foraging Optimization
  以上優化算法是我所接觸過的算法,沒接觸過的算法不能隨便下結論,知之為知之,不知為不知。其實到目前為止優化算法可能已經有幾百種了,我們不可能也不需要全面的了解所有的算法,而且優化算法之間也有較大的共性,深入研究幾個之后再看其他優化算法上手速度會灰常的快。
  優化算法從提出到現在不過50-60年(遺傳算法1975年提出),雖種類繁多但大多較為相似,不過這也很正常,比較香蕉和人的基因相似度也有50%-60%。當然算法之間的相似度要比香蕉和人的相似度更大,畢竟人家都是優化算法,有著相同的目標,只是實現方式不同。就像條條大路通羅馬,我們可以走去,可以坐汽車去,可以坐火車去,也可以坐飛機去,不管使用何種方式,我們都在去往羅馬的路上,也不會說坐飛機去要比走去更好,交通工具只是一個工具,最終的方案還是要看我們的選擇。


1.2優化算法的模型

上面列舉了一些常見的算法,即使你一個都沒見過也沒關系,后面會對它們進行詳細的介紹,但是對后面的分類可能會有些許影響,不過問題不大,就先當總結看了。
  再對優化算法分類之前,先介紹一下算法的模型,在筆記(一)中繪制了優化算法的流程,不過那是個較為簡單的模型,此處的模型會更加復雜。上面說了優化算法有較大的相似性,這些相似性主要體現在算法的運行流程中。
  優化算法的求解過程可以看做是一個群體的生存過程。



  有一群原始人,他們要在野外中尋找食物,一個原始人是這個群體中的最小單元,他們的最終目標是尋找這個環境中最容易獲取食物的位置,即最易存活下來的位置。每個原始人都去獨自尋找食物,他們每個人每天獲取食物的策略只有采集果實、制作陷阱或者守株待兔,即在一天之中他們不會改變他們的位置。在下一天他們會根據自己的策略變更自己的位置。到了某一天他們又聚在了一起,選擇了他們到過的最容易獲取食物的位置定居。
  一群原始人=優化算法中的種群、群體;
  一個原始人=優化算法中的個體;
  一個原始人的位置=優化算法中個體的位置、基因等屬性;
  原始人變更位置=優化算法中總群的更新操作;
  該位置獲取食物的難易程度=優化算法中的適應度函數;
  一天=優化算法中的一個迭代;
  這群原始人最終的定居位置=優化算法所得的解。
  優化算法的流程圖如下:


算法流程圖

1.3優化算法的分類

對優化算法分類得有個標準,按照不同的標準分類也會得到不一樣的結果。首先說一下我所使用的分類標準(動態更新,有了新的感悟再加):

  1. 算法的由來,即算法是模擬了某種動物的覓食、搜索過程,還是模擬了群體交配、繁衍的過程,亦或是模擬了人工、物理過程。
  2. 算法的更新過程,上面的模型介紹了算法的抽象流程,使用更新過程分類即看算法中的個體按照什么方式來更新自己的位置。

1.3.1按照由來分類

按由來分類比較好理解,就是該算法受何種現象啟發而發明,本質是對現象分類。

算法 由來 類別
1遺傳算法 進化論 人類理論
2粒子群優化算法 鳥群覓食 生物生存
3差分進化算法 進化論 人類理論
4人工蜂群算法 蜜蜂覓食 生物生存
5蟻群算法 螞蟻覓食 生物生存
6人工魚群算法 魚群覓食 生物生存
7杜鵑搜索算法 杜鵑產卵 生物生存
8螢火蟲算法 螢火蟲求偶 生物生存
9灰狼算法 狼群覓食 生物生存
10鯨魚算法 鯨魚覓食 生物生存
11群搜索算法 生產消費跟隨模型 人類理論
12混合蛙跳算法 青蛙覓食 生物生存
13煙花算法 煙花 物理現象
14菌群優化算法 菌群生長 生物生存

可以看出算法根據由來可以大致分為有人類的理論創造而來,向生物學習而來,受物理現象啟發。其中向生物學習而來的算法最多,其他類別由于舉例有偏差,不是很準確,而且物理現象也經過人類總結,有些與人類現象相交叉,但仍將其獨立出來。
類別分好了,那么為什么要這么分類呢?



  當然是因為要湊字數啦,啊呸,當然是為了更好的理解學習這些算法的原理及特點。
  向動物生存學習而來的算法一定是一種行之有效的方法,能夠保證算法的效率和準確性,因為,如果使用該策略的動物無法存活到我們可以對其進行研究,我們也無法得知其生存策略。(而這也是一種幸存者偏差,我們只能看到行之有效的策略,但并不是我們沒看到的策略都是垃圾,畢竟也發生過小行星撞地球這種小概率毀滅性事件。講個冷笑話開cou心zhi一shu下:一只小恐龍對他的小伙伴說,好開心,我最喜歡的那顆星星越來越亮了(完)。)但是由于生物的局限性,人們所創造出的算法也會有局限性:我們所熟知的生物都生存在三維空間,在這些環境中,影響生物生存的條件比較有限,反應到算法中就是這些算法在解決較低維度的問題時效果很好,當遇到超高維(維度>500)問題時,結果可能不容樂觀,沒做過實驗,我也不敢亂說。



  受人類理論得出的算法,與在處理較高維問題時應該會有著較好的結果,因為人類的理論中的維度不受現實束縛,可能會有超高維的情況,比如基因的數量。但是能人類的理論都是在人類的理解范圍內,可能有些理論與人類認知不符,或者該理論其實是錯誤的,只是大家都沒有發現。這就尷尬了,從錯誤的理論上學習而來的東西,有較大的概率其實也是錯誤的。所有這類優化算法能夠處理維度較高的問題,但是很有可能得不出較好的結果。
  最后實名diss一下由物理現象發展而來的算法。物理現象,沒有任何智能,其現象完全取決于觀測者,因果不明,為什么敢說能解決問題,我也不清楚,可能只是想套用一下物理現象,其實算法與現象關系不大,其他類別也大多如此(不小心把實話說出來了不會有事吧)。

1.3.2按照更新過程分類

按更新過程分類相對復雜一點,主要是根據優化算法流程中更新位置操作的方式來進行分類。更新位置的操作按我的理解可大致分為兩類:1.跟隨最優解;2.不跟隨最優解。
  還是上面原始人的例子,每天他有一次去往其他位置狩獵的機會,他們采用何種方式來決定今天自己應該去哪里呢?
如果他們的策略是“跟隨最優解”,那么他們選取位置的方式就是按一定的策略向群體已知的最佳狩獵位置(歷史最佳)或者是當前群體中的最佳狩獵位置(今天最佳)靠近,至于是直線跑過去還是蛇皮走位繞過去,這個要看他們群體的策略。當然,他們的目的不是在最佳狩獵位置集合,他們的目的是在過去的途中看是否能發現更加好的狩獵位置,去往已經到過的狩獵地點再次狩獵是沒有意義的,因為每個位置獲取食物的難易程度是固定的。有了目標,大家都會朝著目標前進,總有一日,大家會在謀個位置附近相聚,相聚雖好但不利于后續的覓食容易陷入局部最優。
  什么是局部最優呢?假設在當前環境中有一“桃花源”,擁有上帝視角的我們知道這個地方就是最適合原始人們生存的,但是此地入口隱蔽“山有小口,仿佛若有光”、“初極狹,才通人。”,是一個難以發現的地方。如果沒有任何一個原始人到達了這里,大家向著已知的最優位置靠近時,也難以發現這個“桃源之地”,而當大家越聚越攏之后,“桃源”被發現的可能性越來越低。雖然原始人們得到了他們的解,但這并不是我們所求的“桃源”,他們聚集之后失去了尋求“桃源”的可能,這群原始人便陷入了局部最優。



  如果他們的策略是“不跟隨最優解”,那么他們的策略是什么呢?我也不知道,這個應該他們自己決定。畢竟“是什么”比“不是什么”的范圍要小的多。總之不跟隨最優解時,算法會有自己特定的步驟來更新個體的位置,有可能是隨機在自己附近找,也有可能是隨機向別人學習。不跟隨最優解時,原始人們應該不會快速聚集到某一處,這樣一來他們的選擇更具多樣性。
  按照更新過程對上面的算法分類結果如下

算法 類別
1遺傳算法 不跟隨最優解
2粒子群優化算法 跟隨最優解
3差分進化算法 不跟隨最優解
4人工蜂群算法 跟隨最優解
5蟻群算法 跟隨最優解
6人工魚群算法 跟隨最優解
7杜鵑搜索算法 跟隨最優解
8螢火蟲算法 跟隨最優解
9灰狼算法 跟隨最優解
10鯨魚算法 跟隨最優解
11群搜索算法 跟隨最優解
12混合蛙跳算法 跟隨最優解
13煙花算法 跟隨最優解
14菌群優化算法 跟隨最優解

可以看出上面不跟隨最優解的算法只有遺傳算法和差分進化算法,他們的更新策略是與進化和基因的重組有關。因此這些不跟隨最優解的算法,他們大多依據進化理論更新位置(基因)我把他們叫做進化算法,而那些跟隨群體最優解的算法,他們則大多依賴群體的配合協作,我把這些算法叫做群智能算法。

1.4總結

目前我只總結了這兩種,分類方法,如果你有更加優秀的分類方法,我們可以交流一下:

進化算法 群智能算法
人類理論 1遺傳算法
3差分進化算法
11群搜索算法
生物生存 2粒子群優化算法
4人工蜂群算法
5蟻群算
6人工魚群算法
7杜鵑搜索算法
8螢火蟲算法
9灰狼算法
10鯨魚算法
12混合蛙跳算法
14菌群優化算法
物理現象 13煙花算法

目錄
上一篇 優化算法筆記(一)優化算法的介紹
下一篇 優化算法筆記(三)粒子群算法(1)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
禁止轉載,如需轉載請通過簡信或評論聯系作者。