導航:首頁 > 源碼編譯 > 胡凡演算法筆記有配套視頻參考嗎

胡凡演算法筆記有配套視頻參考嗎

發布時間:2023-02-28 14:28:17

1. 鄭大計算機考研不考408了

鄭大計算機科學與技術專業的研究生招生在產業技術研究院下面,這個機構整合了信息工程學院、電氣學院、軟體學院等單位,其15、16年各個專業考試目錄(也就是招生目錄,在9月份發布)見附件,鄭大產研院官網上也可以找到。計科專業目錄:
學碩初試科目有:408(計算機學科綜合基礎)、301(數學一)、201(英語一)、101(思想政治);
專碩則把數一換成數二,英一換成英二,408換成909(自命題);//專碩學碩前年開始沒有太大區別,而專碩較簡單,導致16年報名人數太多,很多人因此不得不調劑,最慘的有全日制調劑到非全的。
復試科目15年(即產業技術研究院成立第一年)有資料庫和實驗(筆試、不上機)以及英語口語聽力、面試,跨考生加試編譯原理;
16年的復試科目(時間17年3月底)同上,跨考生沒有加試,但要求相近專業,實際上理工科都可以報考,比如老師很歡迎本科數學專業的考生報考。
16年復試:
鄭大2月中旬出初試成績(可以著手調劑、春招找工作或聯系導師)
3月中旬出國家線和復試線,
3月下旬出復試名單,
3月底復試。其具體時間也可以在產研院官網查到。
其中資料庫、實驗、英語聽力一起考。資料庫難度較低,與期末卷持平;聽力難度大概有四級水平;實驗題相對簡單:只有兩道,
一、C語言的函數的問題,可以從C與C++、java的區別說,C++面向對象的特徵、聲明與定義、java安全性啥的。
二、定義一個結構體變數,把它寫入文件、讀出、賦值、寫回、讀出,排序,寫回。比計算機等級考試二級的難度稍高,都是C的基本應用。有時候某個庫函數想不起來,可以多些點注釋,主要是想法要清晰、總體思路正確。考試不要慌,你到這時已經是「身經百戰」了。
16年初試:我本人屬於跨考生,在8月初開始復習。
關於408,我課本用的是謝希仁的計算機網路、湯子瀛的操作系統、嚴蔚敏的數據結構、唐朔飛的計算機組成原理,題就看了兩遍王道單科與真題8套,當然其他的資料也行,畢竟你要初試拿高分,除了理解好課本上的基礎,還需要多做題(當然編程大神這一步可以省去,但說句不好聽的,真牛逼的要麼簽了滿意的公司、要麼保研了,誰會來考?)。
至於英語我的經驗就是單詞至少要過三遍以上,做題就把真題反復做就行了,再加個150篇閱讀做完,60以上應該問題不大,我時間有點緊張,更多英語資料可以看其他考研人推薦的,比這個帖子詳盡。
數學我復習得也很緊張,把李王的660勉強做完、復習全書過兩遍(相應的練習冊做了一半)、歷年真題做了兩遍,最後勉強及格,不過我作為一個曾經的學渣還是知足了。
政治選擇題是拉分的關鍵,要多練,我選的肖秀榮,把他出的書全買了,看與做了兩遍。
這里也許班門弄斧了,只希望對後面考研人有一定參考價值。
復試提醒:
英語口語是和兩位老師對話交談,不要緊張,慢慢說就行。
擔心實驗題、基礎不好的同學可以看一下胡凡的《演算法筆記》,我本人是受益匪淺。
面試准備好自我介紹,問題如實回答,老師都能看出來真假,適當表現出自己的優秀方面。
資料庫不要買王珊、嚴師煊的,鄭大考的范明、葉陽東的版本。
跨考生的話,編譯原理即使不加試,以後也是要看的,早看有好處。可以買陳火旺的。
鄭大育博書店的資料非常坑,不要買,自己在網上找復試資料也不要信那些考研群里的廣告,但群、論壇是相互交流信息的好地方。
初試提醒:
考前一星期焦躁的話看不進去書可以抄英文、政治,適當放鬆放鬆。
考前兩天休息好,翻翻基礎知識和真題。
考試時,遇見不會別胡思亂想,先易後難,把握好時間。
政治選擇遇見糾結的選項就先憑感覺選個,在選擇上死扣太久影響後面作答時間,問答就是套話,實在不行自己編,不要管旁邊的人寫多少,做好自己的題。
英語先做閱讀,之後寫作,完形填空最後時間不夠全瞎蒙也可以。
數學,智者見智仁者見仁,唯一的建議就是不要在難題上死磕,除非你有很大把握能做出來並做對。
專業課,選擇題看平時功底,佔80分,是重中之重,大題也是先易後難,16年的408卷網路、os較為簡單,數據結構較難,組成原理很難;演算法想不起來用笨方法也要寫一部分。
多說幾句:演草養成整齊書寫的習慣,有利於檢查糾錯,而且考場上只給你一張演草紙;數學最基礎的定理定義要掌握牢固!數學最基礎的定理定義要掌握牢固!數學最基礎的定理定義要掌握牢固!英語作文不僅要背、讀,還要多寫幾篇,不然到考場上手生;考研是考的積累,而非當天的超常發揮,過程努力了也就不會後悔;最後送那些可能猶豫迷茫的同學一句話:貴在堅持,如果決定了考研這條路,就要堅定不移,堅持下去,明天一定會是光明的!

