蜜獾算法(HBA,Honey Badger Algorithm)

2021年由Hashim等人提出(論文:Honey Badger Algorithm: A New Metaheuristic Algorithm for Solving Optimization Problems)。模擬蜜獾在自然界中的智能捕食行為,屬于群體智能優化算法(與粒子群PSO、遺傳算法GA同屬一類),適用于連續優化問題

一 行為模型

蜜獾的兩種主要行為驅動算法設計:

(1)挖掘模式:

針對地下獵物:通過嗅覺定位 + 動態挖掘路徑。

(2)采蜜模式:

跟隨導蜜鳥定位蜂巢 → 直接奔襲蜜源。

二??數學模型與迭代步驟

2.1關鍵變量定義:

蜜獾位置:候選解向量 $x_i$

獵物強度(I)

$ I_i = \frac{?{F(x_i) - \min(F)}}{\max(F) - \min(F)} + \epsilon $

$F(x_i)$:個體 $x_i$ 的目標函數值(如適應度)

$F_{\min},F_{\max}$?:當前種群中最小和最大函數值,兩者做差可以將I進行歸一化處理

$\epsilon$:極小常數(防止分母為零)

上述公式代標強度的范圍最大是1+$\epsilon$,最小是?$\epsilon$

函數值 $F(x_i)$ 反映解的質量。優化問題中,$F(x_i)$ 越小(化最小問題)表示解越優,更優解代表更接近全局最優解,代表與“獵物”的隱含距離更小,因此隱含距離越小,強度越小,接近程度越大。

個體函數值 F(x)F(x)F(x)與最優解距離計算強度 IiI_iIi?強度 vs 距離關系
A(最優)$F_{\min}=5$最近$I_A=\frac{5-5}{20-5}+0.01=0.01$強度最小
B$F=15$中等$I_B=\frac{15-5}{20-5}+0.01\approx 0.67$強度中等
C(最差)$F_{\max}=20$最遠$I_C=\frac{20-5}{20-5}+0.01=1.01$強度最大

強度越小越好。

距離大???F(xi)差???(F(xi)?Fmin?)?↑???I_{i}↑???算法反饋:加大搜索步長

這種設計以極低計算代價實現了蜜獾“嗅到遠距離獵物時采取更大動作”的生物智能模擬。

為什么不用幾何距離?

避免高維距離計算、函數值差距能推廣到離散/非幾何空間,泛用性高、算法運行中已計算 $F(x_i)$,復用數據無需額外開銷,效率高。

2.2探索階段(Exploration)- 氣味擴散

基于獵物強度的全局搜索:

$ \vec{x}_{new} = \vec{x}_{prey} + F \cdot \vec{r}_1 \cdot \alpha \cdot I \cdot | \cos(2\pi r_2) \cdot [1 - \cos(2\pi r_3)] | $

$\vec{x}_{prey}$:當前最佳獵物位置

$F$:控制搜索方向(±1隨機切換)

$r_1, r_2, r_3$?:隨機向量

$\alpha$:密度因子(隨迭代遞減)

強度I的作用

I_{i} (解質量差、距離遠)→ 乘以 I_{i}? 后步長增大 → 加強全局探索

I_{i} (解質量好、距離近)→ 乘以 I_{i}步長減小 → 精細局部開發

2.3開發階段(Exploitation)- 精確捕食

局部挖掘(模擬蜜獾洞穴內捕獵):

$ \vec{x}_{new} = \vec{x}_{prey} + F \cdot \vec{r}_4 \cdot \mathit{\alpha} \cdot | \vec{x}_{prey} - \vec{x}_{i} | $

$\vec{r}_4$?:隨機向量

$| \vec{x}_{prey} - \vec{x}_{i} |$:個體到獵物的距離

通過密度因子 $\alpha$ 動態平衡探索與開發:

$ \alpha = C \cdot \exp\left(-\frac{t}{T_{max}}\right) $

$C$ 為常數,$t$ 為當前迭代,$T_{max}$? 為最大迭代)

決策規則:若 $rand < \delta$$\delta$ 為切換閾值),使用挖掘模式;否則使用采蜜模式。

三 實現方法

3.1過程示例

