資源簡介
遺傳算法完整代碼,針對多元函數(shù)求最優(yōu)解,C++
代碼片段和文件信息
#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;?//最大世代數(shù)
double?pc;?//交叉率
double?pm;?//變異率
struct?individual?{
char?chrom[chromlength+1];?
double?value;?
double?fitness;?//適應度
};??
int?generation;?//世代數(shù)
int?best_index;??
int?worst_index;??
struct?individual?bestindividual;?//最佳個體
struct?individual?worstindividual;?//最差個體
struct?individual?currentbest;??
struct?individual?population[POPSIZE];??
//函數(shù)聲明
void?generateinitialpopulation();?
void?generatenextpopulation();?
void?evaluatepopulation();??
long?decodechromosome(char?*intint);?
void?calculateobjectvalue();?
void?calculatefitnessvalue();??
void?findbestandworstindividual();?
void?performevolution();?
void?selectoperator();?
void?crossoveroperator();?
void?mutationoperator();?
void?input();??
void?outputtextreport();?
void?generateinitialpopulation(?)?//種群初始化
?{
int?ij;??
for?(i=0;i for(j=0;j population[i].chrom[j]=(rand()%10<5)?‘0‘:‘1‘;
}
population[i].chrom[chromlength]=‘\0‘;?
}??
}??
void?generatenextpopulation()?//生成下一代
{?
selectoperator();?
crossoveroperator();?
mutationoperator();??
}??
void?evaluatepopulation()?//評價個體,求最佳個體
{?
calculateobjectvalue();?
calculatefitnessvalue();??
findbestandworstindividual();?
}??
long?decodechromosome(char?*string?int?pointint?length)?//給染色體解碼
{?
int?i;??
long?decimal=0;?
char*pointer;??
for(i=0pointer=string+point;i {
if(*pointer-‘0‘)??
decimal?+=(long)pow(2i);?
}??
return?(decimal);??
}??
void?calculateobjectvalue()?//計算函數(shù)值
{?
int?i;??
long?temp1temp2;??
double?x1x2;?
for?(i=0;?i temp1=decodechromosome(population[i].chrom0length1);??
temp2=decodechromosome(population[i].chromlength1length2);?
x1=4.096*temp1/1023.0-2.048;?
x2=4.096*temp2/1023.0-2.048;??
population[i].value=100*(x1*x1-x2)*?(x1*x1-x2)+(1-x1)*(1-x1);?
}?
}??
void?calculatefitnessvalue()//計算適應度
{?
int?i;??
double?temp;??
for(i=0;i {??
if(functionmode==maximization){
if((population[i].value+cmin)>0.0)?{
temp=cmin+population[i].value;
}?
else?{
temp=0.0;
}?
}??
else?if?(functionmode==minimization){??
if(population[i].value temp=cmax-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;i if?(population[i].fitness>bestindividual.fitness){?
bestindividual=population[i]
評論
共有 條評論