ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:40.39KB ,
资源ID:10262654      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10262654.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(遗传算法优化函数报告加程序.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

遗传算法优化函数报告加程序.docx

1、遗传算法优化函数报告加程序微波/毫米波工程中的优化方法作业报告编写优化程序(用Matlab、C、Fortran语言等方式),优化下列函数:通过查找资料,最后选择应用遗传算法来进行函数的优化,并通过C语言编写程序,最后得到优化结果。1遗传算法简介近年发展起来的遗传算法是模拟生物在自然环境中的遗传和进化过程而形成的一种自适应、全局优化概率搜索算法。其主要特征是直接对结构对象进行操作,不存在求导和函数连续性的限定;具有内在的隐并行性和良好的全局寻优能力;采用概率化的寻优方法;能自动获取和指导优化的搜索空间,自适应地调整搜索方向,不需要确定的规则;遗传算法这些性质,已被人们广泛地应用于组合优 化、机器

2、学习、信号处理、自适应控制和人工生命领域,它是现代有关智能计算中的关键技术之一。遗传算法搜索最优解的方法是模仿生物的进化过程,即通过选择与染色体之间的交叉和变异来完成的。遗传算法主要使用选择算子、交叉算子与变异算子来模拟生物进化,从而产生一代又一代的种群(1)选择算子:是模拟自然选择的操作,反映“优胜劣汰”原理。它根据每一个个体的适应度,按照一定规则或方法,从t 代种群中选择出一些优良的个体(或作为母体,或让其遗传到下一代种群)。(2)交叉算子:是模拟有性繁殖的基因重组操作,它将从种群所选择的每一对母体,以一定的交叉概率交换它们之间的部分基因。(3)变异算子:是模拟基因突变的遗传操作,它对种群

3、中的每一个个体,以一定的变异概率改变某一个或某一些基因座上的基因值为其他的等位基因。 交叉算子与变异算子的作用都在于重组染色体基因,以生成新的个体。实践表明,遗传算法求解函数优化问题的计算效率比较高、适用范围相当广。与传统的优化方法相比,遗传算法具有如下特点:具有简单通用、鲁棒性强、适于并行处理以及高效、实用等显著优点。2 遗传算法的运算过程1、初始化确定种群规模N,交叉概率Pc,变异概率Pm和终止进化准则;随机生成N个个体作为初始种群;2、个体评计算评估中各个体的适应度。3、种群进化(1)选择(母体)从中运用选择算子选择出M/2对母体(MN)。(2)交叉 对所择的M/2对母体,以概率Pc交叉

4、,形成M个中间个体。(3)变异 对M个中间个体分别独立以概率Pm执行变异,形成M个候选个体。(4)选择(子代)从上述所形成的M个候选个体中依据适应度选择出N个个体组成新一代种群。4、终止检验如已满足终止准则,则输出中具有最大适应度的个体作为最优解,终止计算。否则置tt+1并转步骤2。3 需求分析1、本程序演示的是用简单遗传算法随机一个种群,然后根据所给的交叉率,变异率,世代数计算最大适应度所在的代数。2、演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的命令;相应的输入数据和运算结果显示在其后。3、测试数据f(x1,x2,x3)=(3

5、*x1+x2-2*x3+0.8)/(2*x1-x2+x3)+(4*x1-2*x2+x3)/(7*x1+3*x2-x3)并根据题给的x1,x2,x3的约束条件作适应度函数求最大适应度即为函数的最大值。4 程序的各函数简单算法说明(1)void generateinitialpopulation ()和void input ()初始化种群和遗传算法参数。input() 函数输入种群大小,染色体长度,最大世代数,交叉率,变异率等参数。(2) void calculateobjectvalue();计算适应度函数值 。根据给定的变量用适应度函数计算然后返回适度值。(3)选择函数selectoperat

6、or()在函数selectoperator()中首先用rand ()函数产生01间的选择算子,当适度累计值不为零时,比较各个体所占总的适应度百分比的累计和与选择算子,直到达到选择算子的值那个个体就被选出,即适应度为fi的个体以fi/fk的概率继续存在;显然,个体适应度愈高,被选中的概率愈大。但是,适应度小的个体也有可能被选中,以便增加下一代群体的多样性。(4)染色体交叉函数crossoveroperator()这是遗传算法中的最重要的函数之一,它是对个体两个变量所合成的染色体进行交叉,而不是变量染色体的交叉,这要搞清楚。首先用rand ()函数产生随机概率,若小于交叉概率,则进行染色体交叉,同

7、时交叉次数加1。这时又要用rand()函数随机产生一位交叉位,把染色体的交叉位的后面部分交叉即可;若大于交叉概率,则进行简单的染色体复制即可。(5)染色体变异函数mutation()变异是针对染色体字符变异的,而不是对个体而言,即个体变异的概率是一样。随机产生比较概率,若小于变异概率,则1变为0,0变为1,同时变异次数加1。(6)long decodechromosome(char *,int,int)本函数是染色体解码函数,它将以数组形式存储的二进制数转成十进制数,然后才能用适应度函数计算。(7)void findbestandworstindividual()本函数是求最大适应度个体的,每

8、一代的所有个体都要和初始的最佳比较,如果大于就赋给最佳。(8)void outputtextreport () 输出种群统计结果输出每一代的种群的最大适应度和平均适应度,最后输出全局最大值。程序附录:#include #include#include#include#define POPSIZE 500/种群大小#define maximization 1/最大值标志#define minimization 2/最小值标志#define cmax 1500000#define cmin 0#define length1 10/第一组变量的基因长度#define length2 10#defin

9、e length3 10#define chromlength length1+length2+length3 /染色体长度(基因的总长度) int functionmode=maximization;/最优化类型 int popsize; /种群大小int maxgeneration; /最大世代数 double pc; /交叉率 double pm; /变异率struct individual char chromchromlength+1;double value; double fitness; /适应度;int generation; /世代数int best_index;/最佳个体

10、的编号int worst_index;/最差个体的编号struct individual bestindividual; /当前代的最佳个体struct individual worstindividual; /当前代的最差个体struct individual currentbest;/目前最佳的个体struct individual populationPOPSIZE;/种群/函数声明 void generateinitialpopulation();/产生初始化种群 void generatenextpopulation();/产生下一代种群void evaluatepopulation

11、();/评价种群long decodechromosome(char *,int,int);/染色体解码void calculateobjectvalue();/计算对象的值void calculatefitnessvalue();/计算适应度值void findbestandworstindividual();/找出最好和最差的个体void performevolution();/进化void selectoperator();/选择void crossoveroperator();/交叉void mutationoperator();/变异void input();void outputt

12、extreport();/输出void generateinitialpopulation(void ) /种群初始化 int i,j; srand(unsigned)time(NULL); for (i=0;ipopsize; i+) for(j=0;jchromlength;j+) populationi.chromj=(rand()%105)?0:1; populationi.chromchromlength=0; void generatenextpopulation(void) /生成下一代 selectoperator(); crossoveroperator(); mutatio

13、noperator();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) decim

14、al +=(long)pow(2,i); return (decimal);void calculateobjectvalue() /计算函数值 int i; long temp1,temp2,temp3; double x1,x2,x3; for (i=0; ipopsize; i+) temp1=decodechromosome(populationi.chrom,0,length1); temp2=decodechromosome(populationi.chrom,length1,length2); temp3=decodechromosome(populationi.chrom,le

15、ngth2,length3); x1=4*temp1/1023; x2=4*temp2/1023; x3=4*temp2/1023; populationi.value=(3*x1+x2-2*x3+0.8)/(2*x1-x2+x3)+(4*x1-2*x2+x3)/(7*x1+3*x2-x3);void calculatefitnessvalue(void)/计算适应度 int i;double temp; for(i=0;i0.0) temp=cmin+populationi.value; else temp=0.0; else if (functionmode=minimization) i

16、f(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

17、 if (populationi.fitness=currentbest.fitness) currentbest=bestindividual; void performevolution(void) /演示评价结果。将当前代最好的个体替代最差的个体 if (bestindividual.fitnesscurrentbest.fitness) currentbest=populationbest_index; else populationworst_index=currentbest; void selectoperator(void) /比例选择算法 int i,index; doubl

18、e 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; f

19、or(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; /单点交叉算法

20、for (i=0;ipopsize-1;i+) 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(void) /变异操作 int i,j; double p; for (i=0;ipopsize;i+

21、) 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); if(popsize%2) != 0) printf( 种群大小已设置为偶数n); popsize+; printf( 最大世代数(100-300):); scanf(%d, &maxgeneration); printf(

22、 交叉率(0.2-0.99):); scanf(%f, &pc); printf( 变异率(0.001-0.1):); scanf(%f, &pm);void outputtextreport()/数据输出 int i;double sum;double average;sum=0.0;for(i=0;ipopsize;i+)sum+=populationi.value;average=sum/popsize; printf(当前世代=%dn当前世代平均函数值=%2.9fn当前世代最高函数值=%2.9fn,generation,average,populationbest_index.valu

23、e);void main(void) /主函数 int i;printf(本程序为求函数y=(3*x1+x2-2*x3+0.8)/(2*x1-x2+x3)+(4*x1-2*x2+x3)/(7*x1+3*x2-x3)的最大值 n其中x1+x2-x3=1,-x1+x2-x3=-1,12*x1+5*x2+12*x3=34.8,12*x1+12*x2+7*x3=29.1,-6*x1+x2+x3=-4.1,0=x1,0=x2,0=x3n); generation=0; input(); generateinitialpopulation(); evaluatepopulation(); while(generationmaxgeneration) generation+; generatenextpopulation(); evaluatepopulation(); performevolution(); outputtextreport(); printf(n); printf( 统计结果: ); printf(n);printf(最大函数值等于:%2.9fn,currentbest.fitness); printf(其染色体编码为:); for (i=0;ichromlength;i+) printf(%c,currentbest.chromi); printf(n);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1