初始化種群位置 x_i, i=1,2,...,N
計算適應度值 F(x_i)
while t < T_max:更新密度因子 α計算獵物強度 I_ifor each 蜜獾個體:if rand < δ:執行探索階段(氣味擴散)else:執行開發階段(挖掘捕食)更新當前位置 x_i計算新適應度 F(x_i)更新全局最優解 x_preyt = t + 1
返回最優解 x_prey

3.2參數設置

參數意義推薦值
$N$種群規模30~50
$\delta$模式切換閾值0.8
$C$密度衰減常數2.0
$T_{max}$最大迭代次數100~500

3.3優勢和局限性

優勢局限性
全局探索能力強(氣味機制)對高維問題敏感
局部開發高效(動態密度因子)參數需經驗調整(如δ)
收斂速度快于傳統算法(PSO等)易陷局部最優的改進變體
代碼實現簡單

四 應用場景?

工程優化:結構設計、PID控制器調參

人工智能:神經網絡超參數優化

能源管理:光伏陣列最大功率點跟蹤(MPPT)

研究方向:離散化改進(如HBA-TSP)、多目標版本(MO-HBA)

五?在CEC2017測試函數集上使用HBA的python代碼

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocatorclass HBA:def __init__(self, obj_func, dim=30, pop_size=100, max_iter=1000, lb=-100, ub=100, C=2, delta=0.8):"""蜜獾算法 (Honey Badger Algorithm)參數:obj_func -- 目標函數dim -- 問題維度pop_size -- 種群大小max_iter -- 最大迭代次數lb -- 變量下界ub -- 變量上界C -- 密度因子常數delta -- 模式切換閾值"""self.obj_func = obj_funcself.dim = dimself.pop_size = pop_sizeself.max_iter = max_iterself.lb = lbself.ub = ubself.C = Cself.delta = delta# 初始化種群self.positions = np.random.uniform(lb, ub, (pop_size, dim))self.fitness = np.zeros(pop_size)self.best_position = np.zeros(dim)self.best_fitness = np.infself.convergence_curve = np.zeros(max_iter)def evaluate(self):"""評估所有個體適應度"""for i in range(self.pop_size):self.fitness[i] = self.obj_func(self.positions[i])if self.fitness[i] < self.best_fitness:self.best_fitness = self.fitness[i]self.best_position = self.positions[i].copy()def optimize(self):"""執行優化過程"""self.evaluate()  # 初始評估for t in range(self.max_iter):# 1. 計算獵物強度f_min = np.min(self.fitness)f_max = np.max(self.fitness)I = (self.fitness - f_min) / (f_max - f_min + 1e-25)  # 避免除零I = 1 + I  # 確保強度至少為1# 2. 更新密度因子alpha = self.C * np.exp(-t / self.max_iter)# 3. 更新每個個體位置for i in range(self.pop_size):# 為每個個體生成隨機方向因子F = 1 if np.random.rand() < 0.5 else -1  # 隨機方向(在循環內部重新定義)if np.random.rand() < self.delta:  # 挖掘模式(探索)r1, r2, r3 = np.random.rand(3)  # 只需要3個隨機數# 氣味導向的位置更新new_pos = self.best_position + F * r1 * alpha * I[i] * \np.abs(np.cos(2 * np.pi * r2) * (1 - np.cos(2 * np.pi * r3)))else:  # 采蜜模式(開發)r4 = np.random.rand()# 動態挖掘的位置更新new_pos = self.best_position + F * r4 * alpha * np.abs(self.best_position - self.positions[i])# 越界處理new_pos = np.clip(new_pos, self.lb, self.ub)# 計算新位置適應度new_fitness = self.obj_func(new_pos)# 更新個體位置和適應度if new_fitness < self.fitness[i]:self.positions[i] = new_posself.fitness[i] = new_fitnessif new_fitness < self.best_fitness:self.best_position = new_pos.copy()self.best_fitness = new_fitness# 記錄當前最優解self.convergence_curve[t] = self.best_fitnessprint(f"Iteration {t + 1}/{self.max_iter} - Best Fitness: {self.best_fitness:.6e}")return self.best_position, self.best_fitness, self.convergence_curve# ===================== CEC2017測試函數集實現 ========================
def cec17_f1(x):"""Shifted and Rotated Bent Cigar Function (Function 1)"""d = len(x)z = x - 100  # Shift to new optimumrotated_z = z @ rot_matrix[d] if d in rot_matrix else z  # Rotationreturn rotated_z[0] ** 2 + 1e6 * np.sum(rotated_z[1:] ** 2) + 100def cec17_f3(x):"""Shifted and Rotated Rosenbrock's Function (Function 3)"""d = len(x)z = 0.5 * (x - 40)  # Shift and scalerotated_z = z @ rot_matrix[d] if d in rot_matrix else z  # Rotationsum_val = 0for i in range(d - 1):sum_val += 100 * (rotated_z[i] ** 2 - rotated_z[i + 1]) ** 2 + (rotated_z[i] - 1) ** 2return sum_val + 300def cec17_f5(x):"""Shifted and Rotated Ackley's Function (Function 5)"""d = len(x)z = x + 50  # Shift to new optimumrotated_z = (z @ rot_matrix[d]) if d in rot_matrix else z  # Rotationsum1 = np.sum(rotated_z ** 2)sum2 = np.sum(np.cos(2 * np.pi * rotated_z))return -20 * np.exp(-0.2 * np.sqrt(sum1 / d)) - np.exp(sum2 / d) + 20 + np.e + 500# ===================== 輔助函數 ========================
def generate_rotation_matrix(dim):"""生成隨機旋轉矩陣(模擬CEC2017的旋轉特性)"""H = np.random.randn(dim, dim)Q, R = np.linalg.qr(H)return Qdef plot_results(convergence, func_name, dim):"""繪制收斂曲線"""plt.figure(figsize=(10, 6))plt.semilogy(convergence, 'b-', linewidth=2)plt.title(f'HBA on {func_name} - Dimension {dim}\nFinal Fitness: {convergence[-1]:.4e}', fontsize=12)plt.xlabel('Iteration', fontsize=12)plt.ylabel('Fitness (log scale)', fontsize=12)plt.grid(True, which='both', linestyle='--')plt.gca().xaxis.set_major_locator(MaxNLocator(integer=True))plt.tight_layout()plt.show()# ===================== 主程序 ========================
if __name__ == "__main__":# 實驗參數dim = 30  # 問題維度max_iter = 1000  # 最大迭代次數pop_size = 100  # 種群大小# 預生成旋轉矩陣 (模擬CEC2017特性)np.random.seed(42)rot_matrix = {dim: generate_rotation_matrix(dim)}# 定義要測試的函數test_functions = {"CEC2017 F1 (Bent Cigar)": cec17_f1,"CEC2017 F3 (Rosenbrock)": cec17_f3,"CEC2017 F5 (Ackley)": cec17_f5}# 對每個測試函數運行HBAresults = {}for name, func in test_functions.items():print(f"\n{'=' * 80}")print(f"Optimizing Function: {name}")print(f"{'=' * 80}")# 初始化并運行HBAoptimizer = HBA(obj_func=func,dim=dim,pop_size=pop_size,max_iter=max_iter,lb=-100,ub=100)best_sol, best_fit, convergence = optimizer.optimize()results[name] = convergence# 打印最終結果print(f"\n{'*' * 80}")print(f"{name} Optimization Result:")print(f"Best Solution: {best_sol[:5]}...")  # 只打印前5維print(f"Best Fitness: {best_fit:.6e}")print(f"Optimal Value Found: {func(best_sol):.6e}")print(f"{'*' * 80}\n")# 繪制收斂曲線plot_results(convergence, name, dim)# 比較所有函數的收斂曲線plt.figure(figsize=(12, 8))for name, conv in results.items():plt.semilogy(conv, label=name, linewidth=2)plt.title(f'HBA Performance on CEC2017 Functions (Dim={dim})', fontsize=16)plt.xlabel('Iteration', fontsize=12)plt.ylabel('Fitness (log scale)', fontsize=12)plt.legend(fontsize=12)plt.grid(True, which='both', linestyle='--')plt.tight_layout()plt.savefig('hba_cec2017_convergence.png', dpi=300)plt.show()

