天天看點

nsga 的java實作_多目标遺傳算法 ------ NSGA-II (部分源碼解析)介紹

NSGA(非支配排序遺傳算法)、NSGA-II(帶精英政策的快速非支配排序遺傳算法),都是基于遺傳算法的多目标優化算法,是基于pareto最優解讨論的多目标優化。

在官網:

http://www.iitk.ac.in/kangal/codes.shtml

可以下載下傳到  NSGA-II  的C語言版源碼,下載下傳最新版後打開如下:

nsga 的java實作_多目标遺傳算法 ------ NSGA-II (部分源碼解析)介紹

其中,nsga2r.c  為主檔案,打開後找到核心代碼,如下:

1 for (i=2; i<=ngen; i++)2 {3 selection (parent_pop, child_pop);4 mutation_pop (child_pop);5 decode_pop(child_pop);6 evaluate_pop(child_pop);7 merge (parent_pop, child_pop, mixed_pop);8 fill_nondominated_sort (mixed_pop, parent_pop);9

11 fprintf(fpt4,"# gen = %d\n",i);12 report_pop(parent_pop,fpt4);13 fflush(fpt4);14 printf("\n gen = %d",i);15 fflush(stdout);16 }

由第1行代碼可知,初始化生成代碼為第一代,其後的操作為第  2代到設定的疊代次數  ngen

由第3行代碼可知,selection 函數  (二進制錦标賽選擇,SBX交叉)等功能的實作包裝在一起。

由第4行代碼可知,   mutation_pop 函數 對新種群( child_pop ) 進行變異操作。

由第5行代碼可知,decode_pop 函數 為對二進制編碼的遺傳個體進行解碼操作。

由第6行代碼可知,evaluate_pop 函數 是對新種群( child_pop ) 進行多目标函數值的計算。

由第7行代碼可知,merge 函數  将 父種群  和   子種群   合并成臨時種群(mixed_pop)。

由第8行代碼可知,fill_nondominated_sort 對臨時種群(mixed_pop) 非支配排序,擁擠距離判斷。

由第12行代碼可知, report_pop  對  父種群(parent_pop)中的個體的多目标函數值,支配層,擁擠距離,個體編碼進行列印。