【數學建模】(智能優化算法)天牛須算法(Beetle Antennae Search, BAS)詳解與Python實現

天牛須算法(Beetle Antennae Search, BAS)詳解與Python實現

文章目錄

  • 天牛須算法(Beetle Antennae Search, BAS)詳解與Python實現
    • 1. 引言
    • 2. 算法原理
      • 2.1 基本思想
      • 2.2 數學模型
    • 3. Python實現
    • 4.實測效果
      • 測試1. Michalewicz函數的最小化
      • 測試2. Goldstein-Price函數的約束最小化
    • 5. 算法特點
      • 5.1 優點
      • 5.2 缺點
    • 6. 改進方向
    • 7. 應用場景
    • 8. 總結
    • 參考資料

1. 引言

在眾多的智能優化算法中,天牛須算法(Beetle Antennae Search, BAS)是一種相對較新的啟發式算法,由中國學者于2017年提出。與常見的群體智能算法不同的是,本算法中只涉及一個個體。該算法模擬了天牛通過觸角探索環境尋找食物的行為,具有實現簡單、參數少、收斂速度快等特點,在函數優化、參數調整、路徑規劃等領域展現出良好的應用前景。

2. 算法原理

天牛須算法的靈感來源于自然界中天牛利用一對觸角感知周圍環境的行為。在搜索過程中,算法模擬天牛通過左右觸角探測氣味強度,并朝著氣味更強的方向移動,從而找到目標(食物源)。
天牛須算法原理示意圖

2.1 基本思想

  1. 隨機方向探測:天牛隨機選擇一個方向進行探測
  2. 雙觸角感知:在選定方向的兩側各伸出一個“觸角”進行探測
  3. 方向判斷:比較兩側觸角探測到的“氣味”(目標函數值)
  4. 位置更新:向氣味更濃(函數值更優)的方向移動

2.2 數學模型

天牛須算法的數學模型可以描述如下:

  1. 隨機方向生成

    dir = random_unit_vector()  # 生成單位隨機方向向量
    
  2. 左右觸角位置

    x l e f t = x + d ? d i r x_{left} = x + d \cdot dir xleft?=x+d?dir

    x r i g h t = x ? d ? d i r x_{right} = x - d \cdot dir xright?=x?d?dir

    其中, d d d是觸角長度,會隨著迭代逐漸減小。
    簡化后的天牛模型

  3. 位置更新

    x n e w = { x + s t e p ? d i r , if? f ( x l e f t ) < f ( x r i g h t ) x ? s t e p ? d i r , otherwise x_{new} = \begin{cases} x + step \cdot dir, & \text{if } f(x_{left}) < f(x_{right}) \\ x - step \cdot dir, & \text{otherwise} \end{cases} xnew?={x+step?dir,x?step?dir,?if?f(xleft?)<f(xright?)otherwise?

    其中, s t e p step step是步長,也會隨著迭代逐漸減小。
    步長可以設置為與觸角長度成正比,其意義是“大天牛有大觸角,小天牛有小觸角”。
    可以在選擇新位置時設置一定隨機性。

3. Python實現

下面是天牛須算法的Python實現示例:

import numpy as np
import matplotlib.pyplot as pltclass BAS:def __init__(self, fitness_func, dim=2, max_iter=100, n_beetles=1, d0=1.0, d_decay=0.95, step0=1.0, step_decay=0.95):"""初始化天牛須搜索算法參數:fitness_func: 適應度函數(目標函數)dim: 問題維度max_iter: 最大迭代次數n_beetles: 天牛數量d0: 初始觸角長度d_decay: 觸角長度衰減率step0: 初始步長step_decay: 步長衰減率"""self.fitness_func = fitness_funcself.dim = dimself.max_iter = max_iterself.n_beetles = n_beetlesself.d0 = d0self.d_decay = d_decayself.step0 = step0self.step_decay = step_decay# 初始化天牛位置(在[-5,5]^dim空間內隨機)self.beetles = np.random.uniform(-5, 5, (n_beetles, dim))self.best_position = Noneself.best_fitness = float('inf')self.fitness_history = []def normalize(self, v):"""將向量歸一化為單位向量"""norm = np.linalg.norm(v)if norm == 0:return vreturn v / normdef optimize(self):"""執行優化過程"""d = self.d0  # 初始觸角長度step = self.step0  # 初始步長for t in range(self.max_iter):for i in range(self.n_beetles):# 當前天牛位置x = self.beetles[i]# 生成隨機方向(單位向量)direction = np.random.randn(self.dim)direction = self.normalize(direction)# 計算左右觸角位置x_left = x + d * directionx_right = x - d * direction# 計算左右觸角處的適應度f_left = self.fitness_func(x_left)f_right = self.fitness_func(x_right)# 更新位置if f_left < f_right:  # 假設是最小化問題self.beetles[i] = x + step * directionelse:self.beetles[i] = x - step * direction# 邊界處理self.beetles[i] = np.clip(self.beetles[i], -5, 5)# 評估新位置fitness = self.fitness_func(self.beetles[i])# 更新全局最優if fitness < self.best_fitness:self.best_fitness = fitnessself.best_position = self.beetles[i].copy()# 記錄當前最優適應度self.fitness_history.append(self.best_fitness)# 更新參數d *= self.d_decaystep *= self.step_decayreturn self.best_position, self.best_fitness# 測試函數:Sphere函數
def sphere(x):return np.sum(x**2)# 運行算法
bas = BAS(sphere, dim=10, max_iter=200)
best_pos, best_fit = bas.optimize()# 繪制收斂曲線
plt.figure(figsize=(10, 6))
plt.plot(bas.fitness_history)
plt.xlabel('迭代次數')
plt.ylabel('最優適應度值')
plt.title('天牛須算法收斂曲線')
plt.yscale('log')
plt.grid(True)
plt.show()print(f"最優解: {best_pos}")
print(f"最優值: {best_fit}")

4.實測效果

測試1. Michalewicz函數的最小化

Michalewicz函數的最小化

測試2. Goldstein-Price函數的約束最小化

Goldstein-Price函數的約束最小化

5. 算法特點

5.1 優點

  1. 實現簡單:算法結構簡單,易于理解和實現
  2. 參數少:相比粒子群、遺傳算法等,參數更少
  3. 計算效率高:每次迭代只需少量函數評估
  4. 收斂速度快:在許多問題上表現出較快的收斂速度

5.2 缺點

  1. 易陷入局部最優:基礎版本容易早熟收斂
  2. 參數敏感:算法性能對參數設置較為敏感
  3. 維度擴展性:在高維問題上效果可能不如其他成熟算法

6. 改進方向

為了克服基礎天牛須算法的一些缺點,研究人員提出了多種改進方案:

  1. 自適應步長:根據搜索過程動態調整步長和觸角長度,可表示為:

    d t = d 0 ? δ t d_t = d_0 \cdot \delta^t dt?=d0??δt

    s t e p t = s t e p 0 ? δ t step_t = step_0 \cdot \delta^t stept?=step0??δt

    其中, δ \delta δ是衰減系數, t t t是當前迭代次數。

  2. 多天牛協同:引入多個天牛并設計信息交互機制

  3. 混合算法:與其他優化算法(如PSO、DE等)結合

  4. 精英保留:引入精英保留策略避免最優解丟失

  5. 混沌映射:使用混沌映射增強搜索的多樣性

7. 應用場景

天牛須算法已在多個領域得到應用:

  1. 參數優化:如神經網絡、控制系統參數調優
  2. 路徑規劃:無人機、機器人路徑規劃
  3. 圖像處理:圖像分割、特征提取
  4. 調度優化:生產調度、資源分配
  5. 特征選擇:機器學習中的特征選擇

8. 總結

天牛須算法作為一種新興的優化算法,憑借其簡單高效的特點,在各類優化問題中展現出良好的應用前景。雖然還存在一些局限性,但通過不斷的改進和與其他算法的結合,天牛須算法有望在更多領域發揮重要作用。

例如,我們可以用以下公式來表示天牛須算法的整體迭代過程:

X t + 1 = X t ± η t ? d t ∣ ∣ d t ∣ ∣ ? sign [ f ( X t + d t ) ? f ( X t ? d t ) ] X_{t+1} = X_t \pm \eta_t \cdot \frac{d_t}{||d_t||} \cdot \text{sign}[f(X_t + d_t) - f(X_t - d_t)] Xt+1?=Xt?±ηt??∣∣dt?∣∣dt???sign[f(Xt?+dt?)?f(Xt??dt?)]

其中, X t X_t Xt?是當前位置, η t \eta_t ηt?是步長, d t d_t dt?是隨機方向向量, f f f是目標函數, sign \text{sign} sign是符號函數。

參考資料

  1. Jiang X, Li S. BAS: Beetle Antennae Search Algorithm for Optimization Problems[J]. arXiv preprint arXiv:1710.10724, 2017.
  2. Wu Q, Shen X, Jin Y, et al. Intelligent beetle antennae search for UAV sensing and avoidance of obstacles[J]. Sensors, 2019, 19(8): 1758.
  3. Lin A, Sun W, Yu H, et al. BSAS: Beetle swarm antennae search algorithm for optimization problems[J]. IEEE Access, 2019, 7: 105467-105482.
  4. 天牛須搜索算法(BAS)

希望這篇文章能幫助您了解天牛須算法的基本原理、實現方法和應用場景。如有任何問題,歡迎在評論區留言討論!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/76741.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/76741.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/76741.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【家政平臺開發(42)】筑牢家政平臺安全防線:安全測試與漏洞修復指南

本【家政平臺開發】專欄聚焦家政平臺從 0 到 1 的全流程打造。從前期需求分析,剖析家政行業現狀、挖掘用戶需求與梳理功能要點,到系統設計階段的架構選型、數據庫構建,再到開發階段各模塊逐一實現。涵蓋移動與 PC 端設計、接口開發及性能優化,測試階段多維度保障平臺質量,…

學習筆記八——內存管理相關

&#x1f4d8; 目錄 內存結構基礎&#xff1a;棧、堆、數據段Rust 的內存管理機制&#xff08;對比 C/C、Java&#xff09;Drop&#xff1a;Rust 的自動清理機制Deref&#xff1a;為什么 *x 能訪問結構體內部值Rc&#xff1a;多個變量“共享一個資源”怎么辦&#xff1f;Weak&…

ReliefF 的原理

&#x1f31f; ReliefF 是什么&#xff1f; ReliefF 是一種“基于鄰居差異”的特征選擇方法&#xff0c;用來評估每個特征對分類任務的貢獻大小。 它的核心問題是&#xff1a; “我怎么知道某個特征是不是重要&#xff1f;是不是有能力把不同類別的數據區分開&#xff1f;” 而…

?asm匯編源代碼之-漢字點陣字庫顯示程序源代碼下載?

漢字點陣字庫顯示程序 源代碼下載 文本模式下顯示16x16點陣漢字庫內容的程序(標準16x16字庫需要使用CHGHZK轉換過后才能使用本程序正常顯示) 本程序需要調用file.asm和string.asm中的子程序,所以連接時需要把它們連接進來,如下 C:\> tlink showhzk file string 調用參…

【已更新完畢】2025泰迪杯數據挖掘競賽B題數學建模思路代碼文章教學:基于穿戴裝備的身體活動監測

基于穿戴裝備的身體活動監測 摘要 本研究基于加速度計采集的活動數據&#xff0c;旨在分析和統計100名志愿者在不同身體活動類別下的時長分布。通過對加速度數據的處理&#xff0c;活動被劃分為睡眠、靜態活動、低強度、中等強度和高強度五類&#xff0c;進而計算每個志愿者在…

Ubuntu24.04裝機安裝指南

文章目錄 Ubuntu24.04裝機安裝指南一、分區說明二、基礎軟件三、使用fcitx5配置中文輸入法四、安裝搜狗輸入法【**不推薦**】1. 安裝fcitx2. 安裝輸入法 五、禁用/home目錄下自動生成文件夾六、更新軟件源1. 針對**新配置方式**的清華源替換方法2. 針對**老配置方式**的清華源替…

互聯網三高-數據庫高并發之分庫分表ShardingJDBC

1 ShardingJDBC介紹 1.1 常見概念術語 ① 數據節點Node&#xff1a;數據分片的最小單元&#xff0c;由數據源名稱和數據表組成 如&#xff1a;ds0.product_order_0 ② 真實表&#xff1a;再分片的數據庫中真實存在的物理表 如&#xff1a;product_order_0 ③ 邏輯表&#xff1a…

BM25、BGE以及text2vec-base-chinese的區別

BM25、BGE以及text2vec-base-chinese的區別 BM25 原理:BM25(Best Matching 25)是一種基于概率檢索模型的算法,它通過考慮查詢詞與文檔之間的匹配程度、文檔的長度等因素,來計算文檔對于查詢的相關性得分。具體來說,它會給包含查詢詞次數較多、文檔長度適中的文檔更高的分…

Python中try用法、內置異常類型與自定義異常類型拓展

目錄 try介紹與語法格式try具體使用案例except的異常類型簡介案例內置的常見異常類型自定義異常類型繼承關系用途 注意事項 try介紹與語法格式 在 Python 里&#xff0c;try 語句主要用于異常處理&#xff0c;其作用是捕獲并處理代碼運行期間可能出現的異常&#xff0c;避免程…

【第41節】windows的中斷與異常及異常處理方式

目錄 一、中斷與異常處理 1.1 中斷與異常 1.2 IDT 1.3 異常的概念 1.4 異常分類 二、windows異常處理方式 2.1 概述 2.2 結構化異常處理 2.3 向量化異常處理之VEH 2.4 向量化異常處理之VCH 2.5 默認的異常處理函數 2.6 如何手動安裝 SEH 節點 2.7 異常處理的優先級…

分布式日志治理:Log4j2自定義Appender寫日志到RocketMQ

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家&#xff0c;歷代文學網&#xff08;PC端可以訪問&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移動端可微信小程序搜索“歷代文學”&#xff09;總架構師&#xff0c;15年工作經驗&#xff0c;精通Java編…

【HTML】html文件

HTML文件全解析&#xff1a;搭建網頁的基石 在互聯網的廣袤世界里&#xff0c;每一個絢麗多彩、功能各異的網頁背后&#xff0c;都離不開HTML文件的默默支撐。HTML&#xff0c;即超文本標記語言&#xff08;HyperText Markup Language&#xff09;&#xff0c;作為網頁創建的基…

oracle命令上下左右鍵無法使用如何解決?

1、問題如圖 2、解決辦法 (1) 安裝readline yum -y install readline* &#xff08;2&#xff09;安裝 rlwrap ##下載 wget http://files.cnblogs.com/files/killkill/rlwrap-0.30.tar.gz.zip ##解壓 tar -xzvf rlwrap-0.30.tar.gz.zip ##編譯安裝 ./configure make &&…

vue事假機制都有哪些

Vue 的事件機制主要包含以下幾種類型和方式&#xff0c;可以分為組件內部事件、父子組件通信事件、原生 DOM 事件封裝、修飾符增強等&#xff0c;下面詳細分類介紹&#xff1a; 一、DOM 事件綁定&#xff08;最基礎的事件&#xff09; 使用 v-on&#xff08;或簡寫 &#xff0…

系統編程2(消息隊列)

? 消息隊列概念 Linux系統中消息隊列&#xff08;Message Queue&#xff09;是進程間通信的一種方式&#xff0c;這種通信機制的好處是可以傳輸指定類型(用戶可以自行定義)的數據&#xff0c;相同類型的數據根據到達順序在隊列中進行排隊。 當然&#xff0c;不同類型的數據不…

Pytorch深度學習框架60天進階學習計劃 - 第41天:生成對抗網絡進階(二)

Pytorch深度學習框架60天進階學習計劃 - 第41天&#xff1a;生成對抗網絡進階&#xff08;二&#xff09; 7. 實現條件WGAN-GP # 訓練條件WGAN-GP def train_conditional_wgan_gp():# 用于記錄損失d_losses []g_losses []# 用于記錄生成樣本的多樣性&#xff08;通過類別分…

python 微博爬蟲 01

起因&#xff0c; 目的: ?下載單個視頻&#xff0c;完成。? 獲取某用戶的視頻列表&#xff0c;完成。剩下的就是&#xff0c; 根據視頻列表&#xff0c;逐個下載視頻&#xff0c;我沒做&#xff0c;沒意思。獲取視頻的評論&#xff0c;以后再說。 關鍵點記錄: 1. 對一個視…

Servlet、HTTP與Spring Boot Web全面解析與整合指南

目錄 第一部分&#xff1a;HTTP協議與Servlet基礎 1. HTTP協議核心知識 2. Servlet核心機制 第二部分&#xff1a;Spring Boot Web深度整合 1. Spring Boot Web架構 2. 創建Spring Boot Web應用 3. 控制器開發實踐 4. 請求與響應處理 第三部分&#xff1a;高級特性與最…

vue中根據html動態渲染內容2.0

上次使用的是p標簽用的contenteditable代替的可編輯的input&#xff0c;最后實現還是選擇了用el-input的textarea方式。 一開始考慮的是需要根據用戶輸入自動撐開輸入框&#xff0c;所以選擇了p標簽可編輯。 最后發現還是el-input會更好一點&#xff0c;只不過需要處理輸入框撐…

CentOS 系統磁盤擴容并掛載到根目錄(/)的詳細步驟

在使用 CentOS 系統時&#xff0c;經常會遇到需要擴展磁盤空間的情況。例如&#xff0c;當虛擬機的磁盤空間不足時&#xff0c;可以通過增加磁盤容量并將其掛載到根目錄&#xff08;/&#xff09;來解決。以下是一個完整的操作流程&#xff0c;詳細介紹了如何將新增的 10G 磁盤…