輸出值為:

?通過增加迭代次數和種群大小可以更加接近最優解。

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

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

相關文章

Duix.HeyGem:以“離線+開源”重構數字人創作生態

在AI技術快速演進的今天,虛擬數字人正從高成本、高門檻的專業領域走向大眾化應用。Duix.HeyGem 數字人項目正是這一趨勢下的杰出代表。該項目由一支擁有七年AI研發經驗的團隊打造,通過放棄傳統3D建模路徑,轉向真人視頻驅動的AI訓練模型,成功實現了低成本、高質量、本地化的…

HTTP常見的請求方法、響應狀態碼、接口規范介紹

HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是Web通信的基礎協議&#xff0c;用于客戶端和服務器之間的請求和響應。本文將詳細介紹HTTP常見的請求方法、響應狀態碼以及接口規范&#xff0c;幫助開發者更好地理解和使用HTTP協議。 一、HTTP請求方法 HTTP請求方…

基于Matlab實現LDA算法

線性判別分析&#xff08;Linear Discriminant Analysis, LDA&#xff09;是一種經典的統計方法&#xff0c;常用于特征降維和分類問題。在機器學習領域&#xff0c; 一、LDA基本原理 LDA的目標是尋找一個投影空間&#xff0c;使得類間距離最大化&#xff0c;同時保持類內距離…

