[Matlab] 遗传算法求解TSP入门

引言:主要依据《 MATLAB智能算法30个案例分析(第2版)》一书,梳理一下,如何利用遗传算法求解TSP(旅行商问题),以及学习遗传算法需要熟悉的MAtlab常用函数,帮助季子木消化理解该知识点,故撰写此文。

了解遗传算法的基本原理

遗传算法可以用来干什么

遗传算法是现代启发式算法中的一种,就是为了解决手算和计算机枚举计算不可能在短时间内得到精确解而采用的,一种退而求其次得到近似最优解的进化算法,进化是指在有限的迭代次数内能通过一些策略(主要是概率)使得随着迭代次数的增加能更快的逼近最优解。

遗传算法是怎样干的

(1)确定遗传算法染色体的编码方式:首先要把实际问题(用文字或图像表述的问题)抽象成计算机能够识别计算的基本单元,TSP问题说白了就是把n个点连成首尾相连的线段,企图得到一条最短的线段,如果手算的话,就是n个点之间的顺序排列问题,选择哪种连接的先后顺序能够使连接得到的线条最短,这样就很清楚了,那TSP问题最基础的运算单元就是n个点之间的顺序排布,遗传算法的编码形式就可以取n个点之间的排序。遗传算法的编码方式就是整数编码,染色体的长度就是城市的个数即n,染色体上每一个基因位表示的就是城市的序号。

(2)确定适应度函数

(3)确定种群规模和迭代次数:种群规模和迭代次数是相互作用的两个因素,求解的问题时间复杂度高点,那种群规模就多一点(就是染色体的个数多一些),种群规模太大的话,每一次计算要付出的代价也大,这时候就可以把种群规模调小的,依赖较高的迭代次数来不断进化求解。

(4)确定选择操作:选择操作就是把种群中较好的(离目标近的)一些染色体选取出来,选择的标准就是适应度函数,选取染色体的个数是根据选择概率来确定的,毕竟谁也说不准该每轮迭代该选取多少个合适。

(5)哪些解是较好的依遗传算法的交叉和变异操作目的都是为了按照一定的策略使解的质量得到改善,在更快的迭代次数内找到近似最优解。

相关推荐
会编程的吕洞宾5 分钟前
LangChain4j 流式输出实战:让 AI 回复像打字机一样逐字显示
java·开发语言·人工智能·后端
曹牧19 分钟前
JDK重定向目录
java·开发语言
郑州光合科技余经理21 分钟前
同城小程序开发:同一笔单在用户端和商家端各显示到哪
android·java·开发语言·前端·后端·uni-app·php
2601_962885721 小时前
如何用 Python 计算溃疡指数(Ulcer Index)?
开发语言·python
kiracrimson1 小时前
string 容器:从 C 字符串到会自己扩容的类
开发语言·数据结构·c++·stl
程序边界1 小时前
顶刊级论文配图全流程:用 Python 复刻 Nature/Science 风格图表
开发语言·python
普通人61 小时前
uniapp模版JS
开发语言·javascript·小程序·uni-app·1024程序员节
G018_star sky♬2 小时前
nodeJS他是如何用JavaScript封装C++的呢
开发语言·javascript·c++
wyhwust2 小时前
程序设计基础--C语言输入输出单元测试
c语言·开发语言
云和数据.ChenGuang2 小时前
python sorted函数详细剖析
开发语言·人工智能·windows·python·1024程序员节