weixin_44511681 2019-03-30 15:46 采纳率: 0%
浏览 1282

关于鸡群算法的一个小问题

我最近在做鸡群算法相关的论文
初始适应值为0.006,网上有找到相关程序,但不知道初始值怎么代入,下面是源程序。

%%%%%%%%鸡群算法CSO,chicken swarm optimization
%%参数设置
popsize=60;%种群数量
rpercent=0.2;%公鸡数量比例
hpercent=0.4;%母鸡数量比例
maxgen=100;%迭代次数
a=popsize*rpercent;%公鸡数量
b=popsize*hpercent;%母鸡数量
c=popsize-a-b;%小鸡数量
wmax=0.9;wmin=0.4;% 不懂诶
popmax=5;popmin=-5;
%初始化鸡群
for i=1:popsize
pop(i,:)=5*rands(1,2);%产生鸡群,种群上下限是[-5,5]
fitness(i)=Ackleyfun(pop(i,:));%计算适应度
end
% fitnessbest=min(fitness);%记录最小值
%%开始迭代
for t=1:maxgen
if t==1||mod(t,10)==0 %判断是否满足鸡群角色更新条件,每10代将鸡群所有个体按适应度排列
[temp fitnessindex]=sort(fitness);%将适应度从小到大排列
rooster=pop(fitnessindex(1:a),:);%分配公鸡
hen=pop(fitnessindex(a+1:a+b),:);%分配母鸡
chick=pop(fitnessindex(a+b+1:popsize),:);%分配小鸡
hen0=ceil(a*rand(1,b));%母鸡分配给公鸡的标号
chick0=ceil(b*rand(1,c));%小鸡分配给母鸡的标号
[fitnessbest(t),index]=min(fitness);%记录最小值
popbest(t,:)=pop(index,:);
zbest=pop(index,:);
for i=1:a
rfitness(i)=Ackleyfun(rooster(i,:));%公鸡群体适应度
end
for i=1:b
hfitness(i)=Ackleyfun(hen(i,:));%母鸡群体适应度
end
for i=1:c
cfitness(i)=Ackleyfun(chick(i,:));%小鸡群体适应度
end
end
%公鸡个体位置更新
for i=1:a
k=ceil(a*rand);%随机取公鸡
while k==i||k==0
k=ceil(a*rand);
end
if rfitness(i) %如果适应度是从大到小应该是if rfitness(k) sigma=1;
else sigma=exp((rfitness(i)-rfitness(k))/(abs(rfitness(i))+eps));
%如果适应度是从大到小应该是sigma=exp((rfitness(k)-rfitness(i))/(abs(rfitness(i)+eps)));
end
rooster(i,:)=rooster(i,:)+normrnd(0,sqrt(sigma))*(zbest-rooster(i,:));%更新公鸡位置
%公鸡位置边界限制
rooster(i,find(rooster(i,:)>popmax))=popmax;
rooster(i,find(rooster(i,:) rfitness(i)=Ackleyfun(rooster(i,:));%更新公鸡适应度
end
%母鸡个体更新
for i=1:b
k=ceil(b*rand);%随机取公鸡
% while k==hen0(i)||k==0
while k==i||k==0
k=ceil(b*rand);
end
c1=exp((rfitness(hen0(i))-hfitness(i))/(abs(hfitness(i)+eps))); %%%由于适应度是从小到大排列
%如果适应度从大到小应该是c1=exp((hfitness(i)-rfitness(hen0(i)))/(abs(hfitness(i)+eps)));
c2=exp((hfitness(k)-hfitness(i))/(abs(hfitness(i)+eps)));
% if c2==inf
% c2=10000;
% end
hen(i,:)=hen(i,:)+(c1*rand*(rooster(hen0(i),:)-hen(i,:))+c2*rand*(hen(k,:)-hen(i,:)));
%母鸡位置边界限制
hen(i,find(hen(i,:)>popmax))=popmax;
hen(i,find(hen(i,:) hfitness(i)=Ackleyfun(hen(i,:));%更新母鸡适应度
end
%小鸡个体更新
for i=1:c
FL=0.4+0.6*rand;
% w=wmin*(wmax/wmin)^(1/(1+10*t/maxgen));
chick(i,:)=chick(i,:)+FL*(hen((chick0(i)),:)-chick(i,:))+0.4*(rooster(hen0(chick0(i)),:)-chick(i,:));%更新小鸡个体
%小鸡位置边界限制
chick(i,find(chick(i,:)>popmax))=popmax;
chick(i,find(chick(i,:)<popmin))=popmin;
cfitness(i)=Ackleyfun(chick(i,:));%更新小鸡适应度
end
pop=[rooster;hen;chick];
fitness=[rfitness hfitness cfitness];
[fitnessbest(t),index]=min(fitness);%记录最小值
popbest(t,:)=pop(index,:);
zbest=pop(index,:);
t
end
%%结果分析
plot(fitnessbest,'Linewidth',2)
title(['适应度曲线' '终止代数=' num2str(maxgen)]);
grid on
xlabel('进化代数');ylabel('适应度');
%结果输出
popbest; %最佳个体
fitnessbest; %最佳适应度值

  • 写回答

3条回答 默认 最新

  • dabocaiqq 2019-03-31 11:15
    关注
    评论

报告相同问题?

悬赏问题

  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R