2. 優化演算法筆記(五)粒子群演算法(3)

(已合並本篇內容至粒子群演算法(1))

上一節中,我們看到小鳥們聚集到一個較小的范圍內後,不會再繼續集中。這是怎麼回事呢?
猜測:
1.與最大速度限制有關,權重w只是方便動態修改maxV。
2.與C1和C2有關,這兩個權重限制了鳥兒的搜索行為。
還是上一節的實驗, 。現在我們將maxV的值有5修改為50,即maxV=50,其他參數不變。參數如下

此時得到的最優位值的適應度函數值為0.25571,可以看出與maxV=5相比,結果差了很多而且小鳥們聚集的范圍更大了。
現在我們設置maxV=1,再次重復上面的實驗,實驗結果如下:

這次最終的適應度函數值為,比之前的結果都要好0.00273。從圖中我們可以看出,小鳥們在向一個點集中,但是他們飛行的速度比之前慢多了,如果問題更復雜,可能無法等到它們聚集到一個點,迭代就結束了。
為什麼maxV會影響鳥群的搜索結果呢?
我們依然以maxV=50為例,不過這次為了看的更加清晰,我們的鳥群只有2隻鳥,同時將幀數放慢5倍以便觀察。

思路一:限制鳥的最大飛行速率,由於慣性系數W的存在,使得控制最大速率和控制慣性系數的效果是等價的,取其一即可。
方案1:使慣性系數隨著迭代次數增加而降低,這里使用的是線性下降的方式,即在第1次迭代,慣性系數W=1,最後一次迭代時,慣性系數W=0,當然,也可以根據自己的意願取其他值。
實驗參數如下:

小鳥們的飛行過程如上圖,可以看到效果很好,最後甚至都聚集到了一個點。再看看最終的適應度函數值8.61666413451519E-17,這已經是一個相當精確的值了,說明這是一個可行的方案,但是由於其最後種群過於集中,有陷入局部最優的風險。
方案2:給每隻鳥一個隨機的慣性系數,那麼鳥的飛行軌跡也將不再像之前會出現周期性。每隻鳥的慣性系數W為(0,2)中的隨機數(保持W的期望為1)。
實驗參數如下:

可以看到小鳥們並沒有像上一個實驗一樣聚集於一個點,而是仍在一個較大的范圍內進行搜索。其最終的適應度函數為0.01176,比最初的0.25571稍有提升,但並不顯著。什麼原因造成了這種情況呢?我想可能是由於慣性系數成了期望為1的隨機數,那麼小鳥的飛行軌跡的期望可能仍然是繞著一個四邊形循環,只不過這個四邊形相比之前的平行四邊形更加復雜,所以其結果也稍有提升,當然對於概率演算法,得到這樣的結果可能僅僅是因為運氣不好
我們看到慣性系數W值減小,小鳥們聚攏到一處的速度明顯提升,那麼,如果我們去掉慣性系數這個參數會怎麼樣呢。
方案3:取出慣性系數,即取W=0,小鳥們只向著那兩個最優位置飛行。

可以看見鳥群們迅速聚集到了一個點,再看看得到的結果,最終的適應度函數值為2.9086886073362966E-30,明顯優於之前的所有操作。
那麼問題來了,為什麼粒子群演算法需要一個慣性速度,它的作用是什麼呢?其實很明顯,當鳥群迅速集中到了一個點之後它們就喪失了全局的搜索能力,所有的鳥會迅速向著全局最優點飛去,如果當前的全局最優解是一個局部最優點,那麼鳥群將會陷入局部最優。所以,慣性系數和慣性速度的作用是給鳥群提供跳出局部最優的可能性,獲得這個跳出局部最優能力的代價是它們的收斂速度減慢,且局部的搜索能力較弱(與當前的慣性速度有關)。
為了平衡局部搜索能力和跳出局部最優能力,我們可以人為的干預一下慣性系數W的大小,結合方案1和方案2,我們可以使每隻鳥的慣性系數以一個隨機周期,周期性下降,若小於0,則重置為初始值。

