基本遗传算法及其在函数优化中的应用谭同学.docx

上传人:b****1 文档编号:10742795 上传时间:2023-05-27 格式:DOCX 页数:12 大小:142.06KB
下载 相关 举报
基本遗传算法及其在函数优化中的应用谭同学.docx_第1页
第1页 / 共12页
基本遗传算法及其在函数优化中的应用谭同学.docx_第2页
第2页 / 共12页
基本遗传算法及其在函数优化中的应用谭同学.docx_第3页
第3页 / 共12页
基本遗传算法及其在函数优化中的应用谭同学.docx_第4页
第4页 / 共12页
基本遗传算法及其在函数优化中的应用谭同学.docx_第5页
第5页 / 共12页
基本遗传算法及其在函数优化中的应用谭同学.docx_第6页
第6页 / 共12页
基本遗传算法及其在函数优化中的应用谭同学.docx_第7页
第7页 / 共12页
基本遗传算法及其在函数优化中的应用谭同学.docx_第8页
第8页 / 共12页
基本遗传算法及其在函数优化中的应用谭同学.docx_第9页
第9页 / 共12页
基本遗传算法及其在函数优化中的应用谭同学.docx_第10页
第10页 / 共12页
基本遗传算法及其在函数优化中的应用谭同学.docx_第11页
第11页 / 共12页
基本遗传算法及其在函数优化中的应用谭同学.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基本遗传算法及其在函数优化中的应用谭同学.docx

《基本遗传算法及其在函数优化中的应用谭同学.docx》由会员分享,可在线阅读,更多相关《基本遗传算法及其在函数优化中的应用谭同学.docx(12页珍藏版)》请在冰点文库上搜索。

基本遗传算法及其在函数优化中的应用谭同学.docx

基本遗传算法及其在函数优化中的应用谭同学

基本遗传算法及其在函数优化中的应用

摘要

遗传算法

遗传算法是一种是模拟生物遗传学和自然选择机理,通过人工方式构造的一类优化搜索算法,其编码技术和遗传操作比较简单,优化不受限制条件的约束,不需要有先验条件。

其搜索过程是从问题解的一个随机产生的集合开始的,而不是从单个个体开始的,具有隐含并行搜索特性,也就大大减少可陷入局部极小值的可能。

因而,遗传算法在求解函数优化问题中有着良好的应用,同时,遗传算法在解决可能在求解过程中产生组合爆炸的问题时会产生很好的效果。

关键字:

遗传算法函数优化人工智能

 

前言

这是一个关于遗传算法的问题,而本文的主要目的就是利用C语言编写程序实现利用遗传算法中的编码,变异,交叉,复制来求解函数最大值的问题。

 

一、遗传算法概述

遗传算法

是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。

它是由美国的J.Holland教授1975年首先提出,其主要特点是直接对结构对象进行操作,不存在求导和函数连续性的限定;具有内在的隐并行性和更好的全局寻优能力;采用概率化的寻优方法,能自动获取和指导优化的搜索空间,自适应地调整搜索方向,不需要确定的规则。

遗传算法的这些性质,已被人们广泛地应用于组合优化、机器学习、信号处理、自适应控制和人工生命等领域。

它是现代有关智能计算中的关键技术

二、遗传算法基本机理

遗传算法是模拟生物遗传学和自然选择机理,通过人工方式构造的一类优化搜索算法,是对生物进化过程进行的一种数学仿真,是进化计算的一种重要形式。

遗传算法与传统数学模型截然不同,它为那些难以找到传统数学模型的难题找出了一个解决方法。

同时,遗传算法借鉴了生物科学中的某些知识,从而体现了人工智能的这一交叉学科的特点。

遗传算法基本机理主要分为以下三方面:

1、编码与解码

将问题结构变换为位串形式编码表示的过程叫做编码;相反的,将位串形式编码表示变换为原问题结构的过程叫做解码或者译码。

把位串形式编码表示叫做染色体,有时也叫做个体。

2、适应度函数

为了体现染色体的适应能力,引入了对问题中的每一个染色体都进行度量的函数,叫做适应度函数

通过适应度函数来决定染色体的优劣程度,它体现了自然界进化中的优胜劣汰原则。

对于优化问题,适应度函数就是目标函数。

3、遗传操作

简单的遗传算法操作主要有三种:

选择

改进的遗传算法大量扩充了遗传操作,以达到更高的效率。

选择操作也叫做复制操作

交叉操作的简单方式是将被选择出的两个个体P1和P2作为父母个体,将两者的部分码值进行交换。

变异操作的简单方式是改变数码串的某个位置上的数码。

4、遗传算法基本步骤

1、初始化种群;

2、计算种群上每个个体的适应度值;

3、按由个体适应度值所决定的某个规则选择将进入下一代的个体

4、按概率PC进行交叉操作

5、按概率PC进行变异操作

6、若没有满足某种停止条件,则转步骤2),否则进入下一步;

7、输入种群中适应度值最优的染色体作为问题的满足解或最优解

5、基本遗传算法框图

 

基本遗传算法框图

I=i+1

 

 

复制变异

交叉

6、遗传算法求解举例

利用遗传算法求解函数:

的最大值,其中,x∈[-1,2]|。

7、编程实现

constintMAX=4194304。

constintMIN=0。

#include

#include//产生随机数要用到time(int>,以使每次产生的数不同。

#include//sin(float>在这儿。

usingnamespacestd。

constdoublepi=3.1415926。

