大适应度和平均适应度,最后输出全局最大值 三 运行环境 本程序的开发工具是 VC++,在 VC++下运行。 四
源代码 #include
#include #include #include #define POPSIZE 500 #define maximization 1 #define minimization 2 #define cmax 100 #define cmin 0 #define length1 10 #define length2 10 #define chromlength length1+length2 //染色体长度 int functionmode=maximization; int popsize; //种群大小 int maxgeneration; //最大世代数 double pc; //交叉率 double pm; //变异率 struct individual { char chrom[chromlength+1]; double value; double fitness; //适应度 }; int generation; //世代数 int best_index; int worst_index; struct individual bestindividual; //最佳个体 struct individual worstindividual; //最差个体 struct individual currentbest;
struct individual population[POPSIZE]; //函数声明 void generateinitialpopulation(); void generatenextpopulation(); void evaluatepopulation(); long decodechromosome(char *,int,int); void calculateobjectvalue(); void calculatefitnessvalue(); void findbestandworstindividual(); void performevolution(); void selectoperator(); void crossoveroperator(); void mutationoperator(); void input(); void outputtextreport(); void generateinitialpopulation( ) //种群初始化 { int i,j;
for (i=0;ixml:namespace prefix = popsize; i++) { for(j=0;j { int i; long decimal=0; char*pointer; for(i=0,pointer=string+point;i ulateobjectvalue() { int i; long temp1,temp2; double x1,x2;
//计算函数值
for (i=0; i0.0) {temp=cmin+population[i].value;} else {temp=0.0; } } else if (functionmode==minimization) { if(population[i].value else{ temp=0.0;} } population[i].fitness=temp; } } void findbestandworstindividual( ) //求最佳个体和最差个体 { int i; double sum=0.0; bestindividual=population[0]; worstindividual=population[0]; for (i=1;ibestindividual.fitness){ bestindividual=population[i]; best_index=i; } else if (population[i].fitness=currentbest.fitness){ currentbest=bestindividual; } } } void performevolution() //演示评价结果 { if (bestindividual.fitness>currentbest.fitness){ currentbest=population[best_index]; } else{ population[worst_index]=