遗传算法在函数优化中的应用精品毕业设计完整版Word格式.docx

上传人:b****6 文档编号:18794678 上传时间:2023-01-01 格式:DOCX 页数:13 大小:82.73KB
下载 相关 举报
遗传算法在函数优化中的应用精品毕业设计完整版Word格式.docx_第1页
第1页 / 共13页
遗传算法在函数优化中的应用精品毕业设计完整版Word格式.docx_第2页
第2页 / 共13页
遗传算法在函数优化中的应用精品毕业设计完整版Word格式.docx_第3页
第3页 / 共13页
遗传算法在函数优化中的应用精品毕业设计完整版Word格式.docx_第4页
第4页 / 共13页
遗传算法在函数优化中的应用精品毕业设计完整版Word格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

遗传算法在函数优化中的应用精品毕业设计完整版Word格式.docx

《遗传算法在函数优化中的应用精品毕业设计完整版Word格式.docx》由会员分享,可在线阅读,更多相关《遗传算法在函数优化中的应用精品毕业设计完整版Word格式.docx(13页珍藏版)》请在冰豆网上搜索。

遗传算法在函数优化中的应用精品毕业设计完整版Word格式.docx

终止条件判断,若未达到终止条件,则转到Step3;

Step7:

输出结果。

5停机准则

(1)完成了预先给定的进化代数则停止;

(2)群体中的最优个体在连续若干代没有改进或平均适应度在连续若干代基本没有改进时停止。

6基本遗传算法框图

二.算法代码

#include<

stdio.h>

#include<

stdlib.h>

time.h>

math.h>

#definePOPSIZE500

#definechromlength5

intpopsize;

intmaxgeneration;

doublepc=0.0;

doublepm=0.0;

structindividual

{

intchrom[chromlength];

doublevalue;

doublefitness;

};

intgeneration;

intbest_index;

intworst_index;

structindividualbestindividual;

structindividualworstindividual;

structindividualcurrentbest;

t

structindividualpopulation[POPSIZE];

voidgenerateinitialpopulation();

voidgeneratenextpopulation();

voidevaluatepopulation();

voidcalculateobjectfitness();

doubledecodechromosome(int,int);

voidfindbestandworstindividual();

voidperformevolution();

voidselectoperator();

voidcrossoveroperator();

voidmutationoperator();

voidinput();

voidoutputtextreport();

voidmain()

{

inti;

srand((unsigned)time(NULL));

printf("

本程序为求函数y=x*x的最大值\n"

);

generation=0;

input();

种群规模(popsize):

%d;

\n最大世代数(maxgeneration)%d;

\n交叉率(pc)%f;

变异率(pm)%f\n\n"

popsize,maxgeneration,pc,pm);

/*editbyppme*/

generateinitialpopulation();

evaluatepopulation();

while(generation<

maxgeneration)

{

generation++;

generatenextpopulation();

evaluatepopulation();

performevolution();

outputtextreport();

}

\n"

统计结果:

"

最大函数值等于:

%f\n"

currentbest.fitness);

其染色体编码为:

"

//计算currentbest的value

for(i=0;

i<

chromlength;

i++)

printf("

%d"

currentbest.chrom[i]);

}

voidgenerateinitialpopulation()

inti,j;

for(i=0;

i<

popsize;

i++)

for(j=0;

j<

chromlength;

j++)

{

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

5)?

0:

1;

}

显示初始化结果:

for(i=0;

popsize;

for(j=0;

j<

j++)

population[i].chrom[j]);

}

voidgeneratenextpopulation()

selectoperator();

crossoveroperator();

mutationoperator();

voidevaluatepopulation()

calculateobjectfitness();

findbestandworstindividual();

voidcalculateobjectfitness()

intj;

calculateobjectfitnessisexecuting!

for(i=0;

i++)

doubletemp;

temp=decodechromosome(i,chromlength);

population[i].value=(double)temp;

population[i].fitness=population[i].value*population[i].value;

显示当前种群结果:

for(j=0;

printf("

}

%lf"

population[i].value);

population[i].fitness);

doubledecodechromosome(intpop_index,intlength)

doubledecimal=0;

for(i=length;

i>

=0;

i--)

decimal+=population[pop_index].chrom[i]*(int)pow((double)2,(int)i);

return(decimal);

voidfindbestandworstindividual()

doublesum=0.0;

bestindividual=population[0];

worstindividual=population[0];

for(i=1;

if(population[i].fitness>

bestindividual.fitness)

bestindividual=population[i];

best_index=i;

elseif(population[i].fitness<

worstindividual.fitness)/

worstindividual=population[i];

worst_index=i;

sum+=population[i].fitness;

}//for

if(generation==0)

currentbest=bestindividual;

else

if(bestindividual.fitness>

=currentbest.fitness)

{

currentbest=bestindividual;

voidperformevolution()

if(bestindividual.fitness>

currentbest.fitness)

currentbest=population[best_index];

population[worst_index]=currentbest;

voidselectoperator()

inti,index;

doublep,sum=0.0;

doublecfitness[POPSIZE];

structindividualnewpopulation[POPSIZE];

srand((unsigned)time(NULL));

i++)//

i++){

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

for(i=1;

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

}//累计适应率

i++)

p=rand()%1000/1000.0;

index=0;

while(p>

cfitness[index])

index++;

newpopulation[i]=population[index];

population[i]=newpopulation[i];

voidcrossoveroperator()

intindex[POPSIZE];

intpoint,temp;

doublep;

i++){

index[i]=i;

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

temp=index[i];

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

index[point+i]=temp;

popsize-1;

i+=2){

if(p<

pc){

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

for(j=point;

j<

j++){

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

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

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

}

voidmutationoperator()

i++){

p=rand()%1000/1000.0;

if(p<

pm){

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

1:

0;

voidinput()

初始化全局变量:

种群大小(4-500偶数):

scanf("

%d"

&

popsize);

if((popsize%2)!

=0)

种群大小已设置为偶数\n"

popsize++;

};

最大世代数(10-300):

maxgeneration);

交叉率(0.2-1.0):

%lf"

pc);

变异率(0.00):

pm);

voidoutputtextreport()

doublesum;

doubleaverage;

sum=0.0;

sum+=population[i].value;

average=sum/popsize;

当前世代=%d\n当前世代染色体平均值=%f\n当前世代染色体最高值=%f\n"

generation,average,population[best_index].value);

2.结果截图

3.心得体会

通过这次在函数优化过程中运用遗传算法,使我更加熟练的掌握了遗传算法。

让我了解到遗传算法搜索函数的优点以及传统搜索方法的局限性。

传统的搜索方法由于其应用的局限性,在某些情况下可能搜索到局部最优点,而不能达到全局最优点。

利用遗传算法搜索函数最优点的方法极大地提高了搜索全局最优点的准确性。

四.参考文献

[1]蔡自兴徐光祐.人工智能及其应用.北京:

清华大学出版社,2009;

[2]马永,贾俊芳.遗传算法研究综述.第23卷.第三期.2007年12月;

[3]XX百科

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

当前位置:首页 > 解决方案 > 工作计划

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

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