【智能优化算法】基于灰狼优化器和布谷鸟搜索的混合算法(GWOCS)

基于灰狼优化器和布谷鸟搜索的混合算法(Grey Wolf Optimizer and Cuckoo Search,GWOCS)是中科院一区期刊“ENERGY CONVERSION AND MANAGEMENT”中的论文"A new hybrid algorithm based on grey wolf optimizer and cuckoo search for parameter extraction of solar photovoltaic models"提出的算法

01.引言

基于灰狼优化器和布谷鸟搜索(Grey Wolf Optimizer and Cuckoo Search,GWOCS)的混合算法,针对决策层个体(即α、β和δ)提出了一种新的对立学习策略,以增强GWO的多样性。GWOCS的主要优点是能够平衡勘探和开采。首先在10个复杂的基准函数上测试了GWOCS的性能。

02.代码流程图

03.部分代码

% Grey Wolf Optimizer
function [Alpha_score,Alpha_pos,Convergence_curve]=GWO_CS(SearchAgents_no,Max_iter,lb,ub,dim,fobj)
% initialize alpha, beta, and delta_pos
% dim=2; ub=x;lb=1;Max_iter=10;
% SearchAgents_no=10;
% p=initialization(SearchAgents_no,dim,ub,lb);
Alpha_pos=zeros(1,dim);
% Alpha_pos=zeros,dim);
Alpha_score=inf; %change this to -inf for maximization problems
Beta_pos=zeros(1,dim);
Beta_score=inf; %change this to -inf for maximization problems
Delta_pos=zeros(1,dim);
Delta_score=inf; %change this to -inf for maximization problems
%Initialize the positions of search agents
Positions=initialization(SearchAgents_no,dim,ub,lb);
Positions=sort(Positions);
oldPositions=Positions;
Convergence_curve=zeros(1,Max_iter);
l=0;% Loop counter
% Main loop
while l<Max_iter
    for i=1:size(Positions,1)  
        
       % Return back the search agents that go beyond the boundaries of the search space
        Flag4ub=Positions(i,:)>ub;
        Flag4lb=Positions(i,:)<lb;
        Positions(i,:)=(Positions(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;               
%         Positions(i,:)=sort(Positions(i,:));
        % Calculate objective function for each search agent
%        [Positions(i,:), fitness(i)]=objf(Positions(i,:)',measuredPos,measuredPos,BlindDeviceID,actualRefLocs,refDeviceID,Range,x);
        fitness(i)=fobj(Positions(i,:));
        % Update Alpha, Beta, and Delta
        if fitness(i)<Alpha_score 
            Alpha_score=fitness(i); % Update alpha
            Alpha_pos=Positions(i,:);
        end
        
        if fitness(i)>Alpha_score && fitness(i)<Beta_score 
            Beta_score=fitness(i); % Update beta
            Beta_pos=Positions(i,:);
            
        end
        
        if fitness(i)>Alpha_score && fitness(i)>Beta_score && fitness(i)<Delta_score 
            Delta_score=fitness(i); % Update delta
            Delta_pos=Positions(i,:);
        end
    end
    
    
    a=2-l*((2)/Max_iter); % a decreases linearly fron 2 to 0
    
    % Update the Position of search agents including omegas
    for i=1:size(Positions,1)
        for j=1:size(Positions,2)     
                   
            r1=rand(); % r1 is a random number in [0,1]
            r2=rand(); % r2 is a random number in [0,1]
            
            A1=2*a*r1-a; % Equation (3.3)
            C1=2*r2; % Equation (3.4)
            
            D_alpha=abs(C1*Alpha_pos(j)-Positions(i,j)); % Equation (3.5)-part 1
            X1(i,j)=Alpha_pos(j)-A1*D_alpha; % Equation (3.6)-part 1
                       
            r1=rand();
            r2=rand();
            
            A2=2*a*r1-a; % Equation (3.3)
            C2=2*r2; % Equation (3.4)
            
            D_beta=abs(C2*Beta_pos(j)-Positions(i,j)); % Equation (3.5)-part 2
            X2(i,j)=Beta_pos(j)-A2*D_beta; % Equation (3.6)-part 2       
            
            r1=rand();
            r2=rand(); 
            
            A3=2*a*r1-a; % Equation (3.3)
            C3=2*r2; % Equation (3.4)
            
            D_delta=abs(C3*Delta_pos(j)-Positions(i,j)); % Equation (3.5)-part 3
            X3(i,j)=Delta_pos(j)-A3*D_delta; % Equation (3.5)-part 3             
            
%             Positions(i,j)=(X1+X2+X3)/3;% Equation (3.7)
            
        end
    end
    %% Cuckoo Search integrated here and take control from GWO
  
    % 
    %  the key group parameters in GWO are updated by cuckoo search's
    %  position updation formula 
    %    
    [~,index]=min(fitness);
    best=Positions(index,:);
    X1=get_cuckoos(X1,best,lb,ub); 
    X2=get_cuckoos(X2,best,lb,ub);
    X3=get_cuckoos(X3,best,lb,ub);
    %% control is sent back to GWO
    Positions=(X1+X2+X3)/3;% Equation (3.7)
%     Positions=sort(Positions);
    l=l+1;    
    Convergence_curve(l)=Alpha_score;
end
end

04.代码效果图

获取代码请关注MATLAB科研小白的个人公众号(即文章下方二维码),并回复:智能优化算法本公众号致力于解决找代码难,写代码怵。各位有什么急需的代码,欢迎后台留言~不定时更新科研技巧类推文,可以一起探讨科研,写作,文献,代码等诸多学术问题,我们一起进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MATLAB科研小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值