MATLAB數學建模(十一) | 人工蜂群算法(附MATLAB代碼)

2021-03-02 優化算法交流地
hello,大家好。各位可點擊左下方閱讀原文,訪問公眾號官方店鋪。謹防上當受騙,感謝各位支持!新來的小夥伴可在公眾號後臺回復 代碼,即可提取一整套高質量智能優化算法MATLAB代碼https://www.bilibili.com/video/BV1Ka4y1H7r7後臺有很多小夥伴留言說想學習一下人工蜂群算法(artificial bee colony,ABC),所以今天我們為各位講解ABC,讓各位小夥伴能夠快速掌握這種算法。

01 | ABC的生物背景

蜜蜂是一種群居生物,生物學家研究發現蜜蜂以跳舞的方式來交換蜜源信息。根據分工的不同,蜜蜂被分為三個工種:引領峰、跟隨蜂、偵察蜂


偵察蜂的職責是偵察蜜源(即蜜蜂的食物),一旦某一個偵察蜂找到蜜源後,實際上它的角色就切換為引領蜂了。

找到蜜源後的引領峰以跳舞的方式向同伴傳遞自己找到食物的信息,這時候一些飢餓的、沒有找到食物的蜜蜂就會沿著引領峰指明的方向去尋找食物,這些相信引領峰傳遞的信息的蜜蜂實際上就是跟隨蜂這實際上屬於招募蜜蜂的行為。

當引領峰尋找了多次蜜源後,發現再也找不到吃起來更香的蜜源後,引領峰說話的信服力會降低,於是跟隨蜂也逐漸不相信引領峰傳遞的信息。

引領峰痛定思痛,決心轉變角色,做回偵察蜂。直到再次找到高質量的蜜源後,再做回引領峰,然後再帶著大夥吃香的、喝辣的。這實際上屬於放棄蜜源的行為。

綜上,蜂群實現群體智慧的最小搜索模型包括蜜源引領蜂跟隨蜂偵察蜂共4個組成要素,以及招募蜜蜂放棄蜜源2種基本的行為。秦全德, 程適, 李麗, 等. 人工蜂群算法研究綜述[J]. 2014.

02 | ABC的算法策略

通過對ABC生物背景的理解,相信各位猜到蜜源實際上就對應ABC中的解,實際上也就等同於遺傳算法中的個體。ABC的最終目的就是找出最好的「蜜源」,也就是最好的解

那這些解如何尋找呢?也就是在ABC中如何更新這些解呢?

答案就是通過引領峰、跟隨蜂、偵察蜂這三種蜜蜂來更新最好「蜜源」的位置。這裡需要注意的一點是:引領蜂和跟隨蜂各佔蜂群的一半,數量等於蜜源的數量,且每個蜜源同一時間內只有一隻引領蜂採蜜。

有小夥伴可能會有疑問,偵察蜂怎麼沒有了?

因為偵察蜂與引領峰的角色是相互切換的,所以不是偵察蜂消失了,而是假設當前這一部分蜜蜂全是引領峰。

接下來以一個問題為例,幫助各位快速理解這三種蜜蜂是如何更新蜜源位置的?前面我們已經說過,蜜源實際與問題的解相對應。群智能算法的第一步大多是初始化種群,ABC算法也不例外。只有初始化若干個蜜源後,三種蜜蜂才會尋找蜜源。

假設我們要求解問題的維數為D,則一個解的表現形式為(即一個蜜源的位置為): 

第i個蜜源的位置初始化公式如公式(1)所示:

 

接下來就是重頭戲,三種蜜蜂更新蜜源位置的公式。因為當前蜂群中只有引領蜂和跟隨蜂,所以毫無疑問是引領峰先對蜜源種群位置進行更新。引領峰對第i個蜜源位置更新公式如(2)所示:

 

式中,d為當前位置更新的維數, 

所有的引領蜂完成式(2)的運算後,飛回信息交流區共享蜜源信息。跟隨蜂根據引領蜂分享的蜜源信息,按式(3)計算的概率進行跟隨:

 

然後,跟隨蜂採用輪盤賭的方法選擇引領蜂,即在[0,1]產生一個均勻分布的隨機數r,如果 

搜索過程中,如果蜜源 

以最小化的優化問題為例,在ABC 算法中,解的適應度評價依據式(5)計算。

綜上所述,ABC的主要步驟如下

1)初始化各蜜源 

2)為蜜源 

3)依據式(5)評價 

4) 由式(3)計算引領蜂找到的蜜源被跟隨的概率;

