天牛須算法(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 基本思想
- 隨機方向探測:天牛隨機選擇一個方向進行探測
- 雙觸角感知:在選定方向的兩側各伸出一個“觸角”進行探測
- 方向判斷:比較兩側觸角探測到的“氣味”(目標函數值)
- 位置更新:向氣味更濃(函數值更優)的方向移動
2.2 數學模型
天牛須算法的數學模型可以描述如下:
-
隨機方向生成:
dir = random_unit_vector() # 生成單位隨機方向向量
-
左右觸角位置:
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是觸角長度,會隨著迭代逐漸減小。
-
位置更新:
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函數的最小化
測試2. Goldstein-Price函數的約束最小化
5. 算法特點
5.1 優點
- 實現簡單:算法結構簡單,易于理解和實現
- 參數少:相比粒子群、遺傳算法等,參數更少
- 計算效率高:每次迭代只需少量函數評估
- 收斂速度快:在許多問題上表現出較快的收斂速度
5.2 缺點
- 易陷入局部最優:基礎版本容易早熟收斂
- 參數敏感:算法性能對參數設置較為敏感
- 維度擴展性:在高維問題上效果可能不如其他成熟算法
6. 改進方向
為了克服基礎天牛須算法的一些缺點,研究人員提出了多種改進方案:
-
自適應步長:根據搜索過程動態調整步長和觸角長度,可表示為:
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是當前迭代次數。
-
多天牛協同:引入多個天牛并設計信息交互機制
-
混合算法:與其他優化算法(如PSO、DE等)結合
-
精英保留:引入精英保留策略避免最優解丟失
-
混沌映射:使用混沌映射增強搜索的多樣性
7. 應用場景
天牛須算法已在多個領域得到應用:
- 參數優化:如神經網絡、控制系統參數調優
- 路徑規劃:無人機、機器人路徑規劃
- 圖像處理:圖像分割、特征提取
- 調度優化:生產調度、資源分配
- 特征選擇:機器學習中的特征選擇
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是符號函數。
參考資料
- Jiang X, Li S. BAS: Beetle Antennae Search Algorithm for Optimization Problems[J]. arXiv preprint arXiv:1710.10724, 2017.
- 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.
- Lin A, Sun W, Yu H, et al. BSAS: Beetle swarm antennae search algorithm for optimization problems[J]. IEEE Access, 2019, 7: 105467-105482.
- 天牛須搜索算法(BAS)
希望這篇文章能幫助您了解天牛須算法的基本原理、實現方法和應用場景。如有任何問題,歡迎在評論區留言討論!