用蚁群算法解决TSP问题(matlab)实验报告

本文介绍了用蚁群算法解决旅行商问题(TSP)的MATLAB实现,包括模型建立、算法流程、编程实现和实验结果分析。实验表明,蚁群算法在解决TSP问题时具有较好的收敛性和效率,但参数选择和稳定性是关键因素。
摘要由CSDN通过智能技术生成

 

目录

1 课程实验概述

1.1选题背景

1.2实验内容

1.3实验目的

2 基于蚁群算法解决TSP问题

2.1模型建立

2.1.1算法流程

2.1.2算法实现

2.2编程实现

2.2.1数据加载

2.2.2参数预设

2.2.3蚁群算法

2.2.4其余函数

2.3实验结果

2.3.1结果展示

2.3.2结果分析

3结论

3.1实验意义

3.2实验反思与改进

3.3课设心得

 代码如下


1 课程实验概述

1.1选题背景

TSP是一个具有广泛的应用背景和重要理论价值的组合优化问题,给定一组n个城市和俩俩之间的直达距离,寻找一条闭合的旅程,使得每个城市刚好经过一次且总的旅行距离最短。近年来,有很多解决该问题的较为有效的算法不断被推出,例如Hopfield神经网络方法,模拟退火方法以及遗传算法方法等。TSP问题也称为货郎担问题,是一个古老的问题。最早可以追溯到1759年Euler提出的骑士旅行的问题。1948年,由美国兰德公司推动,TSP成为近代组合优化领域的典型难题。TSP搜索空间随着城市数n的增加而增大,所有的旅程路线组合数为(n-1)!/2。在如此庞大的搜索空间中寻求最优解,对于常规方法和现有的计算工具而言,存在着诸多计算困难。借助蚁群算法的搜索能力解决TSP问题,是很自然的想法。

蚁群算法是模仿蚁群的寻食行为,在所有路径中,蚂蚁会随机挑选一个路径前进,等所有路径走完后会留下信息素,随着蚂蚁的增多,信息素的浓度与蚂蚁的数量和路径的长短成正比,蚂蚁更倾向于最短路径前进,此算法具有好的正反馈机制和自组织性。由原理描述可以看出良好的正反馈机制只限于后期,前期由于信息缺乏影响反馈机制的速度。

1.2实验内容

TSP。题目数据见tsp29_coordinate.txt(29个城市的坐标)。要求:

(1)阐述最终采用的编码、算子和算法的参数。如果利用了局部搜索策略和其他改进搜索策略,也需要详细说明。需要确保他人用你提供的编码、算子、参数、局部搜索及其他改进措施也能得到相同质量的解。

(2)在最好的编码、算子和参数下计算10次,画出29个城市的坐标,注明其编号,画出找到的最优解(即将最优解用连线表示出来),给出最优距离。

(3)如采用遗传算法,则以横轴为遗传代数i,纵轴为第i代平均的最短路径画图,采用其它算法同理。

1.3实验目的

熟悉和掌握蚁群算法的基本概念和基本思想,加深对蚁群算法的理解,理解和掌握蚁群算法的各个操作,通过动手操作进一步学习了解掌握解决TSP问题方法,通过实例分析利用遗传算法找出最优解并且画出城市的坐标;进一步掌握Matlab的应用。

2 基于蚁群算法解决TSP问题

2.1模型建立

2.1.1算法流程

蚁群算法TSP实现的具体步骤如下:

Step 1:设置最大迭代次数iter_max,令初始值iter_max=0,初始化各参数;

Step 2:设蚁群规模为m ,并将m只蚂蚁随机放在n个顶点(城市)上;

Step 3:对每只蚂蚁k(k=1,2,…,m)根据式(3-1)计算转移概率,选择转移至下一个顶点(城市)j,将顶点(城市)j置于禁忌表中(表示已经走过这个城市);

Step 4:判断所有城市是否全部走一遍。若为否,回到Step 3,否则,继续Step 4;

Step 5:进行信息素的全局更新;

Step 6:重复执行Step 2到Step 5,直到迭代次数iter_max达到指定的最大迭代次数或找到的解满足一定的精度为止;

Step 7:输出结果。

蚁群算法解决TSP问题的基本流程图:

 

2.1.2算法实现

设蚂蚁群体中蚂蚁的数量为m,城市的数量为n,城市i与城市j之间的距离为,t时刻城市i与城市j连接路径上的信息素浓度为。初始时刻,蚂蚁被放置在不同的城市里,且各城市键连接路径上的信息素浓度相同。然后蚂蚁将按一定概率选择线路,不放设(t)为t时刻蚂蚁k从城市i转移到城市j的概率。“蚂蚁TSP”有两方面,首先是访问某城市的期望,另外便是其他蚂蚁释放的信息素浓度。所以定义:

 

式中:a为信息素重要程度因子,b为启发函数因子,allowk为蚂蚁k待访问城市集合。

 

蚂蚁遍历各城市的过程中,与实际情况相似的是,在蚂蚁释放信息素的同事,各个城市之间连接路径上的信息素的强度也在通过挥发等方式逐渐消失。为了描述这个特征,设ρ表示信息素挥发程度。这样所有蚂蚁完成走完一遍所有城市之后,各个城市键连接路径上的信息素浓度为:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值