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

上传人:b****7 文档编号:16452948 上传时间:2023-07-13 格式:DOCX 页数:24 大小:19.08KB
下载 相关 举报
遗传算法C语言源代码一元函数和二元函数.docx_第1页
第1页 / 共24页
遗传算法C语言源代码一元函数和二元函数.docx_第2页
第2页 / 共24页
遗传算法C语言源代码一元函数和二元函数.docx_第3页
第3页 / 共24页
遗传算法C语言源代码一元函数和二元函数.docx_第4页
第4页 / 共24页
遗传算法C语言源代码一元函数和二元函数.docx_第5页
第5页 / 共24页
遗传算法C语言源代码一元函数和二元函数.docx_第6页
第6页 / 共24页
遗传算法C语言源代码一元函数和二元函数.docx_第7页
第7页 / 共24页
遗传算法C语言源代码一元函数和二元函数.docx_第8页
第8页 / 共24页
遗传算法C语言源代码一元函数和二元函数.docx_第9页
第9页 / 共24页
遗传算法C语言源代码一元函数和二元函数.docx_第10页
第10页 / 共24页
遗传算法C语言源代码一元函数和二元函数.docx_第11页
第11页 / 共24页
遗传算法C语言源代码一元函数和二元函数.docx_第12页
第12页 / 共24页
遗传算法C语言源代码一元函数和二元函数.docx_第13页
第13页 / 共24页
遗传算法C语言源代码一元函数和二元函数.docx_第14页
第14页 / 共24页
遗传算法C语言源代码一元函数和二元函数.docx_第15页
第15页 / 共24页
遗传算法C语言源代码一元函数和二元函数.docx_第16页
第16页 / 共24页
遗传算法C语言源代码一元函数和二元函数.docx_第17页
第17页 / 共24页
遗传算法C语言源代码一元函数和二元函数.docx_第18页
第18页 / 共24页
遗传算法C语言源代码一元函数和二元函数.docx_第19页
第19页 / 共24页
遗传算法C语言源代码一元函数和二元函数.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

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

《遗传算法C语言源代码一元函数和二元函数.docx》由会员分享,可在线阅读,更多相关《遗传算法C语言源代码一元函数和二元函数.docx(24页珍藏版)》请在冰点文库上搜索。

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

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

C语言遗传算法代码

以下为遗传算法的源代码,计算一元代函数的代码和二元函数的代码以+++++++++++++++++++++++++++++++++++++为分割线分割开来,请自行选择适合的代码,使用时请略看完代码的注释,在需要更改的地方更改为自己需要的代码。

+++++++++++++++++++++++++++++++一元函数代码++++++++++++++++++++++++++++

#include

#include

#include

#include

#definePOPSIZE1000

#definemaximization1

#defineminimization2

#definecmax100

#definecmin0

#definelength120

#definechromlengthlength1//染色体长度

//注意,你是求最大值还是求最小值

intfunctionmode=minimization;

//变量的上下限的修改开始

floatmin_x1=-2;//变量的下界

floatmax_x1=-1;//变量的上界

//变量的上下限的修改结束

intpopsize;//种群大小

intmaxgeneration;//最大世代数

doublepc;//交叉率

doublepm;//变异率

structindividual

{

charchrom[chromlength+1];

doublevalue;

doublefitness;//适应度

};

intgeneration;//世代数

intbest_index;

intworst_index;

structindividualbestindividual;//最佳个体

structindividualworstindividual;//最差个体

structindividualcurrentbest;

structindividualpopulation[POPSIZE];

//函数声明

voidgenerateinitialpopulation();

voidgeneratenextpopulation();

voidevaluatepopulation();

longdecodechromosome(char*,int,int);

voidcalculateobjectvalue();

voidcalculatefitnessvalue();

voidfindbestandworstindividual();

voidperformevolution();

voidselectoperator();

voidcrossoveroperator();

voidmutationoperator();

voidinput();

voidoutputtextreport();

voidgenerateinitialpopulation()//种群初始化