5)跟隨峰採用與引領蜂相同的方式進行搜索,根據貪婪選擇的方法確定保留的蜜源;

6)判斷蜜源 

7)偵察蜂根據式(4)隨機產生新蜜源;

8)t=t+1; 判斷算法是否滿足終止條件,若滿足則終止,輸出最優解,否則轉到2)。

秦全德, 程適, 李麗, 等. 人工蜂群算法研究綜述[J]. 2014.

03 | MATLAB實例

MATLAB代碼源地址:

https://yarpiz.com/297/ypea114-artificial-bee-colony

代碼中的目標函數如下:

點擊main.m函數運行代碼,結果為 

目標函數值隨迭代次數變化曲線如下圖所示:

04 | 參考文獻

1.秦全德, 程適, 李麗, 等. 人工蜂群算法研究綜述[J]. 2014

2.Karaboga D. An idea based on honey bee swarm for numerical optimization[R]. Technical report-tr06, Erciyes university, engineering faculty, computer engineering department, 2005.

各位小夥伴可在留言板留言,未來我們講解的具體內容由你做主。如果可以的話,可以把希望講解的文獻也在留言板上寫出來。我們已經終於推出粉絲QQ交流群,各位小夥伴趕快加入吧!!!

相關焦點

  • 查看matlab中函數原始碼的方法
    為了提升 「2015CUMCM 參賽隊伍」運用matlab軟體實現數學建模算法的能力,沉著應對數學建模競賽的【模型軟體求解】問題,最終在國賽中獲得榮譽,數學中國精心準備了一套能夠滿足參賽者需求的精品課程「數學建模算法之matlab實現專題」,讓大家深入數模算法方法內容、matlab軟體實現與應用,從而能夠在日後的生活和工作中獲得應用。
  • MATLAB數學建模教學(三) | 史上最強的MATLAB學習網站,你需要的這裡統統都有?
    這幾天是全國大學生數學建模競賽的比賽時間,首先預祝各位參賽的同學能夠取得好成績。今天,網上瀏覽到不少關於這次比賽的ABC題的思路及分析,但我們團隊始終堅信授人以魚不如授人以漁。所以,今天給各位分享一個我們願意稱之為史上最強的MATLAB學習網站:這個網站不僅有高質量的MATLAB原始碼,而且還有對應的講解視頻,可謂是一應俱全。
  • 數學建模必備:Matlab常用15大算法+繪圖工具
    如果你正在計劃參加數學建模,強烈推薦你必須掌握本門課程。從今天開始學習還來得及。
  • matlab和c語言的區別
    一、MATLAB簡介本文引用地址:http://www.eepw.com.cn/article/201808/388129.htmMATLAB是美國MathWorks公司出品的商業數學軟體,用於算法開發
  • Python是這樣調用matlab程序的!
    Python是純粹的自由軟體, 原始碼和解釋器CPython遵循 GPL(GNU General Public License)協議。Python語法簡潔清晰,特色之一是強制用空白符(white space)作為語句縮進。Python具有豐富和強大的庫。它常被暱稱為膠水語言,能夠把用其他語言製作的各種模塊(尤其是C/C++)很輕鬆地聯結在一起。
  • 學習matlab的一點心得體會
    我接觸Matlab的時間比較長了,最開始是在大學裡面的數學實驗課上了解了一些,學了些基礎的命令,後來參加過一次數學建模,又自學了點
  • 學習matlab必去的10大網站
    在這裡有來自世界各地的matlab大神默默無私地貢獻著他們的智慧,絕大部分代碼都是可直接閱讀的源文件。如果想要求某個算法的原始碼,不妨先到File Exchange上面搜一搜,說不準有意外的驚喜哦!唯一缺點就是絕大部分代碼都是英文書寫、英文標題,檢索之前一定要先將關鍵詞轉換成英文。如果想要找代碼跟著學習,強烈推薦大家去這裡。
  • 關於Matlab的那些事
    1.前言我接觸Matlab的時間比較長了,最開始是在大學裡面的數學實驗課上了解了一些,學了些基礎的命令,後來參加過一次數學建模,又自學了點
  • 教程 | matlab實現kmeans聚類算法
    kmeans聚類算法是一種簡單實用的聚類算法,matlab自帶函數kmeans可直接對數據進行kmeans聚類。
  • python和matlab哪個好?
    Python是純粹的自由軟體, 原始碼和解釋器CPython遵循 GPL(GNU General Public License)協議[2] 。Python語法簡潔清晰,特色之一是強制用空白符(white space)作為語句縮進。
  • 大牛心得:學習matlab的一點心得體會
    今天論文君跟大家分享一篇大牛學習matlab的心得體會。我接觸Matlab的時間比較長了,最開始是在大學裡面的數學實驗課上了解了一些,學了些基礎的命令,後來參加過一次數學建模,又自學了點。後來在課程(數值分析,微分方程數值解)中matlab經常用到,另外在幫師姐做管理方面的數學模型時用的比較多,便自學了相關方面的知識,主要是看書,自己編程還有上網交流,這時在百度上回答了很多matlab相關的問題,並成為百度matlab技術論壇的副團長,在emuch中蒙前計算模擬區區長cenwanglai看重,聘為計算模擬版的版主。
  • 蟻群算法即相關代碼實現詳解—matlab之智能算法
    蟻群算法即相關代碼實現詳解 一.算法背景 蟻群算法是近年來剛剛誕生的隨機優化方法,它是一種源於大自然的新的仿生類算法.由義大利學者Dorigo最早提出,螞蟻算法主要是通過螞蟻群體之間的信息傳遞而達到尋優的目的,最初又稱蟻群優化方法(Ant Colony
  • 觀點丨關於Matlab的那些事
    1.前言我接觸Matlab的時間比較長了,最開始是在大學裡面的數學實驗課上了解了一些,學了些基礎的命令,後來參加過一次數學建模,又自學了點
  • matlab是什麼程式語言?matlab是程式語言嗎
    是一種用於算法開發、數據可視化、數據分析以及數值計算的高級技術計算語言和交互式環境。MATLAB 是美國MathWorks公司出品的商業數學軟體,用於算法開發、數據可視化、數據分析以及數值計算的高級技術計算語言和交互式環境,主要包括MATLAB和Simulink兩大部分。MATLAB是矩陣實驗室(Matrix Laboratory)的簡稱,和MathemaTIca、Maple並稱為三大數學軟體。它在數學類科技應用軟體中在數值計算方面首屈一指。
  • 代寫程序代做C++ Java matlab python php留學生設計代碼編程
    47、代做用fluent二次開發來做48、代做recurdyn 代做49、代做金融數學的計算能做嗎,手算50、代做sas回歸分析,要會計專業的51、代做fortran語言程序編寫52、代做基於abaqus,可以結合python或者matlab53、代做幫忙代寫經濟學的讀後感54、代做用lingo
  • 想通過視頻自學MATLAB的同學戳這裡!
    Matlab 神經網絡(八.1):SVM神經網絡理論實際應用 9. Matlab 神經網絡(八.2):SVM神經網絡理論理論分析 10. Matlab 神經網絡(九):粒子群算法(PSO)實現函數極值優化Matlab 數學運算視頻教學 1. Matlab 數值運算(1):方程求根 2.
  • [代碼資源] 數學建模基礎算法(2) 非線性規劃
    一般說來,解非線性規劃不像線性規劃有單純形法這一通用方法,非線性規劃目前還沒有適於各種問題的一般算法,各個方法都有自己特定的適用範圍。下面針對不同問題提出相應算法。1.無約束一維函數--->fminbnd:黃金分割法、牛頓法、拋物線法等!
  • 全國大學生數學建模競賽舉辦,哈工大被通知不能使用MATLAB
    在2020年的全國大學生數學建模大賽組委會已經發出通知,禁止哈工大的參賽隊使用MATLAB。目前matlab其實也是類似,儘管我們可以使用盜版。但是這也就導致了很多參賽的學生只會使用matlab,對於免費的python,沒有學習的動力。這次的matlab事件,再次提醒我們,免費的盜版,代價其實非常高昂,在關鍵的軟體上,我們一定要有自己的可替代的產品。另外,在教學方面,儘量採用開源的產品,對於由私營公司,特別是美國公司的軟體,保持警惕。
  • 數據挖掘Matlab零基礎自學學習路線圖
    matlab簡介:MATLAB是美國MathWorks公司出品的商業數學軟體,用於算法開發、數據可視化、數據分析以及數值計算的高級技術計算語言和交互式環境,主要包括MATLAB和Simulink兩大部分。
  • Matlab 2018a中文版下載地址及安裝教程!
    軟體介紹: Matlab是由MathWorks公司最新出品的功能強大的商業數學軟體,軟體主要用於算法開發、數據可視化、數據分析以及數值計算等方向,可以進行矩陣運算、繪製函數和數據、實現算法、創建用戶界面、連接其他程式語言的程序等,主要應用於工程計算、控制設計、信號處理與通訊、圖像處理、信號檢測、金融建模設計與分析等領域。