一、山羊優化算法
山羊優化算法(Goat Optimization Algorithm, GOA)是2025年提出的一種新型生物啟發式元啟發式算法,靈感來源于山羊在惡劣和資源有限環境中的適應性行為。該算法旨在通過模擬山羊的覓食策略、移動模式和躲避寄生蟲的能力,有效平衡探索和開發,以解決全局優化問題。
算法原理
山羊優化算法基于山羊的三種關鍵行為模式來設計其工作機制:
- 自適應覓食策略:山羊在覓食過程中會優先選擇營養豐富的區域,同時避開不利區域。這種行為被建模為算法中的探索階段,使候選解能夠在解空間中評估多個區域,從而增強全局搜索能力。
- 跳躍機制:山羊能夠通過突然的跳躍到達難以觸及的區域,這有助于它們逃避捕食者和獲取新的資源。在算法中,這種跳躍機制被用來幫助解逃離局部最優解,提高收斂速度和全局搜索效率。
- 寄生蟲回避和環境適應:山羊會本能地避免在寄生蟲感染的區域覓食,以確保長期生存和健康。在算法中,這一行為被轉化為解的篩選機制,通過動態消除低質量解并重新生成新的候選解,保持種群的多樣性和魯棒性。
算法模型
山羊優化算法的數學模型包括以下幾個關鍵部分:
-
種群初始化:隨機生成初始的山羊種群,每個山羊表示為搜索空間中的一個d維向量,其位置在給定的上下界范圍內隨機生成。
X i = ( x i 1 , x i 2 , … , x i d ) X_i = (x_{i1}, x_{i2}, \ldots, x_{id}) Xi?=(xi1?,xi2?,…,xid?)
其中,i = 1, 2, …, N,d是決策變量的個數(維度)。初始種群的生成公式為:
X i = L B + ( U B ? L B ) ? rand ( d ) X_i = LB + (UB - LB) \cdot \text{rand}(d) Xi?=LB+(UB?LB)?rand(d)
其中,rand(d)生成一個d維的隨機向量,取值范圍在[0,1]之間。 -
探索階段:每個山羊通過隨機移動來探索搜索空間,其新位置的更新公式為:
X i t + 1 = X i t + α ? R ? ( U B ? L B ) X_i^{t+1} = X_i^t + \alpha \cdot R \cdot (UB - LB) Xit+1?=Xit?+α?R?(UB?LB)
其中, X i t X_i^t Xit?是第i個山羊在迭代t的位置,α是探索系數,R是從高斯分布N(0,1)中抽取的隨機變量。 -
開發階段:山羊逐漸向當前最優解移動,以細化解的質量,其位置更新公式為:
X i t + 1 = X i t + α ′ ? ( X leader t ? X i t ) X_i^{t+1} = X_i^t + \alpha' \cdot (X_{\text{leader}}^t - X_i^t) Xit+1?=Xit?+α′?(Xleadert??Xit?)
其中, X leader t X_{\text{leader}}^t Xleadert?是當前最優解,α’是開發系數。 -
跳躍策略:通過跳躍機制幫助山羊逃離局部最優解,其位置更新公式為:
X i t + 1 = X i t + J ? ( X random ? X i t ) X_i^{t+1} = X_i^t + J \cdot (X_{\text{random}} - X_i^t) Xit+1?=Xit?+J?(Xrandom??Xit?)
其中,J是跳躍系數, X random X_{\text{random}} Xrandom?是隨機選擇的山羊。 -
寄生蟲回避和解篩選:對于適應度值位于種群最低20%的山羊,將其位置重置為隨機生成的新位置,以保持種群的多樣性和魯棒性。重置公式為:
X i t + 1 = L B + ( U B ? L B ) ? rand ( d ) X_i^{t+1} = LB + (UB - LB) \cdot \text{rand}(d) Xit+1?=LB+(UB?LB)?rand(d)
算法流程
山羊優化算法的完整流程如下:
- 初始化:隨機初始化山羊種群,計算每個山羊的適應度值,并確定當前最優解。
- 迭代過程:
- 探索:使用探索方程更新山羊的位置。
- 開發:將山羊向當前最優解移動。
- 跳躍:對部分山羊應用跳躍策略。
- 篩選:移除并重新生成表現較差的解。
- 更新最優解:根據新的位置計算適應度值,并更新當前最優解。
- 停止條件:當達到最大迭代次數、適應度改進低于預設閾值或種群中解的方差變得可忽略不計時,算法終止。
- 輸出結果:返回找到的最優解。
復雜度分析
山羊優化算法的計算復雜度主要由適應度函數評估和山羊位置更新決定。每輪迭代評估 N 個解,假設總共有 (T_{\text{max}}) 輪迭代,則總體復雜度為:
O ( N ? T max ? d ) O(N \cdot T_{\text{max}} \cdot d) O(N?Tmax??d)
這與其他基于群體的算法(如粒子群優化算法和灰狼優化算法)相當。不過,通過引入跳躍策略和寄生蟲回避機制,GOA 可以提高效率,避免不必要的局部搜索停滯。
參考文獻:
[1]nozari, hamed, and Agnieszka Szmelter-Jarosz. “Goat Optimization Algorithm: A Novel Bio-Inspired Metaheuristic for Global Optimization.” Applied Innovations in Industrial Management (AIIM), 2025.
二、23個函數介紹
參考文獻:
[1] Yao X, Liu Y, Lin G M. Evolutionary programming made faster[J]. IEEE transactions on evolutionary computation, 1999, 3(2):82-102.
三、部分代碼及結果
clear;
clc;
close all;
warning off all;SearchAgents_no=50; %Number of search solutions
Max_iteration=500; %Maximum number of iterationsFunc_name='F1'; % Name of the test function% Load details of the selected benchmark function
[lb,ub,dim,fobj]=Get_F(Func_name); tic;
[Best_score,Best_pos,cg_curve]=(SearchAgents_no,Max_iteration,lb,ub,dim,fobj);
tend=toc;% figure('Position',[500 500 901 345])
%Draw search space
subplot(1,2,1);
func_plot(Func_name);
title('Parameter space')
xlabel('x_1');
ylabel('x_2');
zlabel([Func_name,'( x_1 , x_2 )'])%Draw objective space
subplot(1,2,2);
semilogy(cg_curve,'Color','m',LineWidth=2.5)
title(Func_name)% title('Objective space')
xlabel('Iteration');
ylabel('Best score obtained so far');axis tight
grid on
box on
legend('')display(['The running time is:', num2str(tend)]);
display(['The best fitness is:', num2str(Best_score)]);
display(['The best position is: ', num2str(Best_pos)]);