《遗传算法源代码》由会员分享,可在线阅读,更多相关《遗传算法源代码(11页珍藏版)》请在金锄头文库上搜索。
1、遗传算法源代码遗传算法源代码#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+LENGTH2int FunctionMode=MAXIMIZATION;int PopSize =80;int MaxGeneration =200;double Pc = 0.6;double Pm
2、= 0.001;struct individualchar chromCHROMLENGTH+1;double value;double fitness;int generation;int best_index;int worst_index;struct individual bestindividual;struct individual worstindividual;struct individual currentbest;struct individual populationPOPSIZE;void GenerateInitialPopulation(void);void Ge
3、nerateNextPopulation(void);void EvaluatePopulation(void);void CalculateObjectValue(void); long DecodeChromosome(char *,int,int);void CalculateFitnessValue(void); void FindBestAndWorstIndividual(void); void PerformEvolution(void);void SelectionOperator(void);void CrossoverOperator(void); void Mutatio
4、nOperator(void);void OutputTextReport(void);void main(void)generation=0; GenerateInitialPopulation();EvaluatePopulation(); while(generation0.0)temp=Cmin+populationi.value;elsetemp=0.0;else if(FunctionMode=MINIMIZATION)if(populationi.valuebestindividual.fitness) bestindividual=populationi;best_index=
5、i;else if (populationi.fitness=currentbest.fitness) currentbest=bestindividual;void PerformEvolution(void) if (bestindividual.fitnesscurrentbest.fitness)currentbest=populationbest_index;elsepopulationworst_index=currentbest;void SelectionOperator(void) int i,index;double p,sum=0.0; double cfitnessPO
6、PSIZE; struct individual newpopulationPOPSIZE; for(i=0;icfitnessindex)index+;newpopulationi=populationindex; for(i=0;iPopSize; i+)populationi=newpopulationi; void CrossoverOperator(void) int i,j;int indexPOPSIZE; int point,temp;double p;char ch; for (i=0;iPopSize;i+) indexi=i;for (i=0;iPopSize;i+) p
7、oint=rand()%(PopSize-i); temp=indexi;indexi=indexpoint+i;indexpoint+i=temp;for (i=0;iPopSize-1;i+=2)p=rand()%1000/1000.0;if (pPc)point=rand()%(CHROMLENGTH-1)+1;for (j=point; jCHROMLENGTH;j+)ch=populationindexi.chromj;populationindexi.chromj=populationindexi+1.chromj;populationindexi+1.chromj=ch;void
8、 MutationOperator(void) int i,j;double p;for (i=0;iPopSize;i+)for(j=0;jCHROMLENGTH;j+)p=rand()%1001/1000.0;if (pPm)populationi.chromj=(populationi.chromj=0)?1:0;void OutputTextReport(void)int i;double sum;double average;sum=0.0;for(i=0;iPopSize;i+)sum+=populationi.value;average=sum/PopSize;printf(“gen=%d,avg=%f,best=%f,“,generation,average,currentbest.value);printf(“chromosome=“);for (i=0;iCHROMLENGTH;i+)printf(“%c“,currentbest.chromi);printf(“n“);