matlab基于GUI實現水果識別

基于GUI實現水果識別系統&#xff0c;限一個圖片內存在一種水果 圖像處理是一種利用計算機分析圖像以達到預期結果的技術。圖像處理一般指數字圖像處理&#xff0c;而數字圖像指由工業相機、攝像機、掃描儀等設備捕捉到的二維數組&#xff0c;數組中的元素稱為像素&#xff0c…

XML 編碼:結構化數據的基石

XML 編碼:結構化數據的基石 引言 XML(可擴展標記語言)作為互聯網上廣泛使用的數據交換格式,已經成為結構化數據存儲和傳輸的重要工具。本文旨在深入探討XML編碼的原理、應用場景以及編碼規范,幫助讀者更好地理解和運用XML。 XML編碼概述 1. XML的起源 XML誕生于1998年…

虛擬機無法開啟-關掉虛擬化

這個問題我之前解決過&#xff0c;沒做筆記&#xff0c;這次記錄下&#xff0c;最常見都上開啟bois的cpu虛擬化。 其次是啟動或關閉功能頁面也需要選擇&#xff0c;再就是和wsl都沖突問題&#xff0c;就是今天這個問題 您的主機不滿足在啟用 Hyper-V 或 Device/Credential Gua…

Python數據可視化科技圖表繪制系列教程(二)

目錄 表格風格圖 使用Seaborn函數繪圖 設置圖表風格 設置顏色主題 圖表分面 繪圖過程 使用繪圖函數繪圖 定義主題 分面1 分面2 【聲明】&#xff1a;未經版權人書面許可&#xff0c;任何單位或個人不得以任何形式復制、發行、出租、改編、匯編、傳播、展示或利用本博…

LeetCode算法題 (搜索二維矩陣)Day18!!!C/C++

https://leetcode.cn/problems/search-a-2d-matrix/description/ 一、題目分析 給你一個滿足下述兩條屬性的 m x n 整數矩陣&#xff1a; 每行中的整數從左到右按非嚴格遞增順序排列。每行的第一個整數大于前一行的最后一個整數。 給你一個整數 target &#xff0c;如果 ta…

獵板硬金鍍層厚度:新能源汽車高壓系統的可靠性基石

在新能源汽車的電池管理系統&#xff08;BMS&#xff09;和電機控制器中&#xff0c;硬金鍍層厚度直接關系到高壓環境下的電氣穩定性與使用壽命。獵板針對車載場景開發的耐電遷移方案&#xff08;金層 2.5μm&#xff0c;鎳層 8μm&#xff09;&#xff0c;經 150℃/85% RH 高壓…

亞馬遜站內信規則2025年重大更新:避坑指南與合規策略

亞馬遜近期對Buyer-Seller Messaging&#xff08;買家-賣家站內信&#xff09;規則進行了顯著收緊&#xff0c;明確將一些曾經的“灰色操作”列為違規。違規操作輕則收到警告&#xff0c;重則導致賬戶暫停或績效受限。本文為您全面解析本次規則更新的核心要點、背后邏輯&#x…

WPF可拖拽ListView

