📄 compete.asv
字号:
function newpop=compete(popsize,pop,fitvalue,up_range,down_range)
%函数说明
%入口参数:pop 当前处理的种群,
% popsize 种群大小,
% fitvalue 当前代的适应度数组
% up_range 自变量的相对上限,
% down_range 自变量的相对下限
%出口参数:best_fit 各代最有适应度值的集合
%功能说明:当前处理个体在其周围四邻域的范围内竞争,
% 如果当前个体的适应度小于邻域的最大适应度值则必将死亡
% 策略1(rand<po) new=round(max_dna(j,1)+(-1)^round(rand)*rand*(max_dna(j,1)-pop(j,i)));
% 策略2(rand〉po)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%调试语句
% popsize=36;
% n=500;
% po=0.5;
% pop1_init=randperm(n); %产生1到32的整数
% pop2_init=randperm(n);
% pop(1,:)=pop1_init(1:popsize); %将前几个整数作为初始群体
% pop(2,:)=pop2_init(1:popsize);; %将前几个整数作为初始群体
% pop
%
% pop_con=(pop-250)./100; %pop数据准备 将区间由(0,,3096)划到(--1.048,2.048)
% pop_con
% fitvalue=zeros(1,popsize);
% for i=1:popsize
%
% fitvalue(1,i)=-(pop_con(1,i)^2+pop_con(2,i)^2);
%
% end
% fitvalue
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
po=0.5;
size=8;
% range_down=0;
% range_up=100000;
up_dna=zeros(2,1);
down_dna=zeros(2,1);
left_dna=zeros(2,1);
right_dna=zeros(2,1);
max_dna=zeros(2,1);
new_dna=zeros(2,1);
neighbor_fitvalue=zeros(1,4);
I=zeros(1,4);
for i=1:popsize
cul=popsize-size;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 求其邻域
if i<=size
up_dna=pop(:,cul+i);
neighbor_fitvalue(1)=fitvalue(cul+i);
I(1)=cul+i;
else
up_dna=pop(:,i-size);
neighbor_fitvalue(1)=fitvalue(i-size);
I(1)=i-size;
end
if i>cul
down_dna=pop(:,i-cul);
neighbor_fitvalue(2)=fitvalue(i-cul);
I(2)=i-cul;
else
down_dna=pop(:,i+size);
neighbor_fitvalue(2)=fitvalue(i+size);
I(2)=i+size;
end
if i==1|i==1+size|i==1+2*size|i==1+3*size|i==1+4*size|i==1+5*size|i==1+6*size|i==1+7*size
left_dna=pop(:,i+size-1);
neighbor_fitvalue(3)=fitvalue(i+size-1);
I(3)=i+size-1;
else
left_dna=pop(:,i-1);
neighbor_fitvalue(3)=fitvalue(i-1);
I(3)=i-1;
end
if i==size|i==2*size|i==3*size|i==4*size|i==5*size|i==6*size|i==7*size|i==8*size
right_dna=pop(:,i-size+1);
neighbor_fitvalue(4)=fitvalue(i-size+1);
I(4)=i-size+1;
else
right_dna=pop(:,i+1);
neighbor_fitvalue(4)=fitvalue(i+1);
I(4)=i+1;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[neighbor_max_fitvalue,J]=max(neighbor_fitvalue);
neighbor_max_cul=I(J);
max_dna=pop(:,neighbor_max_cul);
if fitvalue(i)<neighbor_max_fitvalue
if rand<po
for j=1:2
T=max_dna(j,1)+(-1)^round(rand)*rand*(max_dna(j,1)-pop(j,i));
if T<down_range
new_dna(j,1)=down_range;
elseif T>up_range
new_dna(j,1)=up_range;
else
new_dna(j,1)=round(T);
end
end
else
new_dna=max_dna;
end
newpop(:,i)=new_dna;
else
newpop(:,i)=pop(:,i);
end
end
% newpop
% newpop_con=(newpop-250)./100; %pop数据准备 将区间由(0,,3096)划到(--1.048,2.048)
% newpop_con
% newpop_fitvalue=zeros(1,popsize);
% for i=1:popsize
%
% newpop_fitvalue(1,i)=-(newpop_con(1,i)^2+newpop_con(2,i)^2);
%
% end
% newpop_fitvalue
%
%
% errors=abs(newpop_fitvalue)-abs(fitvalue)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -