//个体的类声明:
class individual
{
public:
double value[Dimension];//每一维xi的值
int sp[2*popsize];
//支配i的集合
int np;//个体i支配的数量
int is_dominated;//集合sp的个数
int rank;//优先级,Pareto级别为当前最高级
double fitness;//个体适应度值
void init();//初始化个体
double fvalue[2];//ZDT1问题目标函数的值
void f_count();//计算fvalue的值
};
//群体的类声明:
class population
{
public:
population();//类初始化
individual P[popsize];
individual Q[popsize];
individual R[2*popsize];
void set_p_q();
//随机产生一个初始父代P,在此基础上采用二元锦标赛选择、
//交叉和变异操作产生子代Q。P和Q群体规模均为popsize
//将Pt和Qt并入到Rt中(初始时t=0),对Rt进行快速非支配解排序,
//构造其所有不同等级的非支配解集F1、F2........
int Rnum;
int Pnum;
int Qnum;
//P,Q,R中元素的个数
void calc_fitness();//计算P ,Q群体的适应度
void Q_make_new_pop();
void f_sort(int i);//对拥挤距快速非支配排序法:重点!!!
void maincal();//主要操作
int Q_choice(int a,int b);
//两个个体属于不同等级的非支配解集,优先考虑等级序号较小的
//若两个个体属于同一等级的非支配解集,优先考虑拥挤距离较大的
void choose_best();
void archive_truncation_procedure();
int min_distance();
};
2022-05-10 09:34:58
95KB
SPEA2
1