• 大小: 7KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-12
  • 语言: C/C++
  • 标签: 遗传算法  C++  

资源简介

遗传算法完整代码,针对多元函数求最优解,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; //最大世代数
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 *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() //计算函数值

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]

评论

共有 条评论