金豺算法(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$的衰减速率)以平衡探索与开发。

更多推荐