nsga2的拥挤度matlab代码示例
时间: 2023-09-24 19:02:22 浏览: 39
以下是NSGA-II算法中的拥挤度计算的Matlab代码示例:
```
function [pop, F] = nsga2(pop, fun, params)
%...其他代码
% 计算拥挤度
pop = crowding_distance(pop, F);
%...其他代码
end
function pop = crowding_distance(pop, F)
[m, n] = size(F);
for i = 1 : m
f = F(i,:);
[~, idx] = sortrows(pop(f,:), f);
pop(f(idx(1))).crowding_distance = Inf;
pop(f(idx(end))).crowding_distance = Inf;
for j = 2 : n-1
pop(f(idx(j))).crowding_distance = ...
pop(f(idx(j))).crowding_distance ...
+ (pop(f(idx(j+1))).obj - pop(f(idx(j-1))).obj)/...
(max(pop(f).obj) - min(pop(f).obj));
end
end
end
```
其中,`pop`是种群数组,`F`是当前种群的非支配排序结果。`crowding_distance`函数用于计算每个个体的拥挤度。对于每个非支配层,按照目标函数值进行排序后,对于每个个体,计算其左右领域的目标函数差值之和,并将结果保存在`crowding_distance`字段中。在排序时,边界个体的拥挤度设置为无穷大,以保证它们不会被选择。