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

📄 cross.m

📁 遗传算法在路由优化中的应用:多服务质量的最小路径的算法.
💻 M
字号:
function population=cross(population,pc,populationNum,codeLength,fitness)
% 交换操作 (选择交换个体的方法也是轮盘法)

%顺序累计群体内各个体的适应度,得相应的累计值fitnessSum(i),最后一个累计值为s(populationNum)
  fitnessSum=cumsum(fitness);  % cumsum 为求列元素的累计和函数

for j=1:2:populationNum*pc
    r1=rand*fitnessSum(populationNum); %在[0,fitnessSum(populationNum)]区间内产生均匀分布的随机数 r1
    
    while 1
        r2=rand*fitnessSum(populationNum);
        if r2~=r1 
            break;
        end
    end   %在[0,fitnessSum(populationNum)]区间内产生均匀分布的随机数 r2 且 r2~=r1
    
    ii=1;
    jj=1;
    for i=1:populationNum
           if fitnessSum(i)>=r1
                ii=i; 
                break;
           end %依次用fitnessSum(i)与r1,比较,第一个出现fitnessSum(i)大于或等于r1的个体i被选为交换对象,
           if fitnessSum(i)>=r2
                jj=i;
                break;
           end %依次用fitnessSum(i)与r2,比较,第一个出现fitnessSum(i)大于或等于r2的个体i被选为交换对象,
    end  
    
    swappoint=ceil(rand*(codeLength-1)); %在[1,codeLength-1]区间产生均匀分布的随机整数,作为交换点位置
    temp=population(ii,(swappoint+1):codeLength);
    population(ii,(swappoint+1):codeLength)= population(jj,(swappoint+1):codeLength);
    population(jj,(swappoint+1):codeLength)= temp;  %执行交换   
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -