关于一篇paper(CAEA) experiment code的源代码阅读分析:本文针对一篇关于多目标进化算法研究的论文的代码进行了分析,通过分析学习进化算法相应知识并且进一步学习和掌握C++的泛型编程风格以及利用C++进行实验验证的手段。
程序结构:
头文件:common.h, dmoea.h,global.h,moeadind.h,nsga2alg.h,nsga2ind.h,random.h,recomb.h,scalarfunc.h,sngaalg.h,sngaind.h (total :11)
源文件:common.cpp,domea.cpp,global.cpp,moea.cpp,moeadind.cpp,nsga2alg.cpp,nsga2ind.cpp,random.cpp,sngaalg.cpp,sngaind.cpp (total : 10)
本code实现了三个算法NSGA-II、MOEA/D、CAEA(在本项目中与CAEA算法相对应的代码文件是snga),项目的头文件与cpp文件基本上是对应的,并且与三个算法也是对应的。
首先,我们介绍每个头文件及cpp文件的作用和主要内容。
sngaalg.h头文件中声明了算法CAEA(CSNGA)的类,sngaalg.cpp文件给出了CSNGA类的方法的定义;
sngaalg.h中声明的CSNGA类的主要成员:
{
int 型变量popsize,表示种群的大小;
最主要的成员函数是执行函数:void execute(int run, vector<double>& hvl, vector<double>& igd, double& totaltime, double &unevolvetime);
vector <CSNGAInd>ps; //ps是用来存储测试问题的Pareto前沿的;
init_population(); //初始化种群:
}
init_population(); 初始化中需要:
{
初始化种群个体
初始化锚点、参考点、最小点、观察点、极值点、划分扇形区域填充个体
}
sngaind.h是CAEA算法