遗传算法C语言源代码(一元函数和二元函数)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

{

相关文档
最新文档