遗传算法顺序交叉java,求解旅行商问题的顺序交叉多子代遗传算法
求解旅行商问题的顺序交叉多子代遗传算法
【专利摘要】本发明公开了一种求解旅行商问题的顺序交叉多子代遗传算法。首先依据生物进化理论和数学生态学理论,提出了一种求解旅行商问题的顺序交叉多子代遗传算法,并给出了基于顺序交叉的多子代的产生方法。顺序交叉多子代遗传算法所产生的子代个体数量明显增多,使得种群竞争更加激烈,从而增加了产生优秀个体的可能性,故可使遗传算法的性能得到更好的改善。TSPLIB中两个例子的计算结果表明,顺序交叉多子代遗传算法的运算速度明显提高,迭代次数明显减少,从而验证了本发明所给出的求解旅行商问题的顺序交叉多子代遗传算法的有效性。
【专利说明】求解旅行商问题的顺序交叉多子代遗传算法
【技术领域】
[0001] 本发明求解旅行商问题的顺序交叉多子代遗传算法,属于应用人工智能技术领 域。
【背景技术】
[0002] 旅行商问题(Travelling Salesman Problem,简称TSP)是近代组合优化领域、数 学领域中的著名问题之一。TSP问题的一般提法是:一个商人要到/7个城市去推销商品,/7 个城市中任意两个城市之间的距离是已知的,该旅行商从某一城市出发,寻找一条可经由 每个城市一次且仅一次,最后回到原出发城市,并使所走的路程最短的路线。TSP问题已经 被证明是一个典型的^难题。由于TSP问题具有形式简单、易于理解等优点,在电网规划、 网络优化、管道铺设和物流调度等方面有着广泛的应用。因此,求解TSP问题有着很高的实 际应用价值。自1932年K. Menger提出旅行商问题以来,该问题已经引起多个领域的许多 学者的兴趣,它是目前优化领域里研究的热点问题。1985年,Goldberg和Grefenstette首 次应用遗传算法求解TSP问题。此后,许多学者对求解TSP的遗传算法进行了改进,在一定 程度上克服了算法的早熟收敛问题,而且算法的收敛速度也有一定程度的提高。
[0003] 现有文献中的遗传算法每次迭代产生子代数量与父代相同,但在自然界中所有能 够生存和发展的种群,其父代产生子代的数量都远远多于父代个体的数量。基于这样的事 实,提出了基于顺序交叉的多子代遗传算法,并用其求解TSP问题。所谓的多子代遗传算法 是指交叉产生的子代个体数量多于父代个体数量的遗传算法。顺序交叉多子代遗传算法通 过顺序交叉产生的子代个体数量多于父代个体数量,使得种群内的竞争加剧。在种群内的 竞争过程中,优秀的个体具有较强的生命力,容易存活下来,而具有较低生存能力的个体则 被淘汰,从而使物种逐渐地向适应于生存环境的方向进化,进而产生更优良的物种。因此, 求解TSP问题的顺序交叉多子代遗传算法可提高算法的收敛速度。
【发明内容】
[0004] 针对现有运用遗传算法求解旅行商问题存在的问题,本发明对现有遗传算法进行 改进,提出了一种求解旅行商问题的顺序交叉多子代遗传算法。求解旅行商问题的顺序交 叉多子代遗传算法与现有求解旅行商问题的遗传算法相比,其显著特征在于:其一,进化策 略不同。顺序交叉多子代遗传算法的交叉概率为1。其二,交叉后产生的子代数量不同。顺 序交叉多子代遗传算法交叉产生的子代数量明显多于现有求解旅行商问题的遗传算法。这 种求解旅行商问题的顺序交叉多子代遗传算法产生优秀个体的可能性增加,因而可提高算 法的收敛速度。
[0005] 求解旅行商问题的顺序交叉多子代遗传算法,其特征在于,具体包括以下几个步 骤: 步骤一:顺序交叉多子代遗传算法的理论基础。
[0006] (1)生物学理论基础 现有文献中求解TSP问题的遗传算法,都是一对父代产生一对子代。而在生物进化的 过程中,通常一对父代繁殖的子代个数多于两个,这样的物种在进化过程中不但能够很好 的生存下来,而且能够使物种得到进化,从而得到更优良的物种;而一对父代繁殖的子代个 数小于等于两个的物种实际上是不存在的,即使存在这样的物种,在进化的过程中,由于疾 病、食物等因素的影响,最终也会灭绝。另外,当某一种群内部的子代个体数量多于父代时, 种群内个体的数量增加,促使种群内部的竞争加剧,由于种群内部的优秀个体具有较强的 生存能力,容易存活下来,而具有较低生存能力的个体则被淘汰,从而使物种逐渐地向适应 于生存环境的方向进化,进而产生更优良的物种。因此,自然界中的物种在进化过程中,子 代个体的数量应该多于父代个体的数量。
[0007] (2)数学生态学理论基础 为了说明生物灭种的概率,我们假设一个种群开始只有一个个体,在某一时间?其大 小将为0的概率是
【权利要求】
1. 求解旅行商问题的顺序交叉多子代遗传算法,其特征在于: 与现有求解旅行商问题的遗传算法的进化策略不同,求解旅行商问题的顺序交叉多子 代遗传算法的进化策略为: 首先,产生种群规模为n的初始种群,W初始种群作为父代,并将种群中的所有个体按 路线长度从小到大进行排序,根据排序的结果计算种群中每一个个体的适应度,然后进行 选择、交叉,并从交叉产生的化个子代个体和n个父代个体中保留^个精英个体,然后将交 叉产生的2/7个子代个体按变异概率/7。进行变异,变异后得到的个体数为2/7化,再加上交叉 后没有变异的那一部分个体与从父代和交叉产生的个体中选出的^个精英个体,此时种群 中共有化个子代个体,可在2/7 个个体中选取最优的y个作为精英个体,选取最优 的/7个个体作为子代;判断是否满足给定的迭代终止条件,若满足迭代终止条件,则停止计 算;若不满足迭代终止条件,则把子代当成父代;重复上述步骤,直至满足迭代终止条件为 止。
2. 根据权利要求1所述的求解旅行商问题的顺序交叉多子代遗传算法,其特征在于给 出了一种基于顺序交叉的多子代产生方法;该种多子代的产生方法为: 设被选择配对的父代个体为^和公 ^=3 4 6 8 1 2 9 7 5 《=271953648 根据均匀随机分布产生两个交叉点,用"I"表示交叉点所在的位置,具体情况如下: A=34 6 I 8 12 9 17 5 公=2 7 1 I 9 5 3 6 14 8 首先,两个交叉点之间的中间段保持不变,得到 G=* * * I 8 1 2 9 I * * G=* ** 19536 I** 然后,记取父代个体i?从第二个交叉点开始城市码的排列顺序,当到达i?的最后时, 返回i?的开始继续记录代表城市的数字,直至到达第二个交叉点结束,该样便得到了父代 个体公从第二个交叉点开始的城市排列顺序为4-8-2-7-1-9-5-3-6 ;对于父代个体^而 言,已有城市码有8-1-2-9,将它们从父代个体公的城市码排列顺序中去掉,得到排列顺序 4-7-5-3-6,再将该个顺序复制给父代个体儿复制的起点也是从第二个交叉点开始,W此决 定子代个体1对应位置的未知码*,得到的子个体1为: G=5 3 6 18 1 2 9 14 7 同样,可W产生子个体2为: G=8 1 2 19 5 3 6 17 4 其次,两个父代个体中第二个交叉点后面的城市码不变,将中间部分移到最前面,该样 变化后^和i?两个父代个体中城市码的排列顺序为 ^^=8-1-2-9-3-4-6-7-5 公公=9-5-3-6-2-7-1-4-8 然后,将心中4-8的城市码去掉,将做中7-5的城市码去掉,得到1-2-9-3-6-7-5和 9-3-6-2-1-4-8,再将 7-5 加到 9-3-6-2-1-4-8 的尾部,将 4-8 加到 1-2-9-3-6-7-5 的尾部, 得到两个子个体为: G=9 3 6 I 2 1 4 8 I 7 5 G=1 2 9 I 3 6 7 5 I 4 8 该样父代个体^和i?经过顺序交叉后,产生了四个子代个体; 当初始种群的规模为n时,通过顺序交叉就可W得到化个子代个体。
【文档编号】G06Q10/04GK104463328SQ201410740661
【公开日】2015年3月25日 申请日期:2014年12月9日 优先权日:2014年12月9日
【发明者】王吉权, 田占伟, 王福林, 何梦莹 申请人:东北农业大学
遗传算法顺序交叉java,求解旅行商问题的顺序交叉多子代遗传算法相关推荐
- MATLAB实战系列(九)-遗传算法(GA)求解旅行商问题(TSP)思路解析
本次博文所编写的代码使用如下进化操作: 1.二元锦标赛选择操作: 2.OX交叉操作: 3.交换.逆转和插入相结合的变异操作. 一 | 旅行商(TSP)问题 假设有一个旅行商人要拜访n个城市,他必须选择 ...
- 详解Java类对象执行顺序
之前了解过static属于类加载顺序优先于对象,成员变量初始化优先于构造方法等等,都是零散的,今天抽出时间系统的总结了一下Java相关加载顺序(大佬请绕开^_^).与君共勉!! 借鉴了@ATJAVA ...
- 粒子群算法求解旅行商问题TSP (JAVA实现)
粒子群算法求解旅行商问题TSP 写在开头: 最近师妹的结课作业问我,关于使用粒子群求解TSP问题的思路.我想了想,自己去年的作业用的是遗传算法,貌似有些关联,索性给看了看代码.重新学习了一遍粒子群算法 ...
- java类的运行顺序_Java语言类的基本运行顺序
本文主要向大家介绍了Java语言类的基本运行顺序,通过具体的代码向大家展示,希望对大家学习Java语言有所帮助.我们以下面的类来说明一个基本的 Java 类的运行顺序:1. public class ...
- 实现Map并保持插入顺序的Java类?
我正在寻找具有键-值关联但不使用哈希的Java类. 这是我目前正在做的事情: 将值添加到Hashtable . 获取Hashtable.entrySet()的迭代器. 遍历所有值和: 获取迭代器的Ma ...
- java代码块执行顺序_Java笔记 | Java代码块执行顺序测试
最近笔试常常遇到考察Java代码块执行顺序的题目,网上查看博客错漏百出,特地自己测试了一下. 如有错漏,希望路过的大佬指出来,以便我进行更改. 先上代码吧! public class ClassA { ...
- java数据结构实验一顺序表,java数据结构实验代码之升序顺序表
java数据结构实验代码之升序顺序表 数据结构实验报告 学院:管理学院 班级:13电子商务(1)班 姓名:廖秋君 学号:3213004779 2014年 10月 23 日 目录 一.需求分析----- ...
- java创建对象 的初始化顺序
java创建对象 的初始化顺序 1.初始化块 初始化块通常写在类的构造方法之前,由花括号括起来,通常包含对成员属性进行初始化的语句: 初始化块分为instance初始化块和static初始化块,初始化 ...
- 读配置文件能够保持顺序的 Java Properties 类
序 前几天,公司项目中有一个需求是读取配置文件的.并且最好可以保证载入到内存中的顺序可以和配置文件里的顺序一致,可是.假设使用 jdk 中提供的 Properties 类的话,读取配置文件后.载入到内 ...
最新文章
- 键盘历史记录实用程序已停止工作 解决办法
- Windows Server 2012 R2工作文件夹⑤:创建工作文件夹
- 模型评估——ROC、KS
- 如何在DC机上禁用成员机的本地账号
- 收集17句经典程序员口头禅
- php跳转到另外一个方法,PHP 页面跳转到另一个页面的多种方法方法总结
- superset 图标调整
- python scrapy框架 简书_python爬虫框架——Scrapy架构原理介绍
- 手册中数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留的理解
- 【FLink】Flink 消费 kafka 消费组 死掉 Marking the coordinator dead for group 造成数据重复消费
- vscode中安装webpack_leaflet-webpack 入门开发系列一初探篇(附源码下载)
- Python学习笔记(六)—几个标准类型内建函数
- SENT (Single Edge Nibble Transmission) 协议 接口
- 自定义IE地址栏图标
- video.js插件的使用
- 网站点击流数据分析项目
- linux ip添加secondary ip,linux 添加secondary ip
- 婚恋相亲交友短视频婚姻介绍所中介平台系统app公众号H5搭建源码
- zencart如何更换模版
- 数字逻辑复习——触发器
热门文章
- 一个女孩儿写的【婚后感言】
- 电商指纹浏览器价格如何,不同的价格对应什么功能
- 数字化营销零售成宠,为什么是猩便利走出第一步?
- python编写程序掷骰子游戏规则_Python Tkinter实例――模拟掷骰子
- matlab中fgets,fgets(),fscanf(),fprintf()
- sessionid会被拦截吗_抖音上热门的推荐机制是什么?抖音精选机制是什么?抖音模仿类视频会被消重机制拦截吗?...
- 早春营|RISC-V处理器嵌入式开发
- Oracle 9i 手动建库
- 众多可爱壁纸素材一键即可获取
- ubuntu 复制粘贴文件和文件夹的命令—cp