📄 caculatefitness.m
字号:
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+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 + -