遗传算法C语言源代码(一元函数和二元函数)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言遗传算法代码
以下为遗传算法的源代码,计算一元代函数的代码和二元函数的代码以+++++++++++++++++++++++++++++++++++++为分割线分割开来,请自行选择适合的代码,使用时请略看完代码的注释,在需要更改的地方更改为自己需要的代码。
+++++++++++++++++++++++++++++++一元函数代码++++++++++++++++++++++++++++
#include
#include
#include
#include
#define POPSIZE 1000
#define maximization 1
#define minimization 2
#define cmax 100
#define cmin 0
#define length1 20
#define chromlength length1 //染色体长度
//注意,你是求最大值还是求最小值
int functionmode=minimization;
//变量的上下限的修改开始
float min_x1=-2;//变量的下界
float max_x1=-1;//变量的上界
//变量的上下限的修改结束
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;i { for(j=0;j { population[i].chrom[j]=(rand()%20<10)?'0':'1'; } population[i].chrom[chromlength]='\0'; } } void generatenextpopulation() //生成下一代 { selectoperator(); crossoveroperator(); mutationoperator(); } void evaluatepopulation() //评价个体,求最佳个体{ calculateobjectvalue(); calculatefitnessvalue(); findbestandworstindividual(); } long decodechromosome(char *string ,int point,int length) //给染色体解码{ int i; long decimal=0; char*pointer; for(i=0,pointer=string+point;i if(*pointer-'0') {decimal +=(long)pow(2,i); } return (decimal); } void calculateobjectvalue() //计算函数值 { int i; long temp1,temp2; double x1; for (i=0; i { temp1=decodechromosome(population[i].chrom,0,length1); x1=(max_x1-min_x1)*temp1/(1024*1024-1)+min_x1; //目标函数修改开始 population[i].value=(pow(x1,5)-3*x1-1)*(pow(x1,5)-3*x1-1); //目标函数修改结束 } } void calculatefitnessvalue()//计算适应度 { int i; double temp; for(i=0;i {