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问题相关推荐

  1. MATLAB遗传算法GA求解TSP旅行商问题,可选PMX交叉、OX交叉及其它多种交叉方式,在算法中引入2-opt变异算子

    MATLAB遗传算法GA求解TSP旅行商问题,可选PMX交叉.OX交叉及其它多种交叉方式,在算法中引入2-opt变异算子.进化逆转算子提高算法局部搜索能力,利用国际通用的TSPLIB数据集中的eil5 ...

  2. 遗传算法GA求解TSP问题

    目录 一.遗传算法基本思想 二.遗传算法的主要步骤 三 .遗传编码 1.二进制编码 2.实数编码 四.遗传算法流程 五.例题 一.遗传算法基本思想 遗传算法(Genetic Algorithm, GA ...

  3. 【优化算法】遗传算法GA求解混合流水车间调度问题(附C++代码)

    [优化算法]遗传算法GA求解混合流水车间调度问题(附C++代码) 00 前言 各位读者大家好,好久没有介绍算法的推文了,感觉愧对了读者们热爱学习的心灵.于是,今天我们带来了一个神奇的优化算法--遗传算 ...

  4. 遗传算法GA求解非连续函数最值问题

    目录 一.遗传算法基本思想 二.遗传算法的主要步骤 三.遗传编码 1.二进制编码 2.实数编码 四.遗传算法流程 五.例题 一.遗传算法基本思想 遗传算法(Genetic Algorithm, GA) ...

  5. 人工智能 遗传算法(GA) 求解三元函数z的最大值 Java

    文章目录 一.问题描述 二.解决过程 流程图 1.二进制编码 2.初始群体的产生 3.适应值计算 4.选择运算(轮盘赌) 5.交叉运算(单点交叉) 6.变异运算 三.代码实现 四.运行结果 总结 一. ...

  6. 【老生谈算法】matlab实现遗传算法求解TSP问题——TSP问题

    遗传算法求解TSP问题MATLAB实现 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]遗传算法求解TSP问题MATLAB实现 ...

  7. 【运筹优化】GA遗传算法求解TSP问题(Java实现)

    文章目录 代码 Genome基因类 GeneticAlgorithm_TSP遗传算法类 运行结果 代码 Genome基因类 import lombok.Data; import lombok.NoAr ...

  8. 用遗传算法求解TSP问题

    原文链接: http://blog.5long.me/2015/genetic-algorithm-on-tsp/ 遗传算法简介 关于遗传算法,首先看一段维基百科的解释: 遗传算法是模仿自然界生物进化 ...

  9. 局部搜索、模拟退火和遗传算法求解TSP问题

    模拟退火和遗传算法求解TSP问题 源代码传送门:GITHUB 数据传送门:TSPLIB 文章目录 模拟退火和遗传算法求解TSP问题 摘要 1 导言 1.1 问题重述 1.2 TSP问题选择 1.3 思 ...

  10. 基于遗传算法求解TSP问题(旅游路径规划,Python实现,超详细,可视化,结果分析)

    ps:作者是很用心写的,如果觉得不错,请给作者一点鼓励噢!(点赞收藏评论噢) 基于遗传算法求解TSP问题 摘要 巡回旅行商问题(TSP)是组合优化中的经典问题.常见的TSP问题求解算法例如穷举法.贪心 ...

最新文章

  1. 磁盘格式化,磁盘挂载,手动增加swap空间
  2. Javascript基础系列之(六)循环语句(do while循环)
  3. 〖Linux〗Kubuntu设置打开应用时就只在打开时的工作区显示
  4. EF – 8.多对多关联
  5. ubuntu添加环境变量PATH
  6. ASP.NET基础教程-C#与JAVA的比较
  7. xp大容量u盘补丁_大容量硬盘补丁
  8. 新能源汽车行业资讯-2022-9-16
  9. C++ 按值传递的切割问题(Slicing Problem)
  10. 六类网线钳能压五类水晶头吗_六类网线可以用五类水晶头不?
  11. 2008年高考数学江西卷压轴题
  12. Z05 - 004、网站流量多维度细分(流量分析)
  13. 总结几点学习模电难的原因
  14. 手把手教你用JSP完成登录注册插入数据库数据
  15. 想备战 2022 ‘金三银四’ 必备超多软件测试面试题全在这里
  16. web前端全套教程,入门必备
  17. 从Python爬虫到Spark预处理数据的真实需求[四]
  18. 常用算法设计技术总结
  19. 【Linux】通过Mac终端连接虚拟机(ssh root@192.168.31.230)
  20. Excel/WPS 按条件合并多行

热门文章

  1. 如何解除计算机的启动项,UEFI安全启动怎么关闭 关闭UEFI启动项的方法图解
  2. Excel中CTRL+D的别样用法 隔行和隔列向下填充示例
  3. a标签去下划线或文字添加下修饰_怎样去除ul li a标签文字下的下划线
  4. SQL Server HA - 数据库镜像 (Mirroring)
  5. 【架构师技能篇】Worker初识
  6. 【渝粤题库】陕西师范大学151206 中级财务管理作业 (专升本)
  7. 苹果手机图片如何同步鸿蒙,教你将照片批量导入iOS设备
  8. lisp 暖通设计_LISP 语言在CAD 道路设计中的各种应用
  9. Ubuntu系统输入密码无法进入桌面
  10. 梯度下降---偏导数及其几何意义