|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
0 }* I/ u/ {% }( g4 w h" O规模为N的种群中的每个个体都要针对M个目标函数和种群中的N-1个个体进行比较,复杂度为O(MN),因此种群中的N个个体都比较结束的复杂度为O(MN2),即每进行一次Pareto分级的时间复杂度为O(MN2)。2 [ o2 L J" Y6 j D2 C% A
' j- v, h" x5 |) ?) T
该算法需要保存两个量:
1 ?% ~- ^0 M! c0 h+ ]2 d% G% n1 V! M2 d5 c; }/ g5 q$ r& N
(1).支配个数np。该量是在可行解空间中可以支配个体p的所有个体的数量。
* m0 B F* j7 i3 R2 K
7 I; }8 d5 p' `. H6 S(2).被支配个体集合SP。该量是可行解空间中所有被个体p支配的个体组成的集合。
/ o1 Y& A6 _0 q# A, r1 y# z2 i: J3 O
matlab代码:
: E& j- J+ z6 a( t: n9 Y
$ {7 ?/ U) \' |) f8 t. p6 u) V. R7 ^5 N6 A(注意PopObj填入的多目标的函数值,如果有两个目标,100个个体,那么就是100*2的矩阵,nSort是前沿面的编号)- S1 H4 W7 Z6 h% A9 {: D2 M
9 S+ d2 G# I' |6 x& I! W0 ^; Q- function [FrontNO,MaxFNO] = NDSort(PopObj,nSort)
- %NDSort - Do non-dominated sorting on the population by ENS
- %
- % FrontNO = NDSort(A,s) does non-dominated sorting on A, where A is a
- % matrix which stores the objective values of all the individuals in the
- % population, and s is the number of individuals being sorted at least.
- % FrontNO(i) means the number of front of the i-th individual.
- %
- % [FrontNO,K] = NDSort(...) also returns the maximum number of fronts,
- % except for the value of inf.
- %
- % In particular, s = 1 stands for find only the first non-dominated
- % front, s = size(A,1)/2 stands for sort only half of the population
- % (which is often used in the algorithm), and s = inf stands for sort the
- % whole population.
- %
- % Example:
- % [FrontNO,MaxFNO] = NDSort(PopObj,1)
- [N,M] = size(PopObj);
- FrontNO = inf(1,N);
- MaxFNO = 0;
- [PopObj,rank] = sortrows(PopObj);
- while sum(FrontNO<inf) < min(nSort,N)
- MaxFNO = MaxFNO + 1;
- for i = 1 : N
- if FrontNO(i) == inf
- Dominated = false;
- for j = i-1 : -1 : 1
- if FrontNO(j) == MaxFNO
- m = 2;
- while m <= M && PopObj(i,m) >= PopObj(j,m)
- m = m + 1;
- end
- Dominated = m > M;
- if Dominated || M == 2
- break;
- end
- end
- end
- if ~Dominated
- FrontNO(i) = MaxFNO;
- end
- end
- end
- end
- FrontNO(rank) = FrontNO;
- end# K6 `) n0 j2 Y% ~5 m4 ~
|
|