2022年遗传算法C语言源代码 .pdf

上传人:Q****o 文档编号:27031212 上传时间:2022-07-21 格式:PDF 页数:15 大小:56.67KB
返回 下载 相关 举报
2022年遗传算法C语言源代码 .pdf_第1页
第1页 / 共15页
2022年遗传算法C语言源代码 .pdf_第2页
第2页 / 共15页
点击查看更多>>
资源描述

《2022年遗传算法C语言源代码 .pdf》由会员分享,可在线阅读,更多相关《2022年遗传算法C语言源代码 .pdf(15页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、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 le

2、ngth1 / 染色体长度/ 注意,你是求最大值还是求最小值int functionmode=minimization;/ 变量的上下限的修改开始float min_x1=-2;/ 变量的下界float max_x1=-1;/ 变量的上界/ 变量的上下限的修改结束int popsize; / 种群大小int maxgeneration; / 最大世代数double pc; / 交叉率double pm; / 变异率struct individualchar chromchromlength+1;double value; double fitness; / 适应度;int generation

3、; / 世代数int best_index;int worst_index;精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 15 页struct individual bestindividual; / 最正确个体struct individual worstindividual; /最差个体struct individual currentbest;struct individual populationPOPSIZE;/ 函数声明void generateinitialpopulation(); void generatenextp

4、opulation();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();v

5、oid generateinitialpopulation( ) / 种群初始化int i,j;for (i=0;ipopsize; i+)for(j=0;jchromlength;j+)populationi.chromj=(rand()%2010)?0:1;populationi.chromchromlength=0;void generatenextpopulation() / 生成下一代selectoperator();crossoveroperator();mutationoperator();void evaluatepopulation() / 评价个体,求最正确个体calcul

6、ateobjectvalue();calculatefitnessvalue();精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 15 页findbestandworstindividual();long decodechromosome(char *string ,int point,int length) /给染色体解码int i;long decimal=0;char*pointer;for(i=0,pointer=string+point;ilength;i+,pointer+)if(*pointer-0)decimal +=(

7、long)pow(2,i);return (decimal);void calculateobjectvalue() / 计算函数值int i;long temp1,temp2;double x1;for (i=0; ipopsize; i+)temp1=decodechromosome(populationi.chrom,0,length1);x1=(max_x1-min_x1)*temp1/(1024*1024-1)+min_x1;/ 目标函数修改开始populationi.value=(pow(x1,5)-3*x1-1)*(pow(x1,5)-3*x1-1);/ 目标函数修改结束void

8、 calculatefitnessvalue()/ 计算适应度int i;double temp;for(i=0;i0.0)temp=cmin+populationi.value;elsetemp=0.0;else if (functionmode=minimization)if(populationi.valuecmax)temp=cmax-populationi.value;else temp=0.0;populationi.fitness=temp;void findbestandworstindividual( ) /求最正确个体和最差个体int i;double sum=0.0;be

9、stindividual=population0;worstindividual=population0;for (i=1;i)bestindividual=populationi;best_index=i;else if (populationi.fitness=)currentbest=bestindividual;精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 15 页void performevolution() /演示评价结果if ()currentbest=populationbest_index;elsepopulatio

10、nworst_index=currentbest;void selectoperator() / 比例选择算法int i,index;double p,sum=0.0;double cfitnessPOPSIZE;struct individual newpopulationPOPSIZE;for(i=0;ipopsize;i+)sum+=populationi.fitness;for(i=0;ipopsize; i+)cfitnessi=populationi.fitness/sum;for(i=1;ipopsize; i+)cfitnessi=cfitnessi-1+cfitnessi;f

11、or (i=0;icfitnessindex)index+;newpopulationi=populationindex;for(i=0;ipopsize; i+)populationi=newpopulationi;void crossoveroperator() / 交叉算法精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 15 页int i,j;int indexPOPSIZE;int point,temp;double p;char ch;for (i=0;ipopsize;i+)indexi=i;for (i=0;ipopsiz

12、e;i+)point=rand()%(popsize-i);temp=indexi;indexi=indexpoint+i;indexpoint+i=temp;for (i=0;ipopsize-1;i+=2)p=rand()%1000/1000.0;if (ppc)point=rand()%(chromlength-1)+1;for (j=point; jchromlength;j+)ch=populationindexi.chromj;populationindexi.chromj=populationindexi+1.chromj;populationindexi+1.chromj=ch

13、;void mutationoperator() /变异操作int i,j;double p;for (i=0;ipopsize;i+)for(j=0;jchromlength;j+)p=rand()%1000/1000.0;if (ppm)populationi.chromj=(populationi.chromj=0)?1:0;精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 15 页void input() / 数据输入 /printf( 初始化全局变量:n);/printf( 种群大小 (50-500):);/scanf(%d,

14、&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;void outputtextreport()/数据输出int i;double sum;double ave

15、rage;sum=0.0;for(i=0;ipopsize;i+)sum+=populationi.value;average=sum/popsize;printf(当 前 世 代 =%dn当 前 世 代 平 均 函 数 值 =%fn当 前 世 代 最 优 函 数 值=%fn,generation,average,populationbest_index.value);void main() / 主函数 int i;long temp1,temp2;double x1,x2;generation=0;input();generateinitialpopulation();evaluatepop

16、ulation();while(generationmaxgeneration)精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 15 页generation+;generatenextpopulation();evaluatepopulation();performevolution();outputtextreport();printf(n);printf( 统计结果 : );printf(n);/printf( 最大函数值等于:%fn,);printf( 其染色体编码为:);for (i=0;ichromlength;i+)prin

17、tf(%c,i);printf(n); temp1=decodechromosome(currentbest.chrom,0,length1);x1=(max_x1-min_x1)*temp1/(1024*1024-1)+min_x1;printf(x1=%lfn,x1);/ 这是需要修改的地方printf( 最优值等于:%fn,(pow(x1,5)-3*x1-1)*(pow(x1,5)-3*x1-1);+ 二元函数代码+#include #include#include#include#define POPSIZE 500#define maximization 1#define minim

18、ization 2#define cmax 100#define cmin 0#define length1 20#define length2 20#define chromlength length1+length2 / 染色体长度/- 求最大还是最小值int functionmode=maximization;/-/- 变量上下界精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 15 页float min_x1=0;float max_x1=3;float min_x2=1;float max_x2=5;/-int popsize;

19、 / 种群大小int maxgeneration; / 最大世代数double pc; / 交叉率double pm; / 变异率struct individualchar chromchromlength+1;double value; double fitness; / 适应度;int generation; / 世代数int best_index;int worst_index;struct individual bestindividual; / 最正确个体struct individual worstindividual; /最差个体struct individual current

20、best;struct individual populationPOPSIZE;/ 函数声明void generateinitialpopulation(); void generatenextpopulation();void evaluatepopulation();long decodechromosome(char *,int,int);void calculateobjectvalue();void calculatefitnessvalue();void findbestandworstindividual();void performevolution();void selec

21、toperator();void crossoveroperator();void mutationoperator();void input();void outputtextreport();void generateinitialpopulation( ) / 种群初始化int i,j;for (i=0;ipopsize; i+)精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 15 页for(j=0;jchromlength;j+)populationi.chromj=(rand()%4020)?0:1;populationi.c

22、hromchromlength=0;void generatenextpopulation() / 生成下一代selectoperator();crossoveroperator();mutationoperator();void evaluatepopulation() / 评价个体,求最正确个体calculateobjectvalue();calculatefitnessvalue();findbestandworstindividual();long decodechromosome(char *string ,int point,int length) /给染色体解码int i;lon

23、g decimal=0;char*pointer;for(i=0,pointer=string+point;ilength;i+,pointer+)if(*pointer-0)decimal +=(long)pow(2,i);return (decimal);void calculateobjectvalue() / 计算函数值int i;long temp1,temp2;double x1,x2;for (i=0; ipopsize; i+)temp1=decodechromosome(populationi.chrom,0,length1);temp2=decodechromosome(p

24、opulationi.chrom,length1,length2);x1=(max_x1-min_x1)*temp1/(1024*1024-1)+min_x1;精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 15 页x2=(max_x2-min_x2)*temp2/(1024*1024-1)+min_x2;/- 函数populationi.value=x1*x1+sin(x1*x2)-x2*x2;/-void calculatefitnessvalue()/ 计算适应度int i;double temp;for(i=0;i0.0)te

25、mp=cmin+populationi.value;elsetemp=0.0;else if (functionmode=minimization)if(populationi.valuecmax)temp=cmax-populationi.value;else temp=0.0;populationi.fitness=temp;void findbestandworstindividual( ) /求最正确个体和最差个体int i;double sum=0.0;bestindividual=population0;worstindividual=population0;for (i=1;i)

26、bestindividual=populationi;best_index=i;else if (populationi.fitness=)currentbest=bestindividual;void performevolution() /演示评价结果if ()currentbest=populationbest_index;elsepopulationworst_index=currentbest;void selectoperator() / 比例选择算法int i,index;double p,sum=0.0;double cfitnessPOPSIZE;struct individ

27、ual newpopulationPOPSIZE;for(i=0;ipopsize;i+)sum+=populationi.fitness;for(i=0;ipopsize; i+)cfitnessi=populationi.fitness/sum;for(i=1;ipopsize; i+)cfitnessi=cfitnessi-1+cfitnessi;for (i=0;icfitnessindex)index+;newpopulationi=populationindex;for(i=0;ipopsize; i+)populationi=newpopulationi;void crossov

28、eroperator() / 交叉算法int i,j;int indexPOPSIZE;int point,temp;double p;char ch;for (i=0;ipopsize;i+)indexi=i;for (i=0;ipopsize;i+)point=rand()%(popsize-i);temp=indexi;indexi=indexpoint+i;indexpoint+i=temp;for (i=0;ipopsize-1;i+=2)p=rand()%1000/1000.0;if (ppc)point=rand()%(chromlength-1)+1;for (j=point;

29、 jchromlength;j+)ch=populationindexi.chromj;populationindexi.chromj=populationindexi+1.chromj;populationindexi+1.chromj=ch;精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 13 页,共 15 页void mutationoperator() /变异操作int i,j;double p;for (i=0;ipopsize;i+)for(j=0;jchromlength;j+)p=rand()%1000/1000.0;if (ppm

30、)populationi.chromj=(populationi.chromj=0)?1:0;void input() / 数据输入 /printf( 初始化全局变量:n);/printf( 种群大小 (50-500):);/scanf(%d, &popsize);popsize=200;if(popsize%2) != 0)/printf( 种群大小已设置为偶数n);popsize+;/printf( 最大世代数 (100-300):);/scanf(%d, &maxgeneration);maxgeneration=200;/printf( 交叉率 (0.2-0.99):);/scanf(

31、%f, &pc);pc=0.9;/printf( 变异率 (0.001-0.1):);/scanf(%f, &pm);pm=0.003;void outputtextreport()/数据输出int i;double sum;double average;sum=0.0;for(i=0;ipopsize;i+)sum+=populationi.value;average=sum/popsize;printf(当 前 世 代 =%dn当 前 世 代 平 均 函 数 值 =%fn当 前 世 代 最 优 函 数 值精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - -

32、 -第 14 页,共 15 页=%fn,generation,average,populationbest_index.value);void main() / 主函数 int i;long temp1,temp2;double x1,x2;generation=0;input();generateinitialpopulation();evaluatepopulation();while(generationmaxgeneration)generation+;generatenextpopulation();evaluatepopulation();performevolution();ou

33、tputtextreport();printf(n);printf( 统计结果 : );printf(n);/printf( 最大函数值等于:%fn,);printf( 其染色体编码为:);for (i=0;ichromlength;i+)printf(%c,i);printf(n); temp1=decodechromosome(currentbest.chrom,0,length1);temp2=decodechromosome(currentbest.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;printf(x=%lf,y=%lfn,x1,x2);/- 修改函数printf( 最大值 =%fn,x1*x1+sin(x1*x2)-x2*x2);/-精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 15 页,共 15 页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com