位極演算法
㈠ 詳細介紹雙序列比對、blast 以及多序列比對的區別,以及均適用於哪些場 景
序列比對是將兩個或多個序列排列在一起,標明其相似之處。使用間隔表示未比對上,比對上的相同或相似的符號排列在同一列上。序列比對是生物信息學以及基因組學與進化的基礎之一,其基本思想是:在生物學中普遍存在的序列決定結構、結構決定功能的規律,通過將核酸序列或者蛋白質序列的一級結構看成由基本字元構成的字元串,通過序列比對我們可以找到相似的序列並由此發現生物序列中的功能、結構和進化信息。
全局比對:全局比對是指將參與比對的兩條序列裡面的所有字元進行比對。全局比對在全局范圍內對兩條序列進行比對打分,找出最佳比對,主要被用來尋找關系密切的序列。其可以用來鑒別或證明新序列與已知序列家族的同源性,是進行分子進化分析的重要前提。其代表是Needleman-Wunsch演算法。
局部比對:與全局比對不同,局部比對不必對兩個完整的序列進行比對,而是在每個序列中使用某些局部區域片段進行比對。其產生的需求在於、人們發現有的蛋白序列雖然在序列整體上表現出較大的差異性,但是在某些局部區域能獨立的發揮相同的功能,序列相當保守。這時候依靠全局比對明顯不能得到這些局部相似序列的。其次,在真核生物的基因中,內含子片段表現出了極大變異性,外顯子區域卻較為保守,這時候全局比對表現出了其局限性,無法找出這些局部相似性序列。其代表是Smith-Waterman局部比對演算法。
雙重序列比對:雙序列比對是指對兩條序列M和N進行比對,找到其相似性關系,這種尋找生物序列相似性關系的過程被稱為雙序列比對。其演算法可以主要分成基於全局比對的Needleman-Wunsch演算法和基於局部比對的Smith-Waterman局部比對演算法
多重序列比對:多序列比對是雙序列比對推廣,即把兩個以上字元序列對齊,逐列比較其字元的異同,使得每一列字元盡可能一致,以發現其共同的結構特徵的方法稱為多序列比對。多序列比對演算法可以分成漸進法和同步法。其可以發現不同的序列之間的相似部分,從而推斷它們在結構和功能上的相似關系,主要用於分子進化關系,預測蛋白質的二級結構和三級結構、估計蛋白質折疊類型的總數,基因組序列分析等。
基因組比對:是多序列比對的一種特例,指對基因組范圍內的序列信息進行比對的過程。通過對不同親緣關系物種的基因組序列進行比較,能夠鑒定出編碼序列、非編碼調控序列及給定物種獨有的序列。而基因組范圍之內的序列比對,可以了解不同物在核苷酸組成、同線性關系和基因順序方面的異同,進而得到基因分析預測與定位、生物系統發生進化關系等方面的信息。
BLAST:BLAST[1](Basic Local Alignment Search Tool)是在在1990年由Altschul等人提出的雙序列局部比對演算法,是一套在蛋白質資料庫或DNA資料庫中進行相似性比較的分析工具。BLAST是一種啟發式演算法,用於在大型資料庫中尋找比對序列,是一種在局部比對基礎上的近似比對演算法,可以在保持較高精度的情況下大大減少程序運行的時間。
演算法思想描述:
雙重序列比對主要分成以Needleman-Wunsch演算法為代表的全局比對和以Smith-Waterman局部比對演算法為代表的局部比對,BLAST是局部比對的一種推廣。多重比對演算法可以主要分成動態規劃演算法、隨機演算法、迭代法和漸進比對演算法。
(1)雙重序列比對:
Needleman-Wunsch演算法:該演算法是基於動態規劃思想的全局比對的基本演算法,動態規劃的比對演算法的比對過程可以用一個以序列S為列,T為行的(m+1)×(n+1)的二維矩陣來表示,用
sigma表示置換矩陣。
在計算完矩陣後,從矩陣的右下角單元到左上單元回溯最佳路徑(用箭頭表示),根據最佳路徑給出兩序列的比對結果。其中,斜箭頭表示2個殘基匹配,水平箭頭表示在序列S的相應位置插入一個空位,垂直方向的箭頭表示在序列T的相應位置插入一個空位。
Smith-Waterman演算法:該演算法是一種用來尋找並比較具有局部相似性區域的動態規劃演算法,這種演算法適用於親緣關系較遠、整體上不具有相似性而在一些較小的區域上存在局部相似性的兩個序列。該演算法的基本思想是:使用迭代方法計算出兩個序列的相似分值,存在一個得分矩陣M中,然後根據這個得分矩陣,通過動態規劃的方法回溯找到最優的比對序列。與全局比對相比,這種演算法的改變是把矩陣單元值為負者一律取為0,這是因為分值為負的比對喪失了比對的生物學意義,因此把得分為負值的子序列丟棄。
BLAST: BLAST演算法的基本思想是通過產生數量更少的但質量更好的增強點來提高比對的速度。演算法的原理主要分為以下五步:(1)過濾:首先過濾掉低復雜度區域,即含有大量重復的序列;(2)Seeding:將Query序列中每k個字組合成一個表,即將一個序列拆分成多個連續的『seed words』(通常蛋白質k=3,核酸k=11);(3)比對:列出我們所關心的所有可能的字組,再配合置換矩陣給出高分值的字組並組織成快速搜索樹結構或者哈希索引,因此此步驟可以快速搜索出大數據集中的所有匹配序列,找到每個seed words在參考序列中的位置;(4)延伸:當找到seed words的位置後,接下來需要將seed word延伸成長片段,延伸過程中,得分值也在變化,當得分值小於閾值時即停止延伸,最後得到的片段成為高分片段對,HSP(High-scoring segment pair);(5)顯著性分析,最後我們使用如下公式計算E值,E值衡量了在隨機情況下,資料庫存在的比當前匹配分數更好的比對的數目,因此可以用該值作為指標評價HSP比對序列的可信度。
其中,m是資料庫長度,n是query的長度,S是HSP分數,其他兩個參數是修正系數。
(2)多重序列比對
動態規劃演算法:其基本思想是將一個二維的動態規劃矩陣擴展到三維或者多維,多序列比對的積分是n個序列中兩兩進行比對所得積分之和。矩陣的維度反映了參與比對的序列數。這種方法對計算資源要求比較高[6]。
隨機演算法:主要包括遺傳演算法和模擬退火演算法,遺傳演算法是一類借鑒生物界進化規律演化來的全局意義上的自適應隨機搜索方法。當用遺傳演算法進行生物序列分析時,每一代包含固定數量的個體,這些個體用他們的適應度來評價。變異則模擬了生物進化過程中的偶然殘基突變現象。對產生的新一代群體進行重新評價、選擇、交叉、變異,如此循環往復,使群體中最優個體的適應度不斷提高,直到達到一個閾值,演算法結束。模擬退火的基本思想是用一物質系統的退火過程來模擬優化問題的尋優方法,當物質系統達到最小能量狀態時,優化問題的目標函數也相應地達到了全局最優解。這兩種方法都是對構造好的目標函數進行最優解搜索,但實際比對效果並不好[6,7]。
迭代法:迭代法的代表是Muscle[8], Muscle是一個新的漸進比對和迭代比對的綜合演算法,主要由兩部分構成,第一部分是迭代漸進比對:第一次漸進比對的目的是快速產生一個多序列比對而不強調准確率,以此為基礎再對漸進比對進行改良。經過兩次漸進比對,形成一個相對准確的多序列比對;第二部分是迭代比對:該過程類似於Prrp演算法[9],即通過不斷的迭代,逐步優化最終比對結果。其主要特點包括:使用kmer counting進行快速的距離測量,使用一個新的圖譜比對打分函數進行漸進比對,使用依賴於數的有限分隔進行細化。
漸進比對演算法:該演算法以Feng和Doolittle提出的最為經典[10]。漸進比對演算法的基本思想是迭代地利用兩序列動態規劃比對演算法,先由兩個序列的比對開始,逐漸添加新序列,直到所有序列都加入為止。但是不同的添加順序會產生不同的比對結果。確定合適的比對順序是漸進比對演算法的一個關鍵問題。通常,整個序列的比對應該從最相似的兩個序列開始,由近至遠逐步完成。作為全局多序列比對的漸進比對演算法有個基本的前提假設:所有要比對的序列是同源的,即由共同的祖先序列經過一系列的突變積累,並經自然選擇遺傳下來的,分化越晚的序列之間相似程度就越高。因此,在漸進比對過程中,應該對近期的進化事件比遠期的進化事件給予更大的關注。由於同源序列是進化相關的,因此可以按著序列的進化順序,即沿著系統發育樹(指導樹)的分支,由近至遠將序列或已比對序列按雙序列比對演算法逐步進行比對,重復這一過程直到所有序列都己添加到這個比對中為止[10]。其三個步驟為:(1)利用雙序列比對方法對所有的序列進行兩兩比對,得到相似性分值;(2)利用相似性矩陣(或距離矩陣)產生輔助導向樹;(3)根據導向樹進行漸進比對。漸進比對演算法是最常用、簡單又有效的啟發式多序列比對方法,它所需時間較短、所佔內存較小,其演算法很多,主要有CLUSTAL W, T-Coffee和DiAlign等,其中 CLUSTAL W應用最廣泛。
應用:
類型+應用
雙重序列對比:判斷兩個序列的同源性和一致性。(1)全局多序列比對可以鑒別或證明新序列與己有序列家族的同源性;幫助預測新蛋白質序列的二級和二級結構,是進行分子進化分析的重要前提。適合序列相似性較高,序列長度近似時的比對;(2)局部比對考慮序列部分區域的相似性。局部多序列比對可以用來刻畫蛋白質家族和超家族。適合於未知兩個序列相似程度的,可能存在一些片段極其相似而另一些片段相異的序列比對情況。
多重序列比對:多重比對經常用來研究序列間的進化關系,構建進化樹;探究序列間的保守性。主要用於分子進化關系,預測蛋白質的二級結構和三級結構、估計蛋白質折疊類型的總數,基因組序列分析等。
基因組比對:通過對不同親緣關系物種的基因組序列進行比較,能夠鑒定出編碼序列、非編碼調控序列及給定物種獨有的序列。而基因組范圍之內的序列比對,可以了解不同物在核苷酸組成、同線性關系和基因順序方面的異同,進而得到基因分析預測與定位、生物系統發生進化關系等方面的信息。
其中,BLAST作為最重要的比對工具,意義特殊,拿出來單獨討論。BLAST可以分成Basic BLAST和 Specialized BLAST, BLAST包括常規的nucleotide blast, Protein blast和Translating blast;Specialize blast可以對特殊生物或特殊研究領域的序列資料庫進行檢索。
㈡ Hello,密碼學:第三部分,公鑰密碼(非對稱密碼)演算法
在 《Hello,密碼學:第二部分,對稱密碼演算法》 中講述了對稱密碼的概念,以及DES和AES兩種經典的對稱密碼演算法原理。既然有對稱密碼的說法,自然也就有非對稱密碼,也叫做公鑰密碼演算法。 對稱密碼和非對稱密碼兩種演算法的本質區別在於,加密密鑰和解密密鑰是否相同 :
公鑰密碼產生的初衷就是為了解決 密鑰配送 的問題。
Alice 給遠方的 Bob 寫了一封情意慢慢的信,並使用強悍的 AES-256 進行了加密,但她很快就意識到,光加密內容不行,必須要想一個安全的方法將加密密鑰告訴 Bob,如果將密鑰也通過網路發送,很可能被技術高手+偷窺癖的 Eve 竊聽到。
既要發送密鑰,又不能發送密鑰,這就是對稱密碼演算法下的「密鑰配送問題」 。
解決密鑰配送問題可能有這樣幾種方法:
這種方法比較高效,但有局限性:
與方法一不同,密鑰不再由通信個體來保存,而由密鑰分配中心(KDC)負責統一的管理和分配。 雙方需要加密通信時,由 KDC 生成一個用於本次通信的通信密鑰交由雙方,通信雙方只要與 KDC 事先共享密鑰即可 。這樣就大大減少密鑰的存儲和管理問題。
因此,KDC 涉及兩類密鑰:
領略下 KDC 的過程:
KDC 通過中心化的手段,確實能夠有效的解決方法一的密鑰管理和分配問題,安全性也還不錯。但也存在兩個顯著的問題:
使用公鑰密睜衡碼,加密密鑰和解密密鑰不同,只要擁有加密密鑰,所有人都能進行加密,但只有擁有解密密鑰的人才能進行解密。於是就出現了這個過程:
密鑰配送的問題天然被解決了。當然,解密密鑰丟失而導致信息泄密,這不枯脊屬於密鑰配送的問題。
下面,再詳細看下這個過程。
公鑰沒早滲密碼流程的核心,可以用如下四句話來概述:
既然加密密鑰是公開的,因此也叫做 「公鑰(Public Key)」 。
既然解密密鑰是私有的,因此也叫做 「私鑰(Private Key) 。
公鑰和私鑰是一一對應的,稱為 「密鑰對」 ,他們好比相互糾纏的量子對, 彼此之間通過嚴密的數學計算關系進行關聯 ,不能分別單獨生成。
在公鑰密碼體系下,再看看 Alice 如何同 Bob 進行通信。
在公鑰密碼體系下,通信過程是由 Bob 開始啟動的:
過程看起來非常簡單,但為什麼即使公鑰被竊取也沒有關系?這就涉及了上文提到的嚴密的數學計算關系了。如果上一篇文章對稱密鑰的 DES 和 AES 演算法進行概述,下面一節也會對公鑰體系的數學原理進行簡要說明。
自從 Diffie 和 Hellman 在1976年提出公鑰密碼的設計思想後,1978年,Ron Rivest、Adi Shamir 和 Reonard Adleman 共同發表了一種公鑰密碼演算法,就是大名鼎鼎的 RSA,這也是當今公鑰密碼演算法事實上的標准。其實,公鑰密碼演算法還包括ElGamal、Rabin、橢圓曲線等多種演算法,這一節主要講述 RSA 演算法的基本數學原理。
一堆符號,解釋下,E 代表 Encryption,D 代表 Decryption,N 代表 Number。
從公式種能夠看出來,RSA的加解密數學公式非常簡單(即非常美妙)。 RSA 最復雜的並非加解密運算,而是如何生成密鑰對 ,這和對稱密鑰演算法是不太一樣的。 而所謂的嚴密的數學計算關系,就是指 E 和 D 不是隨便選擇的 。
密鑰對的生成,是 RSA 最核心的問題,RSA 的美妙與奧秘也藏在這裡面。
1. 求N
求 N 公式:N = p × q
其中, p 和 q 是兩個質數 ,而且應該是很大又不是極大的質數。如果太小的話,密碼就容易被破解;如果極大的話,計算時間就會很長。比如 512 比特的長度(155 位的十進制數字)就比較合適。
這樣的質數是如何找出來的呢? 需要通過 「偽隨機數生成器(PRNG)」 進行生成,然後再判斷其是否為質數 。如果不是,就需要重新生成,重新判斷。
2. 求L
求 L 公式:L = lcm(p-1, q-1)
lcm 代表 「最小公倍數(least common multiple)」 。注意,L 在加解密時都不需要, 僅出現在生成密鑰對的過程中 。
3. 求E
E 要滿足兩個條件:
1)1 < E < L
2)gcd(E,L) = 1
gcd 代表 「最大公約數(greatest common divisor)」 。gcd(E,L) = 1 就代表 「E 和 L 的最大公約數為1,也就是說, E 和 L 互質 」。
L 在第二步已經計算出來,而為了找到滿足條件的 E, 第二次用到 「偽隨機數生成器(PRNG)」 ,在 1 和 L 之間生成 E 的候選,判斷其是否滿足 「gcd(E,L) = 1」 的條件。
經過前三步,已經能夠得到密鑰對種的 「公鑰:{E, N}」 了。
4. 求D
D 要滿足兩個條件:
1)1 < D < L
2)E × D mod L = 1
只要 D 滿足上面的兩個條件,使用 {E, N} 進行加密的報文,就能夠使用 {D, N} 進行解密。
至此,N、L、E、D 都已經計算出來,再整理一下
模擬實踐的過程包括兩部分,第一部分是生成密鑰對,第二部分是對數據進行加解密。為了方便計算,都使用了較小的數字。
第一部分:生成密鑰對
1. 求N
准備兩個質數,p = 5,q = 7,N = 5 × 7 = 35
2. 求L
L = lcm(p-1, q-1) = lcm (4, 6) = 12
3. 求E
gcd(E, L) = 1,即 E 和 L 互質,而且 1 < E < L,滿足條件的 E 有多個備選:5、7、11,選擇最小的 5 即可。於是,公鑰 = {E, N} = {5, 35}
4. 求D
E × D mod L = 1,即 5 × D mod 12 = 1,滿足條件的 D 也有多個備選:5、17、41,選擇 17 作為 D(如果選擇 5 恰好公私鑰一致了,這樣不太直觀),於是,私鑰 = {D, N} = {17, 35}
至此,我們得到了公私鑰對:
第二部分:模擬加解密
明文我們也使用一個比較小的數字 -- 4,利用 RSA 的加密公式:
密文 = 明文 ^ E mod N = 4 ^ 5 mod 35 = 9
明文 = 密文 ^ D mod N = 9 ^ 17 mod 35 = 4
從這個模擬的小例子能夠看出,即使我們用了很小的數字,計算的中間結果也是超級大。如果再加上偽隨機數生成器生成一個數字,判斷其是否為質數等,這個過程想想腦仁兒就疼。還好,現代晶元技術,讓計算機有了足夠的運算速度。然而,相對於普通的邏輯運算,這類數學運算仍然是相當緩慢的。這也是一些非對稱密碼卡/套件中,很關鍵的性能規格就是密鑰對的生成速度
公鑰密碼體系中,用公鑰加密,用私鑰解密,公鑰公開,私鑰隱藏。因此:
加密公式為:密文 = 明文 ^ E mod N
破譯的過程就是對該公式進行逆運算。由於除了對明文進行冪次運算外, 還加上了「模運算」 ,因此在數學上, 該逆運算就不再是簡單的對數問題,而是求離散對數問題,目前已經在數學領域達成共識,尚未發現求離散對數的高效演算法 。
暴力破解的本質就是逐個嘗試。當前主流的 RSA 演算法中,使用的 p 和 q 都是 1024 位以上,這樣 N 的長度就是 2048 位以上。而 E 和 D 的長度和 N 差不多,因此要找出 D,就需要進行 2048 位以上的暴力破解。即使上文那個簡單的例子,算出( 蒙出 ) 「9 ^ D mod 35 = 4」 中的 D 也要好久吧。
因為 E 和 N 是已知的,而 D 和 E 在數學上又緊密相關(通過中間數 L),能否通過一種反向的演算法來求解 D 呢?
從這個地方能夠看出,p 和 q 是極為關鍵的,這兩個數字不泄密,幾乎無法通過公式反向計算出 D。也就是說, 對於 RSA 演算法,質數 p 和 q 絕不能被黑客獲取,否則等價於交出私鑰 。
既然不能靠搶,N = p × q,N是已知的,能不能通過 「質因數分解」 來推導 p 和 q 呢?或者說, 一旦找到一種高效的 「質因數分解」 演算法,就能夠破解 RSA 演算法了 。
幸運的是,這和上述的「離散對數求解」一樣,當下在數學上還沒有找到這種演算法,當然,也無法證明「質因數分解」是否真的是一個困難問題 。因此只能靠硬算,只是當前的算力無法在可現實的時間內完成。 這也是很多人都提到過的,「量子時代來臨,當前的加密體系就會崩潰」,從算力的角度看,或許如此吧 。
既不能搶,也不能算,能不能猜呢?也就是通過 「推測 p 和 q 進行破解」 。
p 和 q 是通過 PRNG(偽隨機數生成器)生成的,於是,又一個關鍵因素,就是採用的 偽隨機數生成器演算法要足夠隨機 。
隨機數對於密碼學極為重要,後面會專門寫一篇筆記 。
前三種攻擊方式,都是基於 「硬碰硬」 的思路,而 「中間人攻擊」 則換了一種迂迴的思路,不去嘗試破解密碼演算法,而是欺騙通信雙方,從而獲取明文。具體來說,就是: 主動攻擊者 Mallory 混入發送者和接收者之間,面對發送者偽裝成接收者,面對接收者偽裝成發送者。
這個過程可以重復多次。需要注意的是,中間人攻擊方式不僅能夠針對 RSA,還可以針對任何公鑰密碼。能夠看到,整個過程中,公鑰密碼並沒有被破譯,密碼體系也在正常運轉,但機密性卻出現了問題,即 Alice 和 Bob 之間失去了機密性,卻在 Alice 和 Mallory 以及 Mallory 和 Bob 之間保持了機密性。即使公鑰密碼強度再強大 N 倍也無濟於事。也就是說,僅僅依靠密碼演算法本身,無法防禦中間人攻擊 。
而能夠抵禦中間人攻擊的,就需要用到密碼工具箱的另一種武器 -- 認證 。在下面一篇筆記中,就將涉及這個話題。
好了,以上就是公鑰密碼的基本知識了。
公鑰密碼體系能夠完美的解決對稱密碼體系中 「密鑰配送」 這個關鍵問題,但是拋開 「中間人攻擊」 問題不談,公鑰密碼自己也有個嚴重的問題:
公鑰密碼處理速度遠遠低於對稱密碼。不僅體現在密鑰對的生成上,也體現在加解密運算處理上。
因此,在實際應用場景下,往往會將對稱密碼和公鑰密碼的優勢相結合,構建一個 「混合密碼體系」 。簡單來說: 首先用相對高效的對稱密碼對消息進行加密,保證消息的機密性;然後用公鑰密碼加密對稱密碼的密鑰,保證密鑰的機密性。
下面是混合密碼體系的加解密流程圖。整個體系分為左右兩個部分:左半部分加密會話密鑰的過程,右半部分是加密原始消息的過程。原始消息一般較長,使用對稱密碼演算法會比較高效;會話密鑰一般比較短(十幾個到幾十個位元組),即使公鑰密碼演算法運算效率較低,對會話密鑰的加解密處理也不會非常耗時。
著名的密碼軟體 PGP、SSL/TLS、視頻監控公共聯網安全建設規范(GB35114) 等應用,都運用了混合密碼系統。
好了,以上就是公鑰密碼演算法的全部內容了,拖更了很久,以後還要更加勤奮一些。
為了避免被傻啦吧唧的審核機器人處理,後面就不再附漂亮姑娘的照片(也是為了你們的健康),改成我的攝影作品,希望不要對收視率產生影響,雖然很多小伙兒就是沖著姑娘來的。
就從喀納斯之旅開始吧。
㈢ 優化演算法筆記(十八)灰狼演算法
(以下描述,均不是學術用語,僅供大家快樂的閱讀)
灰狼演算法(Grey Wolf Algorithm)是受灰狼群體捕獵行為啟發而提出的演算法。演算法提出於2013年,仍是一個較新的演算法。目前為止(2020)與之相關的論文也比較多,但多為演算法的應用,應該仍有研究和改進的餘地。
灰狼演算法中,每隻灰狼的位置代表了解空間中的一個可行解。群體中,占據最好位置的三隻灰狼為狼王及其左右護法(衛)。在捕獵過程中這三隻狼將帶領著狼群蛇皮走位,抓捕獵物,直至找到獵物(最優解)。當然狼王不會一直是狼王,左右護法也是一樣,每一輪走位後,會根據位置的優劣重新選出新的狼王和左右護法。狼群中的每一隻灰狼會向著(也可能背向)這三隻位置最優的灰狼移動一定的距離,來決定這一步自己將如何走位。簡單來說, 灰狼個體會向則群體中最優的三個個體移動 。
很明顯該演算法的主角就是灰狼了。
設定目標灰狼為
,當前灰狼的為 ,則該灰狼向著目標灰狼移動後的位置 可以由一下公式計算得出:
灰狼群體中位置最好的三隻灰狼編號為1,2,3,那麼當前的灰狼i通過觀察灰狼1、灰狼2和灰狼3,根據公式(1)得出的三個位置為Xi1,Xi2,Xi3。那麼灰狼i將要移動到的位置可以根據以下供述計算得出:
可以看出該灰狼的目標位置是通過觀察三隻頭狼得到的三個目標位置的所圍成的區域的質心。(質心超出邊界時,取值為邊界值)。
灰狼演算法的論文描述很多,但是其公式和流程都非常簡單,主要對其參數A和C的作用效果進行了詳細描述。
C主要決定了新位置相對於目標灰狼的方位,而A則決定新位置向目標靠近還是遠離目標灰狼。當|A|>=1時,為遠離目標,表現出更強的全局搜索能力,|A|<1時靠近目標,表現出更強的局部搜索能力。
適應度函數 。
實驗一:
看看這圖像和結果,效果好極了。每當我這么認為時,總會出現意想不到的轉折。
修改一下最優解位置試一試, 。
實驗二 : 。
其結果比上面的實驗差了不少,但我覺得這才是一個優化演算法應有的搜索圖像。其結果看上去較差只是因為迭代次數較少,收斂不夠迅速,這既是優點也是缺點,收斂慢但是搜索更細致。
仔細分析灰狼演算法的流程,它並沒有向原點靠近的趨勢,那隻能理解為演算法群體總體上向著群體的中心移動。 猜想 :當初始化群體的中心恰好是正解時,演算法的結果將會非常的好。
下面使用 ,並將灰狼的初始位置限定在(50,100)的范圍內,看看實驗圖像是否和實驗二的圖像一致。
實驗三 . ,初始種群取值范圍為(50,100)
這圖像和結果跟實驗一的不是一樣的嗎?這說明從實驗二中得出的猜想是錯誤的。
從圖像和結果上看,都和實驗二非常相似,當解在解空間的中心時但不在原點時,演算法的結果將差一些。
為什麼會這樣呢?從演算法的流程上看,灰狼演算法的各個行為都是關於頭狼對稱的,當最優解在原點且頭狼在附近時,公式(1)將變為如下:
實驗五 . ,三隻頭狼添加貪心演算法。
從圖像可以看出中心的三個點移動的頻率要比其他點的移動頻率低。從結果上可以看出其結果相對穩定了不少,不過差距非常的小,幾乎可以認為是運氣好所導致。如果所有的個體都添加貪心演算法呢?顯然,演算法的全局搜索能力將進一步減弱,並且更容易向群體中心收斂,這並不是一個好的操作。
實驗六 . ,
在實驗五的基礎上為狼群添加一個統一的步長,即每隻狼每次向著目標狼移動的距離不能大於其步長,將其最大步長設為1,看看效果。
從圖像可以看出,受到步長的約束每隻狼的移動距離較小,在結束時還沒有收斂,其搜索能力較強但收斂速度過慢且極易陷入局部最優。現在將最大步長設置為10(1/10解空間范圍)使其搜索能力和收斂速度相對平衡,在看看效果。
從圖像可以看出,演算法的收斂速度快了不少,但從結果可知,相較於實驗五,演算法的提升並不太大。
不過這個圖像有一種似曾相識的感覺,與螢火蟲演算法(FireFly Algorithm)差不多,仔細對比這兩個演算法可以發現, 灰狼演算法相當於螢火蟲演算法的一個簡化 。實驗六種對灰狼演算法添加步長的修改,讓其離螢火蟲演算法更近了一步。
實驗七 . ,
在實驗六的基礎上讓最大步長隨著迭代次數增加遞減。
從實驗七的圖像可以看出,種群的收斂速度好像快了那麼一點,結果也變好了不少。但是和改進後的螢火蟲演算法相比仍然有一定的差距。
灰狼演算法在全局搜索和局部搜索上的平衡已經比較好了,嘗試過對其進行改進,但是修改使搜索能力更強時,對於局部最優的函數求解效果很差,反之結果的精度較低,總體而言修改後的演算法與原演算法相差無幾。
灰狼演算法是根據灰狼群體的捕獵行動而提出的優化演算法,其演算法流程和步驟非常簡單,數學模型也非常的優美。灰狼演算法由於沒有貪心演算法,使得其有著較強的全局搜索能力同時參數A也控制了演算法的局部搜索范圍,演算法的全局搜索能力和局部搜索能力比較平衡。
從演算法的優化圖像可以看出,灰狼演算法和螢火蟲演算法非常的相似。可以認為,灰狼演算法是對螢火蟲演算法的一種改進。螢火蟲演算法向著由於自己的個體飛行,而灰狼演算法則的條件更為苛刻,向著群體前三強前進,螢火蟲演算法通過步長控制搜索范圍,而灰狼演算法則直接定義搜索范圍參數A,並令A線性遞減。
灰狼演算法的結構簡單,但也不容易改進,數次改進後只是改變了全局搜索能力和局部搜索能力的比例,綜合能力並沒有太大變化。
由於原點對於灰狼演算法有著隱隱的吸引力,當測試函數目標值在原點時,其結果會異常的好。因此,灰狼演算法的實際效果沒有論文中的那麼好,但也不差,算是一個中規中矩的優化演算法。
參考文獻
Mirjalili S , Mirjalili S M , Lewis A . Grey Wolf Optimizer[J]. Advances in Engineering Software, 2014, 69:46-61. 提取碼:wpff
以下指標純屬個人yy,僅供參考
目錄
上一篇 優化演算法筆記(十七)萬有引力演算法
下一篇 優化演算法筆記(十九)頭腦風暴演算法
優化演算法matlab實現(十八)灰狼演算法matlab實現