⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 compete.asv

📁 多种群的链式智能体遗传算法
💻 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 + -