這樣結合了方案1和方案2的慣性系數,也能得到不錯的效果,大家可以自己一試。

思路二:改變小鳥們向群體最優飛行和向歷史最優飛行的權重。
方案4:讓小鳥向全局最優飛行的系數C2線性遞減。

小鳥們的飛行過程與之前好像沒什麼變化,我甚至懷疑我做了假實驗。看看最終結果,0.7267249621552874,這是到目前為止的最差結果。看來這不是一個好方案,讓全局學習因子C2遞減,勢必會降低演算法的收斂效率,而慣性系數還是那麼大,小鳥們依然會圍繞歷史最優位置打轉,畢竟這兩個最優位置是有一定關聯的。所以讓C1線性遞減的實驗也不必做了,其效果應該與方案4相差不大。
看來只要是慣性系數不變怎麼修改C1和C2都不會有太過明顯的效果。為什麼實驗都是參數遞減,卻沒有參數遞增的實驗呢?
1.慣性系數W必須遞減,因為它會影響鳥群的搜索范圍。
2.如果C1和C2遞增,那麼小鳥的慣性速度V勢必會跟著遞增,這與W遞增會產生相同的效果。

上面我們通過一些實驗及理論分析了粒子群演算法的特點及其參數的作用。粒子群作為優化演算法中模型最簡單的演算法,通過修改這幾個簡單的參數也能夠改變演算法的優化性能可以說是一個非常優秀的演算法。
上述實驗中,我們僅分析了單個參數對演算法的影響,實際使用時(創新、發明、寫論文時)也會同時動態改變多個參數,甚至是參數之間產生關聯。
實驗中,為了展現實驗效果,maxV取值較大,一般取值為搜索空間范圍的10%-20%,按上面(-100,100)的范圍maxV應該取值為20-40,在此基礎上,方案1、方案2效果應該會更好。
粒子群演算法是一種概率演算法,所以並不能使用一次實驗結果來判斷演算法的性能,我們需要進行多次實驗,然後看看這些實驗的效果最終來判斷,結果必須使用多次實驗的統計數據來說明,一般我們都會重復實驗30-50次,為了發論文去做實驗的小夥伴們不要偷懶哦。
粒子群演算法的學習目前告一段落,如果有什麼新的發現,後面繼續更新哦!
以下指標純屬個人yy,僅供參考

目錄
上一篇 優化演算法筆記(四)粒子群演算法(2)
下一篇 優化演算法筆記(六)遺傳演算法

3. 優化演算法筆記(七)差分進化演算法

(以下描述,均不是學術用語,僅供大家快樂的閱讀)
差分進化演算法(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實現

4. 優化演算法筆記(八)人工蜂群演算法

(以下描述,均不是學術用語,僅供大家快樂的閱讀)
工蜂群演算法(Artificial Bee Colony Algorithm,ABC)是一種模仿蜜蜂采蜜機理而產生的群智能優化演算法。其原理相對復雜,但實現較為簡單,在許多領域中都有研究和應用。
人工蜂群演算法中,每一個蜜源的位置代表了待求問題的一個可行解。蜂群分為采蜜蜂、觀察蜂和偵查蜂。采蜜蜂與蜜源對應,一個采蜜蜂對應一個蜜源。觀察蜂則會根據采蜜蜂分享的蜜源相關信息選擇跟隨哪個采蜜蜂去相應的蜜源,同時該觀察蜂將轉變為偵查蜂。偵查蜂則自由的搜索新的蜜源。每一個蜜源都有開採的限制次數,當一個蜜源被采蜜多次而達到開采限制次數時,在該蜜源采蜜的采蜜蜂將轉變為偵查蜂。每個偵查蜂將隨機尋找一個新蜜源進行開采,並轉變成為采蜜蜂。

下面是我的實現方式(我的答案):
1. 三種蜜蜂之間可以相互轉化。
采蜜蜂->觀察蜂:有觀察蜂在采蜜過程中發現了比當前采蜜蜂更好的蜜源,則采蜜蜂放棄當前蜜源轉而變成觀察蜂跟隨優質蜜源,同時該觀察蜂轉變為采蜜蜂。
采蜜蜂->觀察蜂:當該采蜜蜂所發現的蜜源被開采完後,它會轉變為觀察蜂去跟隨其他采蜜蜂。
采蜜蜂->偵查蜂:當所有的采蜜蜂發現的蜜源都被開采完後,采蜜蜂將會變為偵查蜂,觀察蜂也會變成偵查蜂,因為大家都無蜜可采。
偵查蜂->采蜜蜂、觀察蜂:偵查蜂隨機搜索蜜源,選擇較好的數個蜜源位置的蜜蜂為采蜜蜂,其他蜜蜂為觀察蜂。

2.蜜源的數量上限
蜜源的數量上限等於采蜜蜂的數量上限。初始化時所有蜜蜂都是偵查蜂,在這些偵查蜂所搜索到的蜜源中選出數個較優的蜜源,發現這些蜜源的偵查蜂變為采蜜蜂,其他蜜蜂變為觀察蜂。直到所有的蜜源都被開采完之前,蜜源的數量不會增加,因為這個過程中沒有產生偵查蜂。所有的蜜源都被開采完後,所有的蜜蜂再次全部轉化為偵查蜂,新的一輪蜜源搜索開始。也可以在一個蜜源開采完時馬上產生一個新的蜜源補充,保證在整個開采過程中蜜源數量恆定不變。

蜜源的開采實際上就是觀察蜂跟隨采蜜蜂飛向蜜源的過程。得到的下一代的位置公式如下:

表示第i只觀察蜂在第t代時隨機選擇第r只採蜜蜂飛行一段距離,其中R為(-1,1)的隨機數。

一隻觀察蜂在一次迭代過程中只能選擇一隻采蜜蜂跟隨,它需要從眾多的采蜜蜂中選擇一隻來進行跟隨。觀察蜂選擇的策略很簡單,隨機跟隨一隻采蜜蜂,該采蜜蜂發現的蜜源越優,則選擇它的概率越大。
是不是很像輪盤賭,對,這就是輪盤賭,同時我們也可以稍作修改,比如將勤勞的小蜜蜂改為懶惰的小蜜蜂,小蜜蜂會根據蜜源的優劣和距離以及開采程度等因素綜合來選擇跟隨哪只採蜜蜂(雖然影響不大,但聊勝於無)。
忘記了輪盤賭的小夥伴可以看一下 優化演算法筆記(六)遺傳演算法 。
下面是我的人工蜂群演算法流程圖

又到了實驗環節,參數實驗較多,全部給出將會佔用太多篇幅,僅將結果進行匯總展示。

實驗1:參數如下

上圖分別為采蜜蜂上限為10%總數和50%總數的情況,可以看出當采蜜蜂上限為10%總群數時,種群收斂的速度較快,但是到最後有一個點死活不動,這是因為該點作為一個蜜源,但由於適應度值太差,使用輪盤賭被選擇到的概率太小從而沒有得到更佳的蜜源位置,而因未開采完,采蜜蜂又不能放棄該蜜源。
看了看采蜜蜂上限為50%總群數時的圖,發現也有幾個點不動的狀態,可以看出,這時不動的點的數量明顯多於上限為10%總數的圖,原因很簡單,采蜜蜂太多,「先富」的人太多,而「後富」的人較少,沒有帶動「後富者」的「先富者」也得不到發展。
看看結果

嗯,感覺結果並沒有什麼差別,可能由於問題較簡單,迭代次數較少,無法體現出采蜜蜂數對於結果的影響,也可能由於蜜源的搜索次數為60較大,總群一共只能對最多20*50/60=16個蜜源進行搜索。我們將最大迭代次數調大至200代再看看結果

當最大迭代次數為200時,人工蜂群演算法的結果如上圖,我們可以明顯的看出,隨著采蜜蜂上限的上升,演算法結果的精度在不斷的下降,這也印證了之前的結果,由於蜜源搜索次數較大(即搜索深度較深)采蜜蜂數量越多(搜索廣度越多),結果的精度越低。不過影響也不算太大,下面我們再來看看蜜源最大開采次數對結果的影響。
實驗2:參數如下

上圖分別是蜜源開采限度為1,20和4000的實驗。
當蜜源開采上限為1時,即一個蜜源只能被開采一次,即此時的人工蜂群演算法只有偵查蜂隨機搜索的過程,沒有觀察蜂跟隨采蜜蜂的過程,可以看出圖中的蜜蜂一直在不斷的隨機出現在新位置不會向某個點收斂。
當蜜源開采上限為20時,我們可以看到此時種群中的蜜蜂都會向一個點飛行。在一段時間內,有數個點一動不動,這些點可能就是采蜜蜂發現的位置不怎麼好的蜜源,但是在幾次迭代之後,它們仍會被觀察蜂開采,從而更新位置,蜜源開采上限越高,它們停頓的代數也會越長。在所有蜜蜂都收斂於一個點之後,我們可以看到仍會不斷的出現其他的隨機點,這些點是偵查蜂進行隨機搜索產生的新的蜜源位置,這些是人工蜂群演算法跳出局部最優能力的體現。
當蜜源開采上限為4000時,即不會出現偵查蜂的搜索過程,觀察蜂只會開采初始化時出現的蜜源而不會采蜜蜂不會有新的蜜源產生,可以看出在蜂群收斂後沒有出現新的蜜源位置。

看看最終結果,我們發現,當蜜源開采上線大於1時的結果提升,但是好像開采上限為5時結果明顯好於開采次數上限為其他的結果,而且隨著開采次數不斷上升,結果在不斷的變差。為什麼會出現這樣的結果呢?原因可能還是因為問題較為簡單,在5次開採的限度內,觀察蜂已經能找到更好的蜜源進行開采,當問題較為復雜時,我們無法知曉開采發現新蜜源的難度,蜜源開采上限應該取一個相對較大的值。當蜜源開采限度為4000時,即一個蜜源不可能被開采完(開采次數為20(種群數)*200(迭代次數)),搜索的深度有了但是其結果反而不如開采限度為幾次幾十次來的好,而且這樣不會有偵查蜂隨機搜索的過程,失去了跳出局部最優的能力。
我們應該如何選擇蜜源的最大開采次數限制呢?其實,沒有最佳的開采次數限制,當適應度函數較為簡單時,開采次數較小時能得到比較好的結果,但是適應度函數較復雜時,經過試驗,得出的結果遠差於開采次數較大時。當然,前面就說過,適應度函數是一個黑盒模型,我們無法判斷問題的難易。那麼我們應該選擇一個適中的值,個人的選擇是種群數的0.5倍到總群數的2倍作為蜜源的最大開采次數,這樣可以保證極端情況下,1-2個迭代周期內小蜜蜂們能將一個蜜源開采完。

人工蜂群演算法算是一個困擾我比較長時間的演算法,幾年時間里,我根據文獻實現的人工蜂群演算法都有數十種,只能說人工蜂群演算法的描述太過模糊,或者說太過抽象,研究者怎麼實現都說的通。但是通過實現多次之後發現雖然實現細節大不相同,但效果相差不多,所以我們可以認為人工蜂群演算法的穩定性比較強,只要實現其主要思想即可,細節對於結果的影響不太大。
對於人工蜂群演算法影響最大的因素還是蜜源的開采次數限制,開采次數限制越大,對同一蜜源的開發力度越大,但是分配給其他蜜源的搜索力度會相對減少,也會降低蜂群演算法的跳出局部最優能力。可以動態修改蜜源的開采次數限制來實現對演算法的改進,不過效果不顯著。
其次對於人工蜂群演算法影響是三類蜜蜂的搜索行為,我們可以重新設計蜂群的搜索方式來對演算法進行改進,比如采蜜蜂在開采蜜源時是隨機飛向其他蜜源,而觀察蜂向所選的蜜源靠近。這樣改進有一定效果但是在高維問題上效果仍不明顯。
以下指標純屬個人yy,僅供參考

目錄
上一篇 優化演算法筆記(七)差分進化演算法
下一篇 優化演算法筆記(九)杜鵑搜索演算法

優化演算法matlab實現(八)人工蜂群演算法matlab實現

5. 優化演算法筆記(十八)灰狼演算法

(以下描述,均不是學術用語,僅供大家快樂的閱讀)
灰狼演算法(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實現

閱讀全文

與胡凡演算法筆記有配套視頻參考嗎相關的資料

熱點內容
pdf背景綠色 瀏覽:610
記事本dos命令 瀏覽:274
伺服器如何搭建多個節點 瀏覽:326
acx演算法 瀏覽:258
幽冥詭匠漫畫全集用什麼app可以看 瀏覽:1001
租用伺服器為什麼越來越慢 瀏覽:960
演算法創新就業方向 瀏覽:423
演算法最優解作者 瀏覽:868
通達信紅綠寶塔線指標源碼 瀏覽:667
app是什麼東西合法嗎 瀏覽:231
怎麼鎖app視頻教程 瀏覽:841
迅捷pdf注冊碼生成器 瀏覽:749
androidsdkosx 瀏覽:303
壓縮面膜紙熒光 瀏覽:841
app怎麼分身三個 瀏覽:744
電影bt下載源碼 瀏覽:422
iwatch屏幕加密晶元 瀏覽:570
公安主題網站源碼 瀏覽:986
天津市伺服器供應商雲伺服器 瀏覽:117
數控車床子程序編程 瀏覽:112