1 引言 遗传算法是模拟生物在自然环境中的遗传和进化过程而形成的一种自适应全局优化概率搜索算法。总的说来,遗传算法是按不依赖于问题本身的方式去求解问题。它的目标是搜索这个多维、高度非线性空间以找到具有最优适应值(即最小费用的)的点[1]。 基本遗传算法是一个迭代过程,它模仿生物在自然环境中的遗传和进化机理,反复将选择算子、交叉算子和变异算子作用于种群,最终可得到问题的最优解和近似最优解。2 遗传算法程序设计改进比较2.1 基本遗传算法对tsp问题解的影响 本文研究的遗传算法及改进算法的实现是以c++语言为基础,在windows2000的版本上运行,其实现程序是在microsoft visual stadio 6.0上编写及运行调试的。 1) 遗传算法的执行代码p(); //种群的初始化for(int i=0;i<pop();i++) atefitness(i); //计算各个个体的适应值tics(); //统计最优个体while(entropy>decen||variance>decvar)//m_tsp.m_gen<100){//将新种群更迭为旧种群,并进行遗传操作ate(); //将新种群付给旧种群tion(); //对旧种群进行遗传操作,产生新种群m_tsp.m_gen++;tics(); //对新产生的种群进行统计} 2) 简单的遗传算法与分支定界法对tsp问题求解结果的对比 遗传算法在解决npc问题的领域内具有寻找最优解的能力。但随着城市个数的增加,已没有精确解,无法确定遗传算法求解的精度有多高。一般情况下,当迭代代数增大时,解的精度可能高,但是时间开销也会增大。因此可以通过改进遗传算法来提高搜索能力,提高解的精度。
表1 10个城市的tsp问题求解结果数据算法试验结果简单遗传算法分支定界法最佳解时间精确解时间试验12448.6100375s2448.61003700:07:30试验22448.61003713s试验32448.6100379s试验42459.54305410s试验52459.5430547s
2.2 初始化时的启发信息对tsp问题解的影响 1) 初始化启发信息 在上述实验算法的基础上,对每一个初始化的个体的每五个相邻城市用分支界定法寻找最优子路径,然后执行遗传算法。 2) 遗传算法与含有启发信息的遗传算法求解结果的对比 当城市数增至20个时,用分支定界法已经不可能在可以接受的时间内得到精确的解了,只能通过近似算法获得其可接受的解。试验设计中算法的截止条件:固定迭代1000代。表2中的平均最优解为经过多次试验(10次以上)得到的最优解的平均值,最优解的出现时间为最优解出现的平均时间,交叉操作次数为最优解出现时交叉次数的平均值。
表2 20个城市的tsp问题求解结果数据算法交叉操作次数最优解出现时间平均最优解简单遗传算法80244.479.4s1641.8含初始化启发信息的ga79000.237.4s1398.9
从表2中可以看出,当初始种群时引入启发信息将提高遗传算法的寻优能力。同时缩短了遗传算法的寻优时间和问题的求解精度。2.3 交叉算子对tsp问题解的影响 1)循环贪心交叉算子的核心代码for(i=1;i<m_chrom;i++){ flag=0; city=m_newpop[first].chrom[i-1]; //确定当前城市 j=0; while(flag==0&&j<4) { sign=adjcity[city][j]; //adjcity数组的数据为当前城市按顺序排列的邻接城市 flag=judge(first,i,sign); //判断此邻接城市是否已经存在待形成的个体中 j++; } if(flag= =0) //如果所有邻接城市皆在待扩展的个体中 { while(flag= =0) { sign=(int)rand()/(rand_max/(m_ chrom-1)); //随机选择一城市 flag=judge(first,i,sign); } } if(flag==1) m_newpop[first].chrom[i]=sign; } 2)问题描述与结果比较 下面笔者用经典的测试遗传算法效率的oliver tsp问题来测试循环贪心交叉算子的解的精度和解效率。oliver tsp问题的30个城市位置坐标如表3所示[2]。
表3 oliver tsp问题的30个城市位置坐标城市编号坐标城市编号坐标城市编号坐标1(87,7)11(58,69)21(4,50)2(91,83)12(54,62)22(13,40)3(83,46)13(51,67)23(18,40)4(71,44)14(37,84)24(24,42)5(64,60)15(41,94)25(25,38)6(68,58)16(2,99)26(41,26)7(83,69)17(7,64)27(45,21)8(87,76)18(22,60)28(44,35)9(74,78)19(25,62)29(58,35)10(71,71)20(18,54)30(62,32)表4 贪心交叉与部分匹配交叉的比较(oliver tsp问题的30个城市)交叉算子交叉操作次数平均时间平均最优解部分匹配交叉5976031.2s517.0贪心交叉1577428.6s433.4
从表4、图1中可以看到,贪心交叉算子大大提高了遗传算法的寻优能力,同时也降低了交叉操作次数。在多次试验中,贪心交叉算子找到的最优解与目前记载的最佳数据的误差率为2.7%。而部分匹配交叉算子找到的最优解与目前记载的最佳数据的误差率高达7%。从而可以得到交叉算子对于遗传算法
的计算效率和计算结果起主导性作用[3]。
中国论文网(www.lunwen.net.cn)免费学术期刊论文发表,目录,论文查重入口,本科毕业论文怎么写,职称论文范文,论文摘要,论文文献资料,毕业论文格式,论文检测降重服务。