classIndividuality{

private:

intchromosome。

//染色体

public:

voidset(intchromosome>

{this->chromosome=chromosome。

}

Individualityoperator=(Individualityc>

{this->chromosome=c.chromosome。

return*this。

}

booloperator==(Individualityc>

{returnthis->chromosome==c.chromosome。

}

floatresolve(>//通过染色体取得x的值.

{return-1.0+(float>chromosome*3.0/(MAX-1>。

}

floatevaluate(>//求f(>

{

returnresolve(>*(float>sin(10*pi*resolve(>>+1.0。

}

voidprint(>{

cout<<'\t'。

for(intj=21。

j>=0。

j-->//以下循环是在以二进制串的形式打印染色体

if((1<&chromosome>cout<<'1'。

elsecout<<'0'。

cout<<"\t\tx="<<<"\tf(x>="<<

}

//以下是对当前个体进行变异的操作

Individualityvariate(>

{

inti=rand(>%21+1。

this->chromosome^=1<

return*this。

}

//以下是两个个体进行交叉,并且返回两个新个体的操作

voidcrisscross(Individualityprnt1,Individualityprnt2,Individuality&child1,Individuality&child2>{

inti=rand(>%21+1。

inttemp1=prnt1.chromosome。

inttemp2=prnt2.chromosome。

inttemp=0。

for(。

i<22。

i++>

temp+=1<

temp1&=temp。

temp2&=temp。

prnt1.chromosome&=~temp。

prnt2.chromosome&=~temp。

prnt1.chromosome|=temp2。

prnt2.chromosome|=temp1。

child1=prnt1。

child2=prnt2。

}

}。

constintPOP_SIZE=200。

//建立一个种群的类,并且有固定的大小

//每次遗传,选出f(x>的排名在前50%的个体进行遗传<排名通过希尔排序实现),都会有约1%的个体变异,10%的个体发生交叉遗传,其余的直接遗传。

每次遗传都记录下本次f(x>为最大的个体Max。

遗传150次,如果过程中发现已有30代的Max一直不变了,说明已达到最优,基本不需要再遗传了,所以提前跳出循环。

classPopulation{

private:

Individualityind[POP_SIZE]。

public:

Population(>{

for(inti=0。

i

i++>

ind[i].set((((double>rand(>/(double>RAND_MAX>*MAX+MIN>>。

}

voidshellSort(>{

intgap,i,j。

Individualitytemp。

for(gap=POP_SIZE/2。

gap>0。

gap/=2>

for(i=gap。

i

i++>

for(j=i-gap。

j>=0&&ind[j].evaluate(>

j-=gap>

{

temp=ind[j]。

ind[j]=ind[j+gap]。

ind[j+gap]=temp。

}

}

voidinherit(>{

Population:

:

shellSort(>。

constintNT=POP_SIZE/2。

intnc=(rand(>%(POP_SIZE/10>+(POP_SIZE/4>>/2。

intnv=rand(>%(POP_SIZE/100+1>+(POP_SIZE/100>。

inti,n1,n2。

Individualitytemp[NT]。

for(i=0。

i

i++>

temp[i]=ind[i]。

for(i=0。

i

i++>{

n1=rand(>%NT。

ind[i]=temp[n1].variate(>。

}

for(i=nv。

i

i+=2>{

n1=rand(>%NT。

n2=rand(>%NT。

Individualitytemp1,temp2。

temp->crisscross(temp[n1],temp[n2],temp1,temp2>。

ind[i]=temp1。

ind[i+1]=temp2。

}

for(i=nv+nc*2。

i

i++>{

n1=rand(>%NT。

ind[i]=temp[n1]。

}

}

IndividualitygetMax(>{

Individualitymax=ind[0]。

for(inti=0。

i

i++>{

if(ind[i+1].evaluate(>>ind[i].evaluate(>>max=ind[i+1]。

}

returnmax。

}

voidtraverse(>{

for(inti=0。

i

i++>

ind[i].print(>。

cout<

}

}。

intmain(>{

srand((unsigned>time(NULL>>。

Populationa。

a.traverse(>。

intcount=0。

intgen=0。

for(inti=0。

i<150。

i++>{

Individualitytemp=a.getMax(>。

a.inherit(>。

if(a.getMax(>==temp>count++。

if(count>30>break。

a.traverse(>。

gen++。

}

cout<<"Themaxis:

\n"。

a.getMax(>.print(>。

cout<<"After"<

return0。

}

三、实验结果结论

这是迭代60次之后的结果,求得的最大值是2.85027,此时的x为1.85054

这是迭代54次之后的结果,求得的最大值是2.85027,此时的x为1.85059

结论:

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

利用遗传算法搜索函数最优点的方法极大地提高了搜索全局最优点的准确性,有效地避免了组合爆炸地产生。

因此,遗传算法在求解复杂的优化问题中具有广泛的应用前景。

四、参考文献

主要参考文献:

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

清华大学出版社,2009。

[2]王小平,曹立明.遗传算法-理论、应用与软件实现.西安:

西安交通大学出版社,2002。

[3]Schmitt,LotharM(2001>,遗传算法理论,TheoreticalComputerScience(259>,pp.1-61

[4]陈国良等,遗传算法及其应用,北京:

人了邮电出版社,1996.

[5]蒋冬初,遗传算法及其在函数优化问题中的应用研究,毕业论文,2004

[6]维基百科http:

//zh.wikipedia.org/zh/%E9%81%97%E4%BC%A0%E7%AE%97%E6%B3%95

[7]XX百科

申明:

所有资料为本人收集整理,仅限个人学习使用,勿做商业用途。

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

当前位置:首页 > 工程科技 > 能源化工

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

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