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

📄 compete3.m

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