智能算法之浣熊优化算法(COA),原理公式详解,附matlab代码

长鼻浣熊优化算法(Coati Optimization AlgorithmCOA)是一种新型元启发式优化算法,该算法是受浣熊狩猎行为启发而提出的,具有进化能力强、搜索速度快、寻优能力强的特点。该成果于2023年发表在知名SCI期刊Knowledge-Based Systems上。目前谷歌学术上查询被引94次。

先说一下:这个算法的寻优效果是真的好,值得研究一下!且算法较新,是一个值得改进的算法!

3f7a6b31060cba30a2e6c6add0fd8f5b.png

COA算法通过种群初始化、鬣蜥的狩猎和攻击策略、逃离捕食者的过程,三个主要操作模拟了浣熊狩猎行为,最后选取最优解。

算法原理

(1)初始化种群

首先在寻优空间里随机初始化种群: 

式中:  为个体;  为寻优下边界;  为寻优上边界;r[0,1]之间的随机数。

(2)鬣蜥的狩猎和攻击策略(探索阶段)

在这一策略中,一群浣熊爬上树去够一只鬣蜥并吓唬它。其他几只浣熊在树下等待,直到鬣蜥摔倒在地。鬣蜥落地后,浣熊攻击并猎杀它。这种策略导致浣熊移动到搜索空间的不同位置,进而表明COA优化算法在解决问题空间的全局搜索中具有探索能力。

COA算法中,假设种群中最好成员的位置是鬣蜥的位置。也有人假设,一半的浣熊爬上树,另一半等待鬣蜥掉到地上。因此,位置的数学模拟为: 式中:  为第i个浣熊在第  个维度的新位置;    之间的随机数;  为鬣蜥在第  个维度的位置,实际上是指最佳成员的位置;  为从集合{1,2}中随机选取的一个数;  为浣熊的数量;[N/2]为不超过[N/2]的最大整数;  为决策变量个数。

鬣蜥倒地后,被放置在搜索空间中的随机位置。基于这个随机位置,地面上的浣熊在搜索空间中移动。这一步通过两个公式进行模拟。  式中:  为鬣蜥在第  个维度在地上的位置。 其他 式中:  为第  维下鬣蜥落到地面后的目标函数值;  为第  维下第  个浣熊的目标函数值。如果更新后的个体更优,则更新当前个体;否则保持原状。 其他 式中:  为第  个浣熊在新位置的目标函数值;  为第  个浣熊在之前位置的目标函数值。

(3)逃离捕食者的过程(剥削阶段)

该阶段是基于浣熊遇到捕食者和逃离捕食者时的自然行为进行数学建模的。当捕食者攻击浣熊时,浣熊会逃离它的位置。浣熊在这个策略上的举动导致其处于接近当前位置的安全位置。这表明了COA算法在本地搜索中的开发能力。

为了模拟这种行为,基于下列等式在每个浣熊所在的位置附近生成一个随机位置。  式中:  为第  个决策变量的局部下界,  为第  个决策变量的局部上界,  为迭代次数;  为最大迭代次数。

 式中:  为第  个浣熊在第  个维度的新位置。如果更新后的个体更优则更新当前个体,否则保持原状。 其他  结果展示

以为CEC2005函数集为例,进行结果展示:

fca98ddda5a9ada81d3306b1754f384a.png

bfba5c2f59be3866adc89bc1772b2f57.png

1836c88db272a21dc787bdef790e94a1.png

6a67af4a090869c29bb62d22b87a30ce.png

6a4b4ec15d285bba9eee442e384e040e.png

 MATLAB核心代码

function[Best_score,Best_pos,COA_curve]=COA(SearchAgents,Max_iterations,lowerbound,upperbound,dimension,fitness)
lowerbound=ones(1,dimension).*(lowerbound);                              % Lower limit for variables
upperbound=ones(1,dimension).*(upperbound);                              % Upper limit for variables


%% INITIALIZATION
for i=1:dimension
    X(:,i) = lowerbound(i)+rand(SearchAgents,1).*(upperbound(i) - lowerbound(i));                          % Initial population
end


for i =1:SearchAgents
    L=X(i,:);
    fit(i)=fitness(L);
end
%%


for t=1:Max_iterations
    %% update the best condidate solution
    [best , location]=min(fit);
    if t==1
        Xbest=X(location,:);                                           % Optimal location
        fbest=best;                                           % The optimization objective function
    elseif best<fbest
        fbest=best;
        Xbest=X(location,:);
    end
    
    %%
        for i=1:SearchAgents/2
            
            %% Phase1: Hunting and attacking strategy on iguana (Exploration Phase)
            iguana=Xbest;
            I=round(1+rand(1,1));


            X_P1(i,:)=X(i,:)+rand(1,1) .* (iguana-I.*X(i,:)); % Eq. (4)
            X_P1(i,:) = max(X_P1(i,:),lowerbound);X_P1(i,:) = min(X_P1(i,:),upperbound);
            
            % update position based on Eq (7)
            L=X_P1(i,:);
            F_P1(i)=fitness(L);
            if(F_P1(i)<fit(i))
                X(i,:) = X_P1(i,:);
                fit(i) = F_P1(i);
            end


        end
        %%


        for i=1+SearchAgents/2 :SearchAgents


            iguana=lowerbound+rand.*(upperbound-lowerbound); %Eq(5)
            L=iguana;
            F_HL=fitness(L);
            I=round(1+rand(1,1));
            
            if fit(i)> F_HL
                X_P1(i,:)=X(i,:)+rand(1,1) .* (iguana-I.*X(i,:)); % Eq. (6)
            else
                X_P1(i,:)=X(i,:)+rand(1,1) .* (X(i,:)-iguana); % Eq. (6)
            end
            X_P1(i,:) = max(X_P1(i,:),lowerbound);X_P1(i,:) = min(X_P1(i,:),upperbound);
            
            % update position based on Eq (7)
            L=X_P1(i,:);
            F_P1(i)=fitness(L);
            if(F_P1(i)<fit(i))
                X(i,:) = X_P1(i,:);
                fit(i) = F_P1(i);
            end
        end
        %% END Phase1: Hunting and attacking strategy on iguana (Exploration Phase)
        
        %%
        
        %% Phase2: The process of escaping from predators (Exploitation Phase)
        for i=1:SearchAgents
            LO_LOCAL=lowerbound/t;% Eq(9)
            HI_LOCAL=upperbound/t;% Eq(10)
            X_P2(i,:)=X(i,:)+(1-2*rand).* (LO_LOCAL+rand(1,1) .* (HI_LOCAL-LO_LOCAL)); % Eq. (8)
            X_P2(i,:) = max(X_P2(i,:),LO_LOCAL);X_P2(i,:) = min(X_P2(i,:),HI_LOCAL);  
            % update position based on Eq (11)
            L=X_P2(i,:);
            F_P2(i)=fitness(L);
            if(F_P2(i)<fit(i))
                X(i,:) = X_P2(i,:);
                fit(i) = F_P2(i);
            end
            
        end
        %% END Phase2: The process of escaping from predators (Exploitation Phase)
    


    best_so_far(t)=fbest;
    average(t) = mean (fit);
    
end
Best_score=fbest;
Best_pos=Xbest;
COA_curve=best_so_far;
end

参考文献

[1] Dehghani Mohammad, Montazeri Zeinab, Trojovská Eva, Trojovský Pavel. Coati Optimization Algorithm: A new bio-inspired metaheuristic algorithm for solving optimization problems[J]. Knowledge-Based Systems,2023,259.

完整代码获取方式:后台回复关键字:

TGDM990

版权声明:本文为博主作者:今天吃饺子原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/woaipythonmeme/article/details/134820704

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2024年4月16日
下一篇 2024年4月16日

相关推荐