(转载)MATLAB智能算法30个案例分析(4)——基于遗传算法的TSP算法

news2024/11/22 3:19:04
1 理论基础
        TSP(traveling salesman problem,旅行商问题)是典型的NP完全问题,即其最坏情况下的时间复杂度随着问题规模的增大按指数方式增长,到目前为止还未找到一个多项式时间的有效算法。
TSP问题可描述为:已知n个城市相互之间的距离,某一旅行商从某个城市出发访问每个城市一次且仅一次,最后回到出发城市,如何安排才使其所走路线最短。简言之,就是寻找一条最短的遍历n个城市的路径,或者说搜索自然子集X={1,2,…,n}(X的元素表示对n个城市的编号)的一个排列π(X)={V1,V2,…,Vn},使
取最小值,其中d(Vi,Vi+1)表示城市Vi到城市Vi+1的距离。
        TSP问题并不仅仅是旅行商问题,其他许多的NP完全问题也可以归结为TSP问题,如邮路问题、装配线上的螺母问题和产品的生产安排问题等,使得TSP问题的有效求解具有重要的意义。

2 案例背景

2.1 问题描述

        本案例以14个城市为例,假定14个城市的位置坐标如表4-1所列。寻找出一条最短的遍历14个城市的路径。

2.2 解决思路及步骤

        1.算法流程
        遗传算法TSP问题的流程图如图4-1所示。
        2.遗传算法实现
        (1)编 码
        采用整数排列编码方法。对于n个城市的TSP问题,染色体分为n段,其中每一段为对应城市的编号,如对10个城市的TSP问题{1,2,3,4,5,6,7,8,9,10},则|1|10|2|4|5|6|8|7|9|3就是一个合法的染色体。
        (2)种群初始化
        在完成染色体编码以后,必须产生一个初始种群作为起始解,所以首先需要决定初始化种群的数目。初始化种群的数目一般根据经验得到,一般情况下种群的数量视城市规模的大小而确定,其取值在50~200之间浮动。
        (3)适应度函数
        设k1|k2I…|ki|…|kn|为一个采用整数编码的染色体,Dkikj为城市ki到城市kj的距离,则该个体的适应度为

 

         即适应度函数为恰好走遍n个城市,再回到出发城市的距离的倒数。优化的目标就是选择适

应度函数值尽可能大的染色体,适应度函数值越大的染色体越优质,反之越劣质。
        (4)选择操作
        选择操作即从旧群体中以一定概率选择个体到新群体中,个体被选中的概率跟适应度值有关,个体适应度值越大,被选中的概率越大。
        (5)交叉操作
        采用部分映射杂交,确定交叉操作的父代,将父代样本两两分组,每组重复以下过程(假定城市数为10):
        ①产生两个[1,10]区间内的随机整数r1和r2,确定两个位置,对两位置的中间数据进行交叉,如r1=4,r2=7
        ②交叉后,同一个个体中有重复的城市编号,不重复的数字保留,有冲突的数字(带*位置)采用部分映射的方法消除冲突,即利用中间段的对应关系进行映射。结果为

        (6)变异操作
        变异策略采取随机选取两个点,将其对换位置。产生两个[1,10]范围内的随机整数r1和 r2,确定两个位置,将其对换位置,如r1=4,r2=7
        (7)进化逆转操作
        为改善遗传算法的局部搜索能力,在选择、交叉、变异之后引进连续多次的进化逆转操作。这里的“进化”是指逆转算子的单方向性,即只有经逆转后,适应度值有提高的才接受下来,否则逆转无效。产生两个[1,10]区间内的随机整数r1和r2,确定两个位置,将其对换位置,如r1=4, r2=7

        对每个个体进行交叉变异,然后代入适应度函数进行评估,x选择出适应值大的个体进行下一代的交叉和变异以及进化逆转操作。循环操作:判断是否满足设定的最大遗传代数MAXGEN,不满足则跳入适应度值的计算;否则,结束遗传操作。

3 MATLAB程序实现

         完整代码可以从下面的链接中获取

基于遗传算法的TSP算法(matlab代码)

4 结果分析

        优化前的一个随机路线轨迹图如图4-2所示。

图4-2 随机路线 

 优化后的路线如图4-3所示:

图4-3 优化后的线路

 迭代过程如图4-4所示:

图4-4 迭代过程

5 延伸阅读

5.1 应用扩展

        以下问题都与TSP问题一致,都可以使用上述方法解决。
        1.装配线上的螺母问题
        在一条装配线上用一个机械手去紧固待装配部件上的螺母问题。机械手由其初始位置(该位置在第一个要紧固的螺母的上方)开始,依次移动到其余的每一个螺母,最后返回到初始位置。机械手移动的路线就是以螺母为结点的一条周游路线。一条最小成本周游路线将使机械手完成工作所用的时间取最小值。注意:只有机械手移动的时间总量是可变化的。
