遗传算法详解及Java实现word版本.docx

遗传算法详解及Java实现word版本.docx

ID:57234253

大小:143.22 KB

页数:8页

时间:2020-08-07

遗传算法详解及Java实现word版本.docx_第1页
遗传算法详解及Java实现word版本.docx_第2页
遗传算法详解及Java实现word版本.docx_第3页
遗传算法详解及Java实现word版本.docx_第4页
遗传算法详解及Java实现word版本.docx_第5页
资源描述:

《遗传算法详解及Java实现word版本.docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、遗传算法详解及Java实现遗传算法详解及Java实现1.遗传算法的起源20世纪60年代中期,美国密西根大学的JohnHolland提出了位串编码技术,这种编码既适合于变异又适合杂交操作,并且他强调将杂交作为主要的遗传操作。遗传算法的通用编码技术及简单有效的遗传操作为其广泛的应用和成功奠定了基础。2.遗传算法的目的解决经典数学方法无法有效地求出最优解的复杂的、大规模的难题。3.遗传算法的思想遗传算法通常使用二进制编码来仿照基因编码,初代种群产生之后,按照适者生存和优胜劣汰的原理,逐代(generation)演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度(fitness)大小选择

2、个体,并借助于自然遗传学的遗传算子(geneticoperators)进行组合交叉(crossover)和变异(mutation),产生出代表新的解集的种群。4.遗传算法的步骤?(1)用固定长度的染色体表示问题变量域,选择染色体种群数量为N,交叉概率为C,突变概率为M ?(2)定义适应性函数来衡量问题域上单个染色体的性能或适应性。适应性函数是在繁殖过程中选择配对染色体的基础。 ?(3)随机产生一个大小为N的染色体的种群。 ?(4)计算每个染色体的适应性。 ?(5)在当前种群中选择一对染色体。双亲染色体被选择的概率和其适应性有关。适应性高的染色体被选中的概率高于适应性低的染色体。 ?(6)通过

3、执行遗传操作——交叉和突变产生一对后代染色体。 ?(7)将后代染色体放入新种群中。 ?(8)重复步骤5,直到新染色体种群的大小等于初始种群的大小N为止。 ?(9)用新(后代)染色体种群取代初始(双亲)染色体种群。 ?(10)回到步骤4,重复这个过程直到满足终止条件为止。5.算法思路:?(1)变量作为实数,可以视为演化算法的表现型形式。从表现型到基因型的映射称为编码。我们这里采用二进制编码,将某个变量值代表的个体表示为一个{0,1}二进制串。串长取决于求解的精度。?(2)用遗传算法解决函数优化问题,先随机产生0和1填充10个46位基因数字串来创建染色体的初始种群,再通过自然选择,交叉,变异等步

4、骤得出下一代种群。?(3)迭代,再次执行步骤2直到满足需求或达到迭代次数。6.遗传算法解决函数优化问题(1)问题描述(2)编码与解码  确定求解精度到6位小数,由于区间长度为6,必须将区间[0,6]分为6×10^6等份。因为由2^22<6×10^6<2^23得,使用23位的二进制数来表示变量,故单个染色体需46位基因(以表示x和y两个变量)示例: Java实现代码:?12/** *将染色体转换成x,y变量的值34567891011121314151617181920 */privatedouble[]calculatefitnessvalue(Stringstr){     //二进制数前2

5、3位为x的二进制字符串,后23位为y的二进制字符串    inta=Integer.parseInt(str.substring(0,23),2);         intb=Integer.parseInt(str.substring(23,46),2);     doublex= a*(6.0-0)/(Math.pow(2,23)-1);   //x的基因    doubley= b*(6.0-0)/(Math.pow(2,23)-1);   //y的基因     //需优化的函数    doublefitness=3-Math.sin(2*x)*Math.sin(2*x)       

6、     -Math.sin(2*y)*Math.sin(2*y);     double[]returns={x,y,fitness};    returnreturns; }(3)轮盘选择基本思想:个体被选中的概率与其适应度值成正比,即按由个体适应度值所决定的某个规则选择将进入下一代的个体。(详细解析)Java实现代码:?123456789101112131415161718/** *轮盘选择 *计算群体上每个个体的适应度值; *按由个体适应度值所决定的某个规则选择将进入下一代的个体; */privatevoidselect(){    doubleevals[]=newdouble[C

7、hrNum];//所有染色体适应值    doublep[]=newdouble[ChrNum];//各染色体选择概率    doubleq[]=newdouble[ChrNum];//累计概率    doubleF=0;//累计适应值总和    for(inti=0;i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。