摘要
大猩猩部落优化算法(Gorilla Troops Optimizer, GTO)是一种基于大猩猩部落行为的新型智能优化算法。该算法受大猩猩的群体行为和领导机制启发,以首领(Silverback)为核心,通过探索(Exploration)和开发(Exploitation)两个阶段进行优化搜索。GTO 在搜索过程中动态调整探索和开发的比例,以提高收敛速度和全局寻优能力。本文详细介绍 GTO 的数学建模,并提供完整的 MATLAB 实现代码,其中包括详细的中文注释,以便读者理解和应用该算法。
1. 大猩猩部落优化算法介绍
1.1 算法背景
在大猩猩社会中,群体通常由一只主导的银背大猩猩(Silverback)带领,其他成员根据银背大猩猩的行为调整自身行动,以寻找食物或避开危险。大猩猩在觅食过程中采用随机搜索、追随首领和自主探索等策略,这些行为为 GTO 提供了优化问题的启发。
GTO 主要基于以下两种优化策略:
- 探索(Exploration):个体大猩猩在群体的带领下随机探索搜索空间,以扩大搜索范围。
- 开发(Exploitation):个体大猩猩围绕当前最优解(Silverback)进行局部搜索,以提高解的质量。
1.2 算法原理
GTO 算法通过模拟大猩猩的群体行为,结合随机性和学习机制,进行全局优化搜索。其核心步骤如下:
- 初始化种群,在搜索空间中随机分布大猩猩个体。
- 计算个体适应度值,确定当前最优个体(Silverback)。
- 探索阶段:
- 以一定概率随机生成新个体(类似随机搜索)。
- 通过与其他个体交互,利用环境信息进行搜索。
- 开发阶段:
- 个体围绕 Silverback 进行搜索,模拟真实大猩猩的群体行为。
- 采用不同策略调整个体位置,以确保局部搜索的有效性。
- 更新适应度值,记录新的最优解。
- 重复上述过程,直至满足终止条件。
1.3 相关数学公式
1.探索阶段更新公式
2.开发阶段更新公式
2. MATLAB 代码实现
下面是 GTO 算法的完整 MATLAB 代码:
2.1 主函数 GTO
function [Silverback_Score, Silverback, convergence_curve] = GTO(pop_size, max_iter, lower_bound, upper_bound, variables_no, fobj)
% 大猩猩部落优化算法(Gorilla Troops Optimizer, GTO)
% pop_size:种群大小,即大猩猩的个体数量
% max_iter:最大迭代次数
% lower_bound, upper_bound:搜索空间的上下界
% variables_no:变量的维度
% fobj:目标函数
% 初始化最优解(银背大猩猩)
Silverback = [];
Silverback_Score = inf;
% 随机初始化大猩猩种群
X = initialization(pop_size, variables_no, upper_bound, lower_bound);
% 记录收敛曲线
convergence_curve = zeros(max_iter, 1);
% 计算初始适应度值
for i = 1:pop_size
Pop_Fit(i) = fobj(X(i, :)); % 计算适应度值
if Pop_Fit(i) < Silverback_Score
Silverback_Score = Pop_Fit(i);
Silverback = X(i, :);
end
end
GX = X; % 复制种群
lb = ones(1, variables_no) .* lower_bound;
ub = ones(1, variables_no) .* upper_bound;
%% 设定控制参数
p = 0.03; % 随机搜索概率
Beta = 3; % 影响开发阶段的参数
w = 0.8; % 控制开发阶段的平衡
%% 主要循环(主优化过程)
for It = 1:max_iter
% 计算探索因子 a 和 C
a = (cos(2 * rand) + 1) * (1 - It / max_iter);
C = a * (2 * rand - 1);
% **探索阶段**
for i = 1:pop_size
if rand < p % 随机生成新个体
GX(i, :) = (ub - lb) * rand + lb;
else
if rand >= 0.5
Z = unifrnd(-a, a, 1, variables_no);
H = Z .* X(i, :);
GX(i, :) = (rand - a) * X(randi([1, pop_size]), :) + C .* H;
else
GX(i, :) = X(i, :) - C .* (C * (X(i, :) - GX(randi([1, pop_size]), :)) + rand * (X(i, :) - GX(randi([1, pop_size]), :)));
end
end
end
GX = boundaryCheck(GX, lower_bound, upper_bound);
% 适应度更新
for i = 1:pop_size
New_Fit = fobj(GX(i, :));
if New_Fit < Pop_Fit(i)
Pop_Fit(i) = New_Fit;
X(i, :) = GX(i, :);
end
if New_Fit < Silverback_Score
Silverback_Score = New_Fit;
Silverback = GX(i, :);
end
end
% 开发阶段
for i = 1:pop_size
if a >= w
g = 2^C;
delta = (abs(mean(GX)).^g).^(1/g);
GX(i, :) = C * delta .* (X(i, :) - Silverback) + X(i, :);
else
r1 = rand;
if rand >= 0.5
h = randn(1, variables_no);
else
h = randn(1, 1);
end
GX(i, :) = Silverback - (Silverback * (2 * r1 - 1) - X(i, :) * (2 * r1 - 1)) * (Beta * h);
end
end
GX = boundaryCheck(GX, lower_bound, upper_bound);
% 记录收敛曲线
convergence_curve(It) = Silverback_Score;
end
end
2.2 辅助函数
function [X] = boundaryCheck(X, lb, ub)
% 边界检查,确保个体在搜索空间范围内
for i = 1:size(X, 1)
FU = X(i, :) > ub;
FL = X(i, :) < lb;
X(i, :) = (X(i, :) .* (~(FU + FL))) + ub .* FU + lb .* FL;
end
end
3. 总结
GTO 通过模拟大猩猩的觅食和社会行为,结合探索和开发策略,提高了全局优化能力和局部搜索精度。本文详细介绍了 GTO 的基本原理和数学模型,并提供完整的 MATLAB 代码实现,便于读者理解和应用。