2.产品的生产安排问题
假设要在同一组机器上制造n种不同的产品,生产是周期性进行的,即在每一个生产周期
这n种产品都要被制造。要生产这些产品有两种开销,一种是制造第i种产品时所耗费的资
金(1≤i≤n),称为生产成本;另一种是这些机器由制造第i种产品变到制造第j种产品时所
耗费的开支C;,称为转换成本。显然,生产成本与生产顺序无关。于是,希望找到一种制造这
些产品的顺序,使得制造这n种产品的转换成本和为最小。

5.2 遗传算法的改进

上述程序中,对遗传算法做了以下两处改进。
1.使用精英策略
子代种群中的最优个体永远不会比父代最优的个体差,这样使得父代的好的个体不至于
由于交叉或者变异操作而丢失。
        2.使用进化逆转操作
        在本文的编码中,每一个染色体即对应一个TSP环游,如果染色体码串的顺序发生变化,则环游路径也随之改变。因此,TSP问题解的关键地方就是码串的顺序。对照文中的交叉算子,可以发现,纵使两个亲代完全相同,通过交叉,仍然会产生不同于亲代的子代,且子代的码串排列顺序与亲代有较大的差异。交叉算子的这种变异效果所起的作用有两个方面,一方面它能起到维持群体内一定的多样性的作用,避免陷入局部最优解;但是另一方面,它却不利于子代继承亲代的较多信息,特别是当进化过程进入到后期,群体空间中充斥着大量的高适应度个体,交叉操作对亲代的较优基因破坏很大,使子代难以继承到亲代的优良基因,从而使交叉算子的搜索能力大大降低。
        同交叉算子相比较,逆转算子能使子代继承亲代的较多信息。假设码串为123456789,在2和3,6和7之间发生两处断裂再逆转插入,则新码串为12-6543-789,此时子代中12段、6543段、789段与亲代对应片段顺序完全一样(6543与3456顺序对于环游路径长度来说是等价的),只是在断裂点的两端环游次序发生了变化,而且本文中逆转是单方向的,即只接受朝着好的方向的逆转,因此它搜索最优解的能力强于交叉算子。

5.3 算法的局限性

        针对问题规模n比较小时,得到的一般都是最优解;当规模比较大时,一般只能得到的近似解。这时可以通过增大种群大小和增加最大遗传代数使得优化值更接近最优解。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/565992.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:PythonUrwid:一个优秀的控制台UI工具

Python Urwid:一个优秀的控制台UI工具 在开发控制台应用程序时,通常需要一种轻而易举的方法来创建用户界面。Python Urwid是一个高效,可定制的控制台UI工具,它可以帮助你创建强大的用户界面,同时获取出色的响应时间。…

SpringCloudAlibaba:继解决登录问题之后,Sentinel持久化没有效果问题

说实话好麻烦,每次使用关于Nacos的时候,bootstrap.yaml中都得配置username和password。 我后悔了。。。 哪位大哥有好办法啊!!! 因为之前开启登录鉴权,导致使用Nacos就得配username和password&#xff0c…

day2 - 使用OpenCV进行图像的读取与展示

本期将使用OpenCV对图像进行一些基本的了解和操作:主要包含图像的读取、展示和保存,以及查看图像的基本属性,让我们充分的了解图像,为后续图像处理做准备。 完成本期内容,你可以: 会使用OpenCV对图像进行读…

Redis常用命令详解

Redis 是Remote Dictionary Service 的简称;也是远程字典服务。它是内存数据库,KV 数据库,数据结构数据库。它是一个单线程的单reactor模型。其交互方式是请求响应方式。在正常情况下,如果向redis发出请求,则一定会有响…

MyBatis 框架

MyBatis 框架 MyBatis 简介搭建 MyBatis 开发环境核心配置文件详解mapper 映射文件(实现增删改查)MyBatis获取参数值的两种方式MyBatis的各种查询功能特殊SQL的执行自定义映射resultMapresultMap 字段和属性的映射多对一映射处理一对多映射处理 动态SQLM…

11 - YOLO算法二 (目标检测)

要点: 三 YOLO v3 3.1 Darknet-53 (backbone) 3.2 目标边界框的预测 将预测的边界框中心限制在当前cell中, s(x) Sigmoid(x) 。 3.3 正负样本的匹配 3.4 损失的计算 3.4.1 置信度损失 (Binary Cross Entropy) 其中 表示预测…

能耗监测系统在淼泉卫生院项目的应用

摘要:随着社会生活水平的提高,经济的繁荣发展,人们对能源的需求逐渐增长,由此带来的能源危机日益严重。办公建筑、医院、商场等场所如何实时的了解、分析和控制能源消耗已成为需要解决的迫在眉睫的难题。传统的能源消耗只能以月/季…