{

inti,j;

for(i=0;i

{

for(j=0;j

{

population[i].chrom[j]=(rand()%20<10)?

'0':

'1';

}

population[i].chrom[chromlength]='\0';

}

}

voidgeneratenextpopulation()//生成下一代

{

selectoperator();

crossoveroperator();

mutationoperator();

}

voidevaluatepopulation()//评价个体,求最佳个体

{

calculateobjectvalue();

calculatefitnessvalue();

findbestandworstindividual();

}

longdecodechromosome(char*string,intpoint,intlength)//给染色体解码

{

inti;

longdecimal=0;

char*pointer;

for(i=0,pointer=string+point;i

if(*pointer-'0')

{decimal+=(long)pow(2,i);

}

return(decimal);

}

voidcalculateobjectvalue()//计算函数值

{

inti;

longtemp1,temp2;

doublex1;

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);

//目标函数修改结束

}

}

voidcalculatefitnessvalue()//计算适应度

{

inti;

doubletemp;

for(i=0;i

{

if(functionmode==maximization)

{if((population[i].value+cmin)>0.0)

{temp=cmin+population[i].value;}

else

{temp=0.0;

}

}

elseif(functionmode==minimization)

{

if(population[i].value

{temp=cmax-population[i].value;}

else{temp=0.0;}

}

population[i].fitness=temp;

}

}

voidfindbestandworstindividual()//求最佳个体和最差个体

{

inti;

doublesum=0.0;

bestindividual=population[0];

worstindividual=population[0];

for(i=1;i

if(population[i].fitness>bestindividual.fitness){

bestindividual=population[i];

best_index=i;

}

elseif(population[i].fitness

{

worstindividual=population[i];

worst_index=i;

}

sum+=population[i].fitness;

}

if(generation==0){

currentbest=bestindividual;

}

else{

if(bestindividual.fitness>=currentbest.fitness){

currentbest=bestindividual;

}

}

}

voidperformevolution()//演示评价结果

{

if(bestindividual.fitness>currentbest.fitness){

currentbest=population[best_index];

}

else{

population[worst_index]=currentbest;

}

}

voidselectoperator()//比例选择算法

{

inti,index;

doublep,sum=0.0;

doublecfitness[POPSIZE];

structindividualnewpopulation[POPSIZE];

for(i=0;i

{sum+=population[i].fitness;}

for(i=0;i

cfitness[i]=population[i].fitness/sum;

}

for(i=1;i

cfitness[i]=cfitness[i-1]+cfitness[i];

}

for(i=0;i

{

p=rand()%1000/1000.0;

index=0;

while(p>cfitness[index])

{

index++;

}

newpopulation[i]=population[index];

}

for(i=0;i

population[i]=newpopulation[i];

}

}

voidcrossoveroperator()//交叉算法

{

inti,j;

intindex[POPSIZE];

intpoint,temp;

doublep;

charch;

for(i=0;i

index[i]=i;

}

for(i=0;i

point=rand()%(popsize-i);

temp=index[i];

index[i]=index[point+i];

index[point+i]=temp;

}

for(i=0;i

p=rand()%1000/1000.0;

if(p

point=rand()%(chromlength-1)+1;

for(j=point;j

ch=population[index[i]].chrom[j];

population[index[i]].chrom[j]=population[index[i+1]].chrom[j];

population[index[i+1]].chrom[j]=ch;

}

}

}

}

voidmutationoperator()//变异操作

{

inti,j;

doublep;

for(i=0;i

for(j=0;j

p=rand()%1000/1000.0;

if(p

population[i].chrom[j]=(population[i].chrom[j]=='0')?

'1':

'0';

}

}

}

}

voidinput()//数据输入

{//printf("初始化全局变量:

\n");

//printf("种群大小(50-500):

");

//scanf("%d",&popsize);

popsize=500;

if((popsize%2)!

=0)

{

//printf("种群大小已设置为偶数\n");

popsize++;};

//printf("最大世代数(100-300):

");

//scanf("%d",&maxgeneration);

maxgeneration=200;

//printf("交叉率(0.2-0.99):

");

//scanf("%f",&pc);

pc=0.95;

//printf("变异率(0.001-0.1):

");

//scanf("%f",&pm);

pm=0.03;

}

voidoutputtextreport()//数据输出

{

inti;

doublesum;

doubleaverage;

sum=0.0;

for(i=0;i

{sum+=population[i].value;}

average=sum/popsize;

printf("当前世代=%d\n当前世代平均函数值=%f\n当前世代最优函数值=%f\n",generation,average,population[best_index].value);

}

voidmain()//主函数

{inti;

longtemp1,temp2;

doublex1,x2;

generation=0;

input();

generateinitialpopulation();

evaluatepopulation();

while(generation

{

generation++;

generatenextpopulation();

evaluatepopulation();

performevolution();

outputtextreport();

}

printf("\n");

printf("统计结果:

");

printf("\n");

//printf("最大函数值等于:

%f\n",currentbest.fitness);

printf("其染色体编码为:

");

for(i=0;i

{

printf("%c",currentbest.chrom[i]);

}

printf("\n");

temp1=decodechromosome(currentbest.chrom,0,length1);

x1=(max_x1-min_x1)*temp1/(1024*1024-1)+min_x1;

printf("x1=%lf\n",x1);

//这是需要修改的地方

printf("最优值等于:

%f\n",(pow(x1,5)-3*x1-1)*(pow(x1,5)-3*x1-1));

}

+++++++++++++++++++++++++二元函数代码+++++++++++++++++++++++++++++++++++++++++

#include

#include

#include

#include

#definePOPSIZE500

#definemaximization1

#defineminimization2

#definecmax100

#definecmin0

#definelength120

#definelength220

#definechromlengthlength1+length2//染色体长度

//-----------求最大还是最小值

intfunctionmode=maximization;

//-----------

//-----------变量上下界

floatmin_x1=0;

floatmax_x1=3;

floatmin_x2=1;

floatmax_x2=5;

//-----------

intpopsize;//种群大小

intmaxgeneration;//最大世代数

doublepc;//交叉率

doublepm;//变异率

structindividual

{

charchrom[chromlength+1];

doublevalue;

doublefitness;//适应度

};

intgeneration;//世代数

intbest_index;

intworst_index;

structindividualbestindividual;//最佳个体

structindividualworstindividual;//最差个体

structindividualcurrentbest;

structindividualpopulation[POPSIZE];

//函数声明

voidgenerateinitialpopulation();

voidgeneratenextpopulation();

voidevaluatepopulation();

longdecodechromosome(char*,int,int);

voidcalculateobjectvalue();

voidcalculatefitnessvalue();

voidfindbestandworstindividual();

voidperformevolution();

voidselectoperator();

voidcrossoveroperator();

voidmutationoperator();

voidinput();

voidoutputtextreport();

voidgenerateinitialpopulation()//种群初始化

{

inti,j;

for(i=0;i

{

for(j=0;j

{

population[i].chrom[j]=(rand()%40<20)?

'0':

'1';

}

population[i].chrom[chromlength]='\0';

}

}

voidgeneratenextpopulation()//生成下一代

{

selectoperator();

crossoveroperator();

mutationoperator();

}

voidevaluatepopulation()//评价个体,求最佳个体

{

calculateobjectvalue();

calculatefitnessvalue();

findbestandworstindividual();

}

longdecodechromosome(char*string,intpoint,intlength)//给染色体解码

{

inti;

longdecimal=0;

char*pointer;

for(i=0,pointer=string+point;i

if(*pointer-'0')

{decimal+=(long)pow(2,i);

}

return(decimal);

}

voidcalculateobjectvalue()//计算函数值

{

inti;

longtemp1,temp2;

doublex1,x2;

for(i=0;i

{

temp1=decodechromosome(population[i].chrom,0,length1);

temp2=decodechromosome(population[i].chrom,length1,length2);

x1=(max_x1-min_x1)*temp1/(1024*1024-1)+min_x1;

x2=(max_x2-min_x2)*temp2/(1024*1024-1)+min_x2;

//-----------函数

population[i].value=x1*x1+sin(x1*x2)-x2*x2;

//-----------

}

}

voidcalculatefitnessvalue()//计算适应度

{

inti;

doubletemp;

for(i=0;i

{

if(functionmode==maximization)

{if((population[i].value+cmin)>0.0)

{temp=cmin+population[i].value;}

else

{temp=0.0;

}

}

elseif(functionmode==minimization)

{

if(population[i].value

{temp=cmax-population[i].value;}

else{temp=0.0;}

}

population[i].fitness=temp;

}

}

voidfindbestandworstindividual()//求最佳个体和最差个体

{

inti;

doublesum=0.0;

bestindividual=population[0];

worstindividual=population[0];

for(i=1;i

if(population[i].fitness>bestindividual.fitness){

bestindividual=population[i];

best_index=i;

}

elseif(population[i].fitness

{

worstindividual=population[i];

worst_index=i;

}

sum+=population[i].fitness;

}

if(generation==0){

currentbest=bestindividual;

}

else{

if(bestindividual.fitness>=currentbest.fitness){

currentbest=bestindividual;

}

}

}

voidperformevolution()//演示评价结果

{

if(bestindividual.fitness>currentbest.fitness){

currentbest=population[best_index];

}

else{

population[wor

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2