


免费预览已结束,剩余12页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 chromchromlength+1;double value; double fitness; /适应度;int generation; /世代数int best_index;int worst_index;struct individual bestindividual; /最佳个体struct individual worstindividual; /最差个体struct individual currentbest;struct individual populationPOPSIZE;/函数声明 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;ipopsize; i+)for(j=0;jchromlength;j+)populationi.chromj=(rand()%2010)?0:1;populationi.chromchromlength=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;ilength;i+,pointer+)if(*pointer-0)decimal +=(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 calculatefitnessvalue()/计算适应度int i;double temp; for(i=0;i0.0) temp=cmin+populationi.value; else temp=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;ibestindividual.fitness)bestindividual=populationi;best_index=i;else if (populationi.fitness=currentbest.fitness)currentbest=bestindividual;void performevolution() /演示评价结果if (bestindividual.fitnesscurrentbest.fitness)currentbest=populationbest_index;elsepopulationworst_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;for (i=0;icfitnessindex)index+;newpopulationi=populationindex;for(i=0;ipopsize; i+)populationi=newpopulationi;void crossoveroperator() /交叉算法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; jchromlength;j+)ch=populationindexi.chromj;populationindexi.chromj=populationindexi+1.chromj;populationindexi+1.chromj=ch;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;void input() /数据输入 /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;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当前世代最优函数值=%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();outputtextreport(); printf(n);printf( 统计结果: ); printf(n);/printf(最大函数值等于:%fn,currentbest.fitness);printf(其染色体编码为:);for (i=0;ichromlength;i+)printf(%c,currentbest.chromi); 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 minimization 2#define cmax 100#define cmin 0#define length1 20#define length2 20#define chromlength length1+length2 /染色体长度/-求最大还是最小值int functionmode=maximization;/-/-变量上下界float min_x1=0;float max_x1=3;float min_x2=1;float max_x2=5;/- int popsize; /种群大小int maxgeneration; /最大世代数 double pc; /交叉率 double pm; /变异率struct individual char chromchromlength+1;double value; double fitness; /适应度;int generation; /世代数int best_index;int worst_index;struct individual bestindividual; /最佳个体struct individual worstindividual; /最差个体struct individual currentbest;struct individual populationPOPSIZE;/函数声明 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;ipopsize; i+)for(j=0;jchromlength;j+)populationi.chromj=(rand()%4020)?0:1;populationi.chromchromlength=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;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(populationi.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; /-函数populationi.value=x1*x1+sin(x1*x2)-x2*x2;/-void calculatefitnessvalue()/计算适应度int i;double temp; for(i=0;i0.0) temp=cmin+populationi.value; else temp=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;ibestindividual.fitness)bestindividual=populationi;best_index=i;else if (populationi.fitness=currentbest.fitness)currentbest=bestindividual;void performevolution() /演示评价结果if (bestindividual.fitnesscurrentbest.fitness)currentbest=populationbest_index;elsepopulationworst_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;for (i=0;icfitnessindex)index+;newpopulationi=populationindex;for(i=0;ipopsize; i+)populationi=newpopulationi;void crossoveroperator() /交叉算法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; jchromlength;j+)ch=populationindexi.chromj;populationindexi.chromj=populationindexi+1.chromj;populationindexi+1.chromj=ch;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;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(%f, &pc);pc=0.9; /printf( 变异率(0.001-0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 纸张回收合同范本
- 美国短期租房合同范本
- 防疫物资协议合同范本
- 植树造林漫画题目及答案
- 美术教学计划模板范文(5篇)
- 文化交流市场分析与趋势
- 2025年手卫生季度试题及答案
- 2025年生物统计应用试题及答案
- 医学基础题题库及答案
- 2025年山西省忻州市事业单位工勤技能考试题库(含答案)
- 康复科院感染管理制度
- 2025年民族宗教政策法规学习月知识竞赛试题库(含答案)
- 人工湖设计方案
- 《原发性肝癌诊疗指南(2024年版)》解读课件
- 私人诊所免责协议书
- 《冠心病合并2型糖尿病患者的血糖管理专家共识(2024版)》解读
- 2025-2030羽毛球产业规划专项研究报告
- 《年产量50万吨煤制乙二醇合成工段工艺设计》6400字(论文)
- 体育新课程标准2025版
- 成都建材使用一网通系统-建材代理商操作手册
- 幼小衔接音乐课件
评论
0/150
提交评论