遗传算法(GA)求解TSP问题
TSP
1.1问题描述
给定一系列城市和每对城市之间的距离,求解访问每一座城市一次并回到起 始城市的最短回路。这里给定 10 个城市和两两之间的距离。如图 2.1 所示。
1.2 遗传算法求解
1.2.1 求解思路
遗传算法是通过将优化函数的可能解表示成一个个体,每个个体用一定编码 方式形成基因,借助遗传算子,选择、交叉、变异操作,对种群进行演化,选择 出更适应环境的种群。
在 TSP 问题中,我们将每一条访问城市的顺序编码为一个个体,每个种群有 n 个个体,即有 n 种访问顺序,同时,每个个体又有 9 个染色体,即[2,10]的随 机排列(城市 1 作为起始和终止城市,不进行粒子操作),代表访问城市的顺序。 通过每一代的演化,对粒子群进行位置、速度更新操作,选择合适个体(最优的 顺序)。
(1)编码:符号编码(G 编码)
(2)选择方式:采用轮盘赌/竞标赛选择方法,同时保留最优个体
(3)交叉方式:定义了两种交叉方法。循环交叉和单点交叉。 循环交叉(不进行 G 编码):从第一个父代第一个元素开始搜索第二个父 代对应索引的值,如果相等,则找到一个循环体,否则搜寻第二个父代对应 索引的值在第一个父代的索引,直达第二个父代的元素等于第一个父代的第 一个元素。循环体元素不变,其余元素互换形成交换。(如下示意图)
循环交叉(进行 G 编码):先对个体进行 G 编码,任意产生一个交叉点的 位置,两个父代的交叉点到末尾的元素互换形成新的个体,在对新个体进行 G 解码。
(4)变异方式:定义了两种变异方法。常规变异和逆转变异。
常规变异(进行 G 编码):首先对个体进行 G 编码。然后产生变异点位置 i, 然后产生变异值,变异值只在[1,n-i+1]中取值。最后对新个体进行 G 解码。
逆转变异(不进行 G 编码):首先对随机产生两个变异点,对两点之间的子
串进行逆转,形成新的个体。
(5)适应度:为了能够让适应度高的个体保存下来,定义适应度为: fitvalue=2/distance(1.1)fitvalue= 2/distance \tag{1.1}fitvalue=2/distance(1.1)其中 distance 为每个个体(路径)的距离。显然,如果距离最短,则适应 度最高,更利于遗传给后代。
(6)G 编码与解码:encode()函数用于对个体进行编码,对个体的第 i 个 元素编码值为个体第 i 个元素到末尾元素的升序排列对应的索引值。decode() 函数用于解码,解码思路,初始化数组 s=[2 3 4 5 6 7 8 9 10],从 G 码的第一 个元素开始,找到 s 中的位置,则为解码后的值,同时将 s 中该元素删除,依次 循环 G 码的所有元素。
1.2.2 流程图
1.3 结果
1.4 结果分析
通过遗传算法,我们可以对比结果,显然这种结果是令人满意的。直观上看 过去,遗传算法给出的结果是最优的。但是遗传算法作为一种“概率”算法,不 一定每次都能够收敛到最优,在调试的时候,发现种群个体数和迭代次数在一定 范围内会更易于收敛到最优解。
1.5 源码
GitHub传送门!!!
遗传算法(GA)求解TSP问题相关推荐
- MATLAB遗传算法GA求解TSP旅行商问题,可选PMX交叉、OX交叉及其它多种交叉方式,在算法中引入2-opt变异算子
MATLAB遗传算法GA求解TSP旅行商问题,可选PMX交叉.OX交叉及其它多种交叉方式,在算法中引入2-opt变异算子.进化逆转算子提高算法局部搜索能力,利用国际通用的TSPLIB数据集中的eil5 ...
- 遗传算法GA求解TSP问题
目录 一.遗传算法基本思想 二.遗传算法的主要步骤 三 .遗传编码 1.二进制编码 2.实数编码 四.遗传算法流程 五.例题 一.遗传算法基本思想 遗传算法(Genetic Algorithm, GA ...
- 【优化算法】遗传算法GA求解混合流水车间调度问题(附C++代码)
[优化算法]遗传算法GA求解混合流水车间调度问题(附C++代码) 00 前言 各位读者大家好,好久没有介绍算法的推文了,感觉愧对了读者们热爱学习的心灵.于是,今天我们带来了一个神奇的优化算法--遗传算 ...
- 遗传算法GA求解非连续函数最值问题
目录 一.遗传算法基本思想 二.遗传算法的主要步骤 三.遗传编码 1.二进制编码 2.实数编码 四.遗传算法流程 五.例题 一.遗传算法基本思想 遗传算法(Genetic Algorithm, GA) ...
- 人工智能 遗传算法(GA) 求解三元函数z的最大值 Java
文章目录 一.问题描述 二.解决过程 流程图 1.二进制编码 2.初始群体的产生 3.适应值计算 4.选择运算(轮盘赌) 5.交叉运算(单点交叉) 6.变异运算 三.代码实现 四.运行结果 总结 一. ...
- 【老生谈算法】matlab实现遗传算法求解TSP问题——TSP问题
遗传算法求解TSP问题MATLAB实现 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]遗传算法求解TSP问题MATLAB实现 ...
- 【运筹优化】GA遗传算法求解TSP问题(Java实现)
文章目录 代码 Genome基因类 GeneticAlgorithm_TSP遗传算法类 运行结果 代码 Genome基因类 import lombok.Data; import lombok.NoAr ...
- 用遗传算法求解TSP问题
原文链接: http://blog.5long.me/2015/genetic-algorithm-on-tsp/ 遗传算法简介 关于遗传算法,首先看一段维基百科的解释: 遗传算法是模仿自然界生物进化 ...
- 局部搜索、模拟退火和遗传算法求解TSP问题
模拟退火和遗传算法求解TSP问题 源代码传送门:GITHUB 数据传送门:TSPLIB 文章目录 模拟退火和遗传算法求解TSP问题 摘要 1 导言 1.1 问题重述 1.2 TSP问题选择 1.3 思 ...
- 基于遗传算法求解TSP问题(旅游路径规划,Python实现,超详细,可视化,结果分析)
ps:作者是很用心写的,如果觉得不错,请给作者一点鼓励噢!(点赞收藏评论噢) 基于遗传算法求解TSP问题 摘要 巡回旅行商问题(TSP)是组合优化中的经典问题.常见的TSP问题求解算法例如穷举法.贪心 ...
最新文章
- 磁盘格式化,磁盘挂载,手动增加swap空间
- Javascript基础系列之(六)循环语句(do while循环)
- 〖Linux〗Kubuntu设置打开应用时就只在打开时的工作区显示
- EF – 8.多对多关联
- ubuntu添加环境变量PATH
- ASP.NET基础教程-C#与JAVA的比较
- xp大容量u盘补丁_大容量硬盘补丁
- 新能源汽车行业资讯-2022-9-16
- C++ 按值传递的切割问题(Slicing Problem)
- 六类网线钳能压五类水晶头吗_六类网线可以用五类水晶头不?
- 2008年高考数学江西卷压轴题
- Z05 - 004、网站流量多维度细分(流量分析)
- 总结几点学习模电难的原因
- 手把手教你用JSP完成登录注册插入数据库数据
- 想备战 2022 ‘金三银四’ 必备超多软件测试面试题全在这里
- web前端全套教程,入门必备
- 从Python爬虫到Spark预处理数据的真实需求[四]
- 常用算法设计技术总结
- 【Linux】通过Mac终端连接虚拟机(ssh root@192.168.31.230)
- Excel/WPS 按条件合并多行
热门文章
- 如何解除计算机的启动项,UEFI安全启动怎么关闭 关闭UEFI启动项的方法图解
- Excel中CTRL+D的别样用法 隔行和隔列向下填充示例
- a标签去下划线或文字添加下修饰_怎样去除ul li a标签文字下的下划线
- SQL Server HA - 数据库镜像 (Mirroring)
- 【架构师技能篇】Worker初识
- 【渝粤题库】陕西师范大学151206 中级财务管理作业 (专升本)
- 苹果手机图片如何同步鸿蒙,教你将照片批量导入iOS设备
- lisp 暖通设计_LISP 语言在CAD 道路设计中的各种应用
- Ubuntu系统输入密码无法进入桌面
- 梯度下降---偏导数及其几何意义