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