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

📄 caculatefitness.asv

📁 遗传算法在路由优化中的应用:多服务质量的最小路径的算法.
💻 ASV
字号:
function [chromosome,p,delay,F,fitness]=caculateFitness(population,chromosome,populationNum,D,codeRodeList,tuoputu,codeLength,vs,vd,jieNum,p,delay,F,B,A0,B0)
% 对群体中的每个染色体,判断F1=0,ps,j=1,pi,d=1和F2=0。如果存在这样的染色体,那么将该染色体及F的值存入解集中
% chromosome记录染色体,p记录染色体的路径,delay记录染色体的延迟,F记录染色体的函数值(这几个参数都只记录合格的路径),
% fitness记录当前群体的适应度值
     %当D(P)>D时,F1=1; 当D(P)<=D时,F1=0;
     %假设选路时网络没有发生拥塞,各节点可提供足够的缓冲以保证不丢失分组,且令pd,s=1。为了保证所选路径起始于源节点s终止于目的节点d,应该同时满足如下条件:
              % 1)必须存在i和j满足ps,j=1和pi,d=1,其中i,j∈{1,2,...,n};
              % 2)流入一个节点的链路数等于流出该节点的链路数。即 F2=0
              
n=size(tuoputu,1);  % n为结点数
max_fitness=0;  % max_fitness记录当前群体的最大适应度值
for i=1:populationNum  
      D(i)=0;  % D(i)记录该条染色体的时延
      in_out_rodeNum=zeros(1,n);
      psj=0;
      pid=0;
      in_out_rodeNum(1,vd)=in_out_rodeNum(1,vd)+1;
      in_out_rodeNum(1,vs)=in_out_rodeNum(1,vs)-1;  % 因为令pd,s=1
      m=1; % m记录路径P上的节点个数
      H(i)=0;  % 该条染色体的跳数
      allUij=0;  % allUij记录该路径上链路的总利用率
      uij=zeros(1,codeLength); % uij记录该路径上各链路的利用率(是一个数组)
      flag=0;% 标志当前个体中是否有重复链路
      for j=1:codeLength           
              a=codeRodeList{1,j}(1);
              b=codeRodeList{1,j}(2); 
              if (population(i,j)==1) 
                  for k=1:m-1
                      if rode{i,k}==[b,a]
                          flag=1;
                      end
                  end
                  H(i)=H(i)+1;
                  rode{i,m}=[a,b];
                  m=m+1;
                  in_out_rodeNum(1,a)=in_out_rodeNum(1,a)+population(i,j);
                  in_out_rodeNum(1,b)=in_out_rodeNum(1,b)-population(i,j);
                  D(i)=D(i)+tuoputu{a,b}(2);
                  uij(1,j)=B/tuoputu{a,b}(1);  
                  allUij=allUij+population(i,j)*uij(1,j);                  
              end   
              
              
              % 判断psj,pid的值
              if (codeRodeList{1,j}(1)==vs) & population(i,j)==1
                   psj=1;
              end
              if (codeRodeList{1,j}(2)==vd) & population(i,j)==1
                   pid=1;
              end
      end
      averageUij=allUij/H(i); % uij的平均值
      fangCha(i)=0;  % 该路径的链路利用率的方差
      for s=1:codeLength
           fangCha(i)=fangCha(i)+((uij(1,s)-averageUij)^2)*population(i,s);
      end
      R(i)=H(i)*B*D(i);  % 该路径的资源消耗函数
      
      % 判断F1的值
      F1=0;
      if D(i)>D 
           F1=1;  
      end 
      % 判断F2的值 
      F2=0;
      for k=1:n
          if in_out_rodeNum(1,k)~=0
              F2=1;
          end
      end 
      
      if  ((F1==0)&(psj==1)&(pid==1)&(F2==0))&(flag==0)
          jieNum=jieNum+1;
          chromosome(jieNum,:)=population(i,:); % 染色体
          p{jieNum,:}=rode(i,:); % 路径
          delay(jieNum)=D(i);  % 时延           
          F(jieNum)=A0*R(i)+B0*fangCha(i);  % 该路径的优化函数值 F=A0*R(p)+B0*fangCha(p)
      end
      fitness(i)=1/(A0*R(i)+B0*fangCha(i));      
end

⌨️ 快捷键说明

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