1.控件描述 WPF實現一個ListView控件Item子項可刪除也可拖拽排序&#xff0c;效果如下圖所示 2.實現代碼 配合 WrapPanel 實現水平自動換行&#xff0c;并開啟拖拽 <ListViewx:Name"listView"Grid.Row"1"Width"300"AllowDrop"True&…

相機--雙目立體相機

教程 鏈接1 教程匯總 立體匹配算法基礎概念 視頻講解攝像機標定和雙目立體原理 兩個鏡頭。 雙目相機也叫立體相機--Stereo Camera&#xff0c;屬于深度相機。 作用 1&#xff0c;獲取圖像特征&#xff1b; 2&#xff0c;獲取圖像深度信息&#xff1b; 原理 原理和標定 …

Unity3D仿星露谷物語開發59之定制角色襯衫

1、目標 自定義角色襯衫、褲子、手臂顏色。 2、概念 在Assets -> Sprites -> Output Textures下&#xff0c;Customised_farmer為目前角色所用的精靈表。 如果上面是輸出紋理&#xff0c;那么輸入紋理是什么呢&#xff1f;它位于Assets/Sprites/Sprite Textures/Chara…

【HarmonyOS 5】游戲開發教程

一、開發環境搭建 ?工具配置? 安裝DevEco Studio 5.1&#xff0c;啟用CodeGenie AI助手&#xff08;Settings → Tools → AI Assistant&#xff09;配置游戲模板&#xff1a;選擇"Game"類型項目&#xff0c;勾選手機/平板/折疊屏多設備支持 二、游戲引擎核心架構…

深度探索:如何用DeepSeek重構你的工作流

前言:AI時代的工作革命 在人工智能浪潮席卷的今天,DeepSeek作為國產大模型的代表之一,正以其強大的自然語言處理能力、代碼生成能力和多模態交互特性,重新定義著人類的工作方式。根據IDC報告顯示,2024年企業級AI應用市場規模已突破800億美元,其中智能辦公場景占比達32%,…

Linux 進程調度與管理:從內核管理到調度機制的深度解析

文章目錄 引言一、進程基礎&#xff1a;概念與核心數據結構1.1 進程的本質&#xff1a;程序的動態化身1.2 進程控制塊&#xff08;PCB&#xff09;&#xff1a;內核管理的靈魂1.2.1 鏈表節點嵌入1.2.2 鏈表操作宏1.2.3 全局鏈表管理 1.3 進程查看與系統調用1.3.1 通過系統調用獲…

信息學奧賽一本通 1570:【例 2】能量項鏈 | 1843:【06NOIP提高組】能量項鏈 | 洛谷 P1063 [NOIP 2006 提高組] 能量項鏈

【題目鏈接】 ybt 1570&#xff1a;【例 2】能量項鏈 ybt 1843&#xff1a;【06NOIP提高組】能量項鏈 洛谷 P1063 [NOIP 2006 提高組] 能量項鏈 【題目考點】 1. 動態規劃&#xff1a;區間動規 2. 環形序列 解決方法&#xff1a;破環為鏈 模板題&#xff1a;洛谷 P1880 [N…

旅游微信小程序制作指南

想創建旅游微信小程序嗎&#xff1f;知道旅游業企業怎么打造自己的小程序嗎&#xff1f;這里有零基礎小白也能學會的教程&#xff0c;教你快速制作旅游類微信小程序&#xff01; 旅游行業能不能開發微信小程序呢&#xff1f;答案是肯定的。微信小程序對旅游企業來說可是個寶&am…

Vue3+Vite中lodash-es安裝與使用指南

在 Vue 3 Vite 項目中安裝和使用 lodash-es 的詳細指南如下&#xff1a; 一、為什么選擇 lodash-es&#xff1f; ES 模塊支持&#xff1a;lodash-es 以原生 ES 模塊格式發布&#xff0c;支持現代構建工具的 Tree Shaking 按需加載&#xff1a;只引入需要的函數&#xff0c;顯…

法律模型選型

當然可以&#xff0c;以下是關于法律法規相關模型的技術選型調研建議&#xff0c;適合算法實習生從0入手&#xff0c;并能交付有深度的調研報告&#xff1a; 一、調研背景與目標 目標&#xff1a;調研用于處理法律法規類任務的大模型與技術方案&#xff0c;明確適合本團隊的模…