智能优化算法之合作优化算法(CSA),原理公式详解,附matlab代码

合作优化算法(Cooperation search algorithm,CSA)是一种新型元启发式优化算法,该算法受现代企业团队协作行为的启发,具有搜索速度快、寻优能力强的特点。该成果于2021年发表在知名SCI期刊Applied Soft Computing上。目前谷歌学术上查询被引102次。

3d0b49296769a5e4b7435753d772d6e6.png

CSA算法通过团队组建,团队沟通,反思学习,内部竞争四个主要操作模拟了现代企业团队协作行为,最后选取最优解。

算法原理

(1)团队组建阶段

在这一阶段,随机确定团队中的所有员工,在评估所有解决方案的绩效后,从初始群体中选择M∈[1,I]领导解决方案,形成外部精英集。公式如下

其中  是当前群体的解决方案的数量。  是第i个解在第k周期的第j值。φ(L, U)是生成均匀分布在[L, U]范围内的随机数的函数。

(2)团队沟通阶段

每个员工都可以通过与董事长、董事会、监事领导的信息交流获得新的信息。数学模型如下式表示:

其中  是第k+1个循环时第i群解的第j值。团队沟通过程包括董事长知识A、董事会集体知识B和监事会集体知识C三个部分。董事长从董事会中随机抽取,模拟轮换机制,董事会和监事的成员在计算B和C时被赋予相同的职位。数学模型如下式表示:

其中  是第k个周期中第i个个人最y优解的第j个值。  是从第一个循环开始到第k个循环的第n个全局知名解的第j个值。ind是集合{1,2,…, m}。  表示从外部精英集合中随机选择的董事长获得的知识。  和  分别是从迄今为止发现的M个全球最优解和  个个人最优解中获得的平均知识。α和β为调整  和  影响程度的学习系数。

(3)反思学习阶段

除了向领导学习解决方案外,员工还可以从相反的方向总结自己的经验来获得新的知识,数学模型表达式为:  其中  为第i个反射解在第k+1个循环时的第  值。

 (4)内部竞争阶段

团队逐步提升市场竞争力,确保所有业绩较好的员工都能被保留下来,数学模型表达式为:

其中,F (x)为解x的适应度值。

结果展示

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

2e7e9e51fa200241384702f29922e837.png

8788b792340c162177ed7bccdbd76eaf.png

b21f682cbb40232c8f14522a89121427.png

1348c113b2bf5045873de26614517de0.png

a8abde3964e193551eecf2e141a51973.png

 MATLAB核心代码

% 合作优化算法
function [Destination_fitness,Destination_position,Convergence_curve]=CSA(pop,gbestNum,Max_iteration,lb,ub,dim,fobj)
if nargin<1
    pop=50;
    gbestNum=3;
    Max_iteration=1000;
    [lb,ub,dim,fobj]=Get_Functions();
end
%------------Team building phase.%Eq.(2)
current_X=rand(pop,dim).*(ub-lb)+lb;
current_X_fitness = zeros(1,pop);
% Calculate the fitness of the first set
for i=1:size(current_X,1)
    current_X_fitness(1,i)=fobj(current_X(i,:));
end


global_Best_position=zeros(gbestNum,dim);% global_Best_position
global_Best_fitness=inf(1,gbestNum);


Destination_position=zeros(1,dim);%Destination_position
Destination_fitness=inf;


Person_Best_position=current_X;%Person_Best_position
Person_Best_fitness=current_X_fitness;


[~,index_sorted]=sort(current_X_fitness);
for i=1:gbestNum
    global_Best_position(i,:)=current_X(index_sorted(i),:);
    global_Best_fitness(i)=current_X_fitness(1,index_sorted(i));
end


%Main loop
iter=1;
while iter<=Max_iteration
    % ---------------- Team Communication operator
    ave_Pbest=mean(Person_Best_position,1);
    ave_gbest=mean(global_Best_position,1);
    for i=1:size(current_X,1)
        for j=1:size(current_X,2)
            alpha = 0.10;%alpha
            beta = 0.15;%beta
            %------------Eq.(4)
            num_AK=log(1.0/Phi(0,1))*(global_Best_position(randi(gbestNum),j)-current_X(i,j));
            %------------Eq.(5)
            num_BK=alpha*Phi(0,1)*(ave_gbest(j)-current_X(i,j));
            %------------Eq.(6)
            num_CK=beta*Phi(0,1)*(ave_Pbest(j)-current_X(i,j));
            %------------Eq.(3)
            next_X(i,j)=current_X(i,j)+num_AK+num_BK+num_CK;         
        end     
        %boundary check
        Flag4ub=next_X(i,:)>ub;
        Flag4lb=next_X(i,:)<lb;
        next_X(i,:)=(next_X(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;
    end
    
    % -------Reflective Learning Operator
    reflect_X=zeros(pop,dim);
    for j=1:size(current_X,2)
        for i=1:size(current_X,1)
            if size(ub,2)==1
                ub=ones(1,dim).*ub;
                lb=ones(1,dim).*lb;
            end
            %------------Eq.(10)
            num_C= (ub(j) + lb(j)) * 0.5;
            gailv=abs(num_C- next_X(i,j))/(ub(j) - lb(j));
            if  next_X(i,j)>=num_C  %------------Eq.(7) First
                if gailv<Phi(0,1)
                    reflect_X(i,j)= Phi((ub(j) + lb(j))- next_X(i,j),num_C)  ;%------------Eq.(8) First
                else
                    reflect_X(i,j)= Phi(lb(j),(ub(j) + lb(j))- next_X(i,j))  ;%------------Eq.(8) Second
                end
            else%------------Eq.(7) Second
                if gailv<Phi(0,1)
                    reflect_X(i,j)= Phi(num_C,(ub(j) + lb(j))- next_X(i,j))  ;%------------Eq.(9) First
                else
                    reflect_X(i,j)= Phi((ub(j) + lb(j))- next_X(i,j),ub(j))  ;%------------Eq.(9) Second
                end
            end          
        end % end j
    end% end i
    
    %boundary check
    for i=1:size(current_X,1)
        Flag4ub=reflect_X(i,:)>ub;
        Flag4lb=reflect_X(i,:)<lb;
        reflect_X(i,:)=(reflect_X(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;
    end
    
    %------------Internal competition operator.  %Eq.(11)
    for i=1:size(current_X,1)
        reflect_X_fit=fobj( reflect_X(i,:));
        next_X_fit=fobj( next_X(i,:));
        if next_X_fit>reflect_X_fit
            current_X(i,:)=reflect_X(i,:);
        else
            current_X(i,:)=next_X(i,:);
        end
    end

参考文献

[1] Feng Z, Niu W, Liu S. Cooperation search algorithm: A novel metaheuristic evolutionary intelligence algorithm for numerical optimization and engineering optimization problems[J]. Applied Soft Computing, 2021, 98: 106734.

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

今天吃饺子

不想刀我的可以选择爱我

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

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

打赏作者

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

抵扣说明:

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

余额充值