一、山羊优化算法
山羊优化算法(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 iterations
Func_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)]);