NSGA2算法中的拥挤度计算
作者:互联网
拥挤距离:第i-1个与第i+1个所有目标函数值之差的和。注意是所有目标函数值之差。因此需要将每个目标函数值排序后进行计算,其中第一个和最后一个个体的拥挤距离设置为无穷大。
部分代码如下:
for i = 1:M %目标函数个数 lim_f(i,1) = min(new_AC(:,k+i)); %目标函数的极小值(k之后对应各个目标值) lim_f(i,2) = max(new_AC(:,k+i)); %目标函数的极大值 end DD = []; crowd_value = []; for i = 1:M [val,ind] = sort(new_AC(:,k+i)); %将目标函数i的值排序 %遍历种群中的所有个体 for j = 1:s2 if j == 1 DD(ind(j),i) = inf; %设置目标函数i的极小值的拥挤距离值为无穷大 elseif j == s2 DD(ind(j),i) = inf; %设置目标函数i的极大值的拥挤距离值为无穷大 else DD(ind(j),i) = (new_AC(ind(j+1),k+i) - new_AC(ind(j-1),k+i))/(lim_f(i,2) - lim_f(i,1)); %计算目标函数i非边界点的拥挤距离值 end end end for jj = 1:s2 crowd_value(jj) = sum(DD(jj,:)); %计算各个粒子的拥挤距离值(求和) end
标签:AC,end,函数,拥挤,DD,ind,算法,NSGA2,new 来源: https://www.cnblogs.com/jerry521/p/13956372.html