📄 compete3.m
字号:
function newpop=compete3(popsize,pop,fitvalue)
%%%链式邻域
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 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;
range_down=0;
range_up=6400;
left_dna=zeros(2,1);
right_dna=zeros(2,1);
max_dna=zeros(2,1);
new_dna=zeros(2,1);
neighbor_fitvalue=zeros(1,2);
I=zeros(1,2);
for i=1:popsize
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 求其邻域
if i==1 %% 第一个个体的左邻域为最后一个个体 其他按常规
left_dna=pop(:,popsize);
neighbor_fitvalue(1)=fitvalue(popsize);
I(1)=popsize;
else
left_dna=pop(:,i-1);
neighbor_fitvalue(1)=fitvalue(i-1);
I(1)=i-1;
end
if i==popsize
right_dna=pop(:,1); %%最后一个个体的右邻域为第一个个体 其他为物理位置的右邻域
neighbor_fitvalue(2)=fitvalue(1);
I(2)=1;
else
right_dna=pop(:,i+1);
neighbor_fitvalue(2)=fitvalue(i+1);
I(2)=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 %%%当前个体与邻域中最大的适应值比较 如果大于则可以存活 如果小于则按照po概率必须被替换
if rand<po %%% 小于po则按照拓宽搜索空间发作产生新个体替换 否则用最大的个体替换
for j=1:2
T=max_dna(j,1)+(-1)^round(rand)*rand*(max_dna(j,1)-pop(j,i));
if T<range_down
new_dna(j,1)=range_down;
elseif T>range_up
new_dna(j,1)=range_up;
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 + -