金豺算法(GTO)的介绍及matlab代码应用
金豺算法(GTO)简介
金豺算法(Golden Jackal Optimization, GTO)是一种受自然界金豺狩猎行为启发的元启发式优化算法,由Nitish Chopra和Muhammad Mohsin Ansari于2022年提出。该算法模拟金豺(雌雄配对)协作捕猎的策略,通过探索和开发机制解决优化问题,适用于函数优化、工程设计等领域。
算法核心步骤
1. 初始化
随机生成金豺种群,每只金豺代表一个候选解,目标函数评估其适应度值。
2. 狩猎行为模拟
-
包围猎物:雌雄金豺协同逼近猎物(最优解),位置更新公式为:
$$ \vec{Y}1 = \vec{Y}\text{M}(t) - \vec{E} \cdot |\vec{Y}\text{M}(t) - \text{rl} \cdot \vec{Y}(t)|
$$
$$ \vec{Y}2 = \vec{Y}\text{FM}(t) - \vec{E} \cdot |\vec{Y}\text{FM}(t) - \text{rl} \cdot \vec{Y}(t)|
$$
其中,$\vec{Y}\text{M}$和$\vec{Y}\text{FM}$分别为雄性和雌性金豺位置,$\vec{E}$为逃逸能量,$\text{rl}$为随机向量。 -
攻击猎物:若猎物逃逸能量$\vec{E}$降低(|\vec{E}| < 1),金豺更新位置并发动攻击:
$$ \vec{Y}(t+1) = \frac{\vec{Y}_1 + \vec{Y}_2}{2}
$$
3. 探索阶段
当|\vec{E}| ≥ 1时,金豺随机搜索新区域,位置更新公式为:
$$ \vec{Y}(t+1) = \vec{Y}\text{r}(t) - \vec{E} \cdot |\text{rl} \cdot \vec{Y}\text{r}(t) - \vec{Y}(t)|
$$
其中$\vec{Y}_\text{r}$为随机个体位置。
MATLAB代码实现
以下为GTO算法的简化MATLAB代码框架,以优化Sphere函数为例:
function [best_solution, best_fitness] = GTO(fitness_func, dim, lb, ub, max_iter, pop_size)
% 初始化种群
positions = rand(pop_size, dim) .* (ub - lb) + lb;
fitness = arrayfun(@(i) fitness_func(positions(i,:)), 1:pop_size);
% 记录雌雄金豺(最优个体)
[best_fitness, idx] = min(fitness);
best_solution = positions(idx,:);
Y_M = best_solution; % 雄性
Y_FM = positions(randi(pop_size),:); % 雌性
% 主循环
for t = 1:max_iter
a = 1.5 - t * (1 / max_iter); % 线性递减系数
E0 = 2 * rand() - 1; % 逃逸能量
for i = 1:pop_size
% 更新E和rl
rl = 0.05 * levyFlight(dim);
E = 2 * E0 * (1 - t/max_iter);
if abs(E) < 1 % 开发阶段
Y1 = Y_M - E * abs(Y_M - rl .* positions(i,:));
Y2 = Y_FM - E * abs(Y_FM - rl .* positions(i,:));
new_pos = (Y1 + Y2) / 2;
else % 探索阶段
rand_idx = randi(pop_size);
Y_rand = positions(rand_idx,:);
new_pos = Y_rand - E * abs(rl .* Y_rand - positions(i,:));
end
% 边界处理
new_pos = max(new_pos, lb);
new_pos = min(new_pos, ub);
% 更新个体
new_fitness = fitness_func(new_pos);
if new_fitness < fitness(i)
positions(i,:) = new_pos;
fitness(i) = new_fitness;
end
end
% 更新全局最优
[current_best, idx] = min(fitness);
if current_best < best_fitness
best_fitness = current_best;
best_solution = positions(idx,:);
Y_M = best_solution;
Y_FM = positions(randi(pop_size),:);
end
end
end
% Levy飞行函数(用于生成rl)
function step = levyFlight(d)
beta = 1.5;
sigma = (gamma(1+beta)*sin(pi*beta/2)/(gamma((1+beta)/2)*beta*2^((beta-1)/2)))^(1/beta);
u = randn(1,d) * sigma;
v = randn(1,d);
step = u ./ (abs(v).^(1/beta));
end
% 测试函数(Sphere)
function z = sphere_func(x)
z = sum(x.^2);
end
参数说明
fitness_func:目标函数(需最小化)。dim:变量维度。lb/ub:变量上下界。max_iter:最大迭代次数。pop_size:种群大小。
应用场景
GTO适用于连续优化问题,如:
- 神经网络超参数调优
- 工程设计中的约束优化
- 经济调度问题
代码可根据具体问题调整狩猎参数(如逃逸能量$E$的衰减速率)以平衡探索与开发。
更多推荐



所有评论(0)