matlab将图片旋转的代码_遗传算法(GA)求解旅行商问题(TSP)附MATLAB代码

hello,大家好,今天为大家更新一期使用遗传算法(GA)求解旅行商问题(TSP)的推文。

本次推文所编写的代码使用如下进化操作:

1、二元锦标赛选择操作;

2、OX交叉操作;

3、交换、逆转和插入相结合的变异操作。


一 | 旅行商(TSP)问题

假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。


二 | 算法设计


01 | 编码

编码采用常规的整数编码,如果城市数目为N,那么解就可以表达为1~N的随机排列,用MATLAB中的randperm(N)进行表示。


02 | 种群初始化

设种群数目为NIND,则初始化种群为NIND个1~N的随机排列。


03 | 目标函数值

一个个体的目标函数值就是该个体的总距离,比如说一个个体为213,那么这个个体的总距离=21之间的距离+13之间的距离+32之间的距离(从3出发还需要返回起始点2)。


04 | 适应度值

一个个体的适应度值是其目标函数值的倒数。因为总距离越小说明这个个体质量越好,所以适应度值越大就说明这个个体质量越好。


05 | 二元锦标赛选择操作

之前更新遗传算法的推文中,都使用的是轮盘赌选择操作,今天来点不一样的,没错就是二元锦标赛选择。

首先需要理解什么是二元锦标赛选择,我们把这个操作拆成两部分,一部分是二元,一部分是锦标赛选择。

首先来看锦标赛选择,锦标赛其实就是一种比赛,有多个选手参加比赛,一般情况下最后只有一个冠军。所以我们在这里可以将多个选手看作多个个体,最后的一个冠军我们可以看作是这些个体中最好的那个个体

然后再看一下二元是什么意思呢?既然有二元,是否有三元、四元……,对的,确实是有的,二元就相当于有两个选手参加锦标赛,三元就相当于有三个选手参加锦标赛……。

所以,二元锦标赛就是比较两个个体,然后将其中更好的那一个个体选择出来,放到选出的种群当中。其实也可以有三元锦标赛、四元锦标赛……,但这里为了方便我们就选择使用二元锦标赛了。


06 | OX交叉操作

比如说有两个父代个体为
父代1:1 2 3 4 5 6 7 8
父代2:8 7 6 5 4 3 2 1
这时随机选择两个交叉位置a和b,比如说a=3,b=6,那么交叉的片段为:
父代1:1 2 | 3 4 5 6 | 7 8
父代2:8 7 | 6 5 4 3 | 2 1
然后将父代2的交叉片段移动到父代1的前面,将父代1的交叉片段移动到父代2的前面,则这两个父代个体变为:
父代1:6 5 4 3 1 2 3 4 5 6 7 8
父代2:3 4 5 6 8 7 6 5 4 3 2 1
然后从前到后把第2个重复的基因位删除掉,我们先把两个父代个体中重复的基因位标记出来:
父代1:3 1 2 6 7 8
父代2:8 7 4 3 2 1
然后把第2个重复的基因位删除,形成两个子代个体。
子代1:6 5 4 3 1 2 7 8
子代2:3 4 5 6 8 7 2 1


07 | 变异操作

(1)交换操作

比如说有6个城市,当前解为123456,我们随机选择两个位置,然后将这两个位置上的元素进行交换

比如说,交换2和5两个位置上的元素,则交换后的解为153426。


(2)逆转操作

有6个城市,当前解为123456,我们随机选择两个位置,然后将这两个位置之间的元素进行逆序排列

比如说,逆转2和5之间的所有元素,则逆转后的解为154326。


(3)插入操作

有6个城市,当前解为123456,我们随机选择两个位置,然后将这第一个位置上的元素插入到第二个元素后面。

比如说,第一个选择2这个位置,第二个选择5这个位置,则插入后的解为134526。

在变异操作中,我们将以上三种操作赋予不同的权重,然后采用轮盘赌的方式选择究竟使用哪个操作。


三 |输入数据

22个城市的xy坐标。

38.24,

四 |运行效果展示

44fd9985d8816aa4cac965b40a02e96d.png

09d379b3929814554cfa92077e8b5adb.png


五 | 问题与思考

可以看出使用同样的数据,GA的优化效果不如模拟退火(SA)算法求解旅行商 (TSP)问题MATLAB代码讲解 这篇推文使用SA的优化效果,各位可以想一下如何可以提高GA的优化效果? 提示:将SA以一定概率接受比当前解更差的解的思想,融入到GA中。

六 |MATLAB源代码

微信扫描下方二维码即可提取代码。

9872ad6e34d1be576cf941e937861aad.png

39ae2a2c9eb880b582c4aac1fbbebc97.png 39ae2a2c9eb880b582c4aac1fbbebc97.png

往期精选

  • 车辆路径问题(VRP)合集
  • 遗传算法求解0-1背包问题(附matlab源代码)
  • 模拟退火(SA)算法求解旅行商 (TSP)问题MATLAB代码讲解
  • 多目标优化 | 基于NSGA-II的多目标0-1背包问题求解(附matlab代码)
  • 多目标优化 | NSGA-II进阶教程(全网首个三目标优化教程)
  • 机器学习 | 基于遗传算法的BP神经网络优化算法(附MATLAB代码)
  • 遗传算法求解车间调度问题(附MATLAB代码)
  • 多目标优化 | NSGA-II
  • word转换为pdf后图片失真的解决办法(全网首发)
  • 机器学习 | 简单实现Bp神经网络
  • 二维装箱问题之BL法修正版(附MATLAB代码)
  • 快速入门文献管理软件-EndNote X9
  • 最小二乘法(附MATLAB代码)
  • NSGA-II多目标优化算法讲解(附MATLAB代码)
  • 基于人工势场法的机器人二维路径规划(附MATLAB代码)
  • 基于粒子群算法的多目标搜索算法讲解(附MATLAB代码)
  • 蚁群算法通俗讲解(附MATLAB代码)
  • 混合粒子群算法通俗讲解(附MATLAB代码)

知乎 | bilibili:随心390

7b0472d830b1ecbd074cec228ec3be94.png 76d6c9e7ce67868a9d9c41aac50899e0.png 长按识别二维码关注我们 觉得内容还不错的话,给我点个“在看”呗 bab7e869f7c4643cef3ed34d9134a5ad.gif 525ecc7481b16d7b6a91a29bcdf145c1.gif
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值