CPU性能优化:分支预测

条件跳转引起的控制冒险虽然也可以通过在流水线中插入空泡来避免,但是当流水线很深时,需要插入更多的空泡。一个20级的流水线为例,如果一条指令需要上一条指令的执行结束才能执行,则需要在这两条指令之间插入19个空泡,…

STL详解— list类的模拟实现

本文章所需实现三个类及其每个类里的各个函数接口总览&#xff1a; namespace zhc {//模拟实现list当中的结点类template<class T>struct list_node{//成员函数list_node(const T& val T()); //构造函数//成员变量T _val; //数据域list_node<T&g…

推荐系统简介

文章目录 推荐系统的分类基于人口统计学的推荐算法基于内容的推荐算法基于协同过滤的推荐算法协同过滤&#xff08;CF&#xff09;推荐方法基于近邻基于用户的协同过滤基于物品的协同过滤 混合推荐推荐系统实验方法离线实验用户调查在线实验 学习下b站上尚硅谷的推荐系统的课程…

易观千帆 | 2023年4月证券APP月活跃用户规模盘点

易观&#xff1a;2023年4月证券服务应用活跃人数13924.88万人&#xff0c;相较上月&#xff0c;环比下降1.46%&#xff0c;同比增长3.64%&#xff1b;2023年4月自营类证券服务应用Top10 活跃人数6144.02万人&#xff0c;环比下降0.01%&#xff1b;2023年4月第三方证券服务应用T…

「远程开发」VSCode使用SSH远程linux服务器 - 公网远程连接(1)

文章目录 前言视频教程1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 转…

chatgpt赋能python:PythonWorkon-使Python多环境管理更加轻松

Python Workon - 使Python多环境管理更加轻松 Python是一种广泛使用的高级编程语言&#xff0c;在众多开发者中应用广泛。在实际工作中&#xff0c;我们有时需要使用不同版本的Python或不同的环境来开发不同的项目。这时候就需要一个Python环境管理器来帮助我们快速地进行环境…

chatgpt赋能python:PythonWSDL:实现更好的Web服务和集成

Python WSDL&#xff1a;实现更好的Web服务和集成 在现代的互联网世界中&#xff0c;我们面临着不断增长的需求&#xff0c;需要实现与不同系统之间的交互和数据共享。Web服务是一种解决方案&#xff0c;允许应用程序通过互联网相互通信。其中Web服务描述语言&#xff08;WSDL…

python+django在线音乐分享网站系统vue_6045i.

本系统主要包括管理员和用户&#xff1a;主要包括个人中心、用户管理、通知公告管理、音乐类型管理、音乐分享管理、音乐榜单管理、音乐论坛、系统管理等功能的管理系统。 (1)绪论 系统的开发背景&#xff0c;意义和系统状况等&#xff0c;详细讲述了系统的用处&#xff0c;对本…

iOS App外包开发解决闪退问题

在iOS应用开发中&#xff0c;闪退&#xff08;应用程序意外退出&#xff09;是一个常见的问题。为了查找和解决闪退问题&#xff0c;可以使用以下工具和方法。今天和大家分享这方面的知识&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开…

扬州晶澳-年产3GW高性能太阳能光伏组件项目Acrel-3000WEB电能管理系统的设计及应用

摘要&#xff1a;在信息时代&#xff0c;电力信息系统的应用促迚了电力企业的収展&#xff0c;增强了电力系统运行的安全性与稳定性&#xff0c;对满足用户需求其有重要意义。随着国家电网改革政策的逐步推进和落实&#xff0c;Acrel-3000WEB电能管理系统运用互联网和大数据技术…

数据库索引结构(4)---基于B+树的查询

回顾我们学习的线性和课扩展哈希 他们都只能进行等值操作 但是不能进行区间操作 为了进行区间操作和关系的比较和速度考虑 引入数据结构B树 序言:磁盘存储 1. mysql面试题-深入理解B树原理_哔哩哔哩_bilibili 信息是存取在磁盘块中的每个 磁盘最小的存取单位是512KB 要定位磁…

多态的原理、单继承和多继承的虚函数表、以及虚函数表的打印。

一、多态原理 1、下面这个结果是多少&#xff1f; class A { public:virtual void func(){cout << "func()" << endl;}private:int _a 1; };int main() {printf("%d\n", sizeof(A));return 0; } 是 4&#xff1f;8&#xff1f;还是多少&am…

Python星际生存小游戏开发

项目介绍&#xff1a; 项目名称&#xff1a;python星际生存游戏 编程语言&#xff1a;python 用到关键知识&#xff1a;pygame模块&#xff0c;面向对象思想&#xff0c;python基础等等 实现功能&#xff1a; 1&#xff1a;飞机的运动&#xff0c;发射子弹&#xff0c;飞机…