蚁群算法求解TSP问题
- 格式:doc
- 大小:127.50 KB
- 文档页数:12
TSP问题中的蚁群优化算法研究的开题报告题目:TSP问题中的蚁群优化算法研究一、研究背景TSP问题(Traveling Salesman Problem)是指一个旅行商在规定的城市之间旅行,每个城市只能访问一次,最终回到起点。
该问题由于其优化复杂度高,难以在实际中求得最优解,因此一直是运筹学与计算机科学领域的研究热点。
蚁群算法是一种基于群体智能的优化算法,通过模拟蚂蚁在自然界中的行为,尝试寻找TSP问题的最优解。
该算法因其简单易实现、无需全局信息等优点,已经成为TSP问题研究的重要方法之一。
二、研究内容本研究将针对TSP问题,探究蚁群优化算法在该问题上的应用和性能。
具体研究内容包括以下几点:1. 对TSP问题的基本定义及优化模型进行研究,分析不同算法在求解TSP问题时的应用特点及性能要求。
2. 详细介绍蚁群算法的基本原理、模拟过程及相关参数设置方法,并对该算法在TSP 问题求解中的效果进行分析。
3. 研究蚁群算法中不同因素对性能的影响,并通过实验得出最优参数组合。
4. 将蚁群算法与其他算法进行对比,分析其优劣及适用范围。
5. 对蚁群算法在实际TSP问题中的应用及扩展进行探讨。
三、研究意义随着信息技术的发展和应用场景的增加,TSP问题已经在很多领域中得到了广泛的应用。
本研究探究蚁群优化算法在该问题上的有效性及优劣,对于解决实际应用中的TSP问题具有重要意义。
同时,本研究也为蚁群算法的应用提供了一个具体的实例,可为该算法在其他问题上的研究提供借鉴。
四、研究方法本研究采用文献资料调研、数学建模、算法实现、性能分析等多种方法进行研究。
其中,蚁群算法的实现过程将采用Python语言进行编程。
五、进度计划研究时间:2021年10月-2022年6月1. 前期文献调研和问题分析(2021年10月-2021年11月)2. 确定研究方法和设计模型(2021年11月-2021年12月)3. 蚁群算法的实现和性能分析(2022年1月-2022年3月)4. 研究结果总结和论文撰写(2022年4月-2022年6月)以上是本研究的开题报告,谢谢阅读。
蚁群算法实现TSP蚁群算法(Ant Colony Optimization, ACO)是一种模拟蚂蚁觅食行为的算法,常被用来解决旅行商问题(Traveling Salesman Problem, TSP)。
旅行商问题是一个经典的组合优化问题,目标是找到一条最短的路径,使得旅行商能够访问所有城市并返回起始城市。
蚁群算法的基本思想是模拟蚂蚁寻找食物的行为,每只蚂蚁在过程中释放信息素,并根据信息素浓度和距离选择下一个城市。
信息素的释放和更新规则是蚁群算法的核心。
蚁群算法的实现步骤如下:1.初始化蚁群:随机放置一定数量的蚂蚁在不同城市。
2.计算路径长度:根据蚂蚁的选择规则,计算每只蚂蚁的路径长度。
3.更新信息素:根据路径长度,更新城市之间的信息素浓度。
4.更新蚂蚁的选择规则:根据信息素浓度和距离,更新蚂蚁的选择规则。
5.重复步骤2-4,直到达到指定的迭代次数或找到最优解。
在蚂蚁的选择规则中,信息素浓度和距离是两个重要的因素。
信息素浓度越高,蚂蚁越有可能选择该路径;距离越短,蚂蚁越倾向于选择该路径。
为了平衡这两个因素,通常使用一个参数来调节它们的权重。
在更新信息素时,一般采用全局信息素更新和局部信息素更新两种方式。
全局信息素更新是将所有蚂蚁路径上的信息素浓度进行更新,以加强优质路径的信息素浓度。
局部信息素更新是只更新最优路径上的信息素浓度,以加强当前最优路径的信息素浓度。
蚁群算法的优点是能够找到近似最优解,并且具有较好的鲁棒性和适应性。
然而,蚁群算法也存在一些问题,例如易陷入局部最优解、收敛速度较慢等。
针对TSP问题,蚁群算法的实现可以按照上述步骤进行。
具体来说,可以通过以下几个方面的设计来优化算法的性能:1.蚂蚁的选择规则:可以采用轮盘赌选择法,即根据信息素浓度和距离计算每个城市被选择的概率,然后根据概率选择下一个城市。
2.信息素更新:可以采用全局信息素更新和局部信息素更新相结合的方式,以平衡全局和局部的效果。
Logistics Sci-Tech 2018.2收稿日期:2017-12-20作者简介:郑旭峰(1993-),男,浙江宁波人,上海理工大学管理学院硕士研究生,研究方向:系统分析与集成;周健勇(1970-),男,浙江宁波人,上海理工大学管理学院,副教授,研究方向:系统工程优化。
•理论研究•文章编号:1002-3100(2018)02-0037-04Logistics Sci-Tech No.2,2018物流科技2018年第2期摘要:对于大型TSP 问题,传统蚁群算法出现收敛速度慢,求解时间长,精度低等问题。
针对物流配送过程中目的地聚集化现象,提出一种解决带有聚类特性TSP 问题的K-means 聚类蚁群算法。
该算法首先对大规模的TSP 问题进行K-means 算法聚类,分解成小规模的子问题,小规模的TSP 问题可通过传统蚁群算法求解,最后将每个聚类连接起来,完成对整个大规模问题的求解。
仿真实验比较了传统蚁群算法,蚁群聚类蚁群算法以及K-means 聚类蚁群算法,结果表明K-means 聚类蚁群算法不仅求解速度得到极大提升,最短路径误差率也有一定下降,具有较好的效果。
关键词:聚类;蚁群算法;旅行商问题;物流配送中图分类号:F224文献标识码:AAbstract:For large-scale traveling salesman problem (TSP ),ant colony algorithm (ACA )has the weakness of slow convergence rate,long computing time as well as declining accuracy.According to destination gathering phenomenon in logistics distribution,K-means ant colony algorithm is proposed to tackle large-scale TSP with characteristic of clustering.First the TSP problem was divided into several sub-problems by clustering using K-means algorithm that can be solved in parallelization by traditional ACA algorithm.At last access city of each sub-problem was connected with each other to make the oversized TSP problem be com -pleted.The traditional ACA,Ant clustering Ant colony algorithm (ACACA )and the proposed K-means clustering Ant colony al -gorithm (KMACA )were compared in the simulated experiment.The result shows the KMACA method not only has the advantage of shorter computing time,but also a lower error rate with a better effect.Key words:clustering;ant colony algorithm;traveling salesman problem;logistics distribution 0引言旅行商问题,即TSP 问题(Travelling Salesman Problem )是经典组合优化问题,其目标是求出商人有且仅有一次经过N个城市并最后回到原点的最短路径。
分层递进的改进聚类蚁群算法解决TSP问题1.引言蚁群算法是一种模拟昆虫觅食行为的群体智能优化算法,它通过模拟蚂蚁在寻找食物过程中留下的信息素轨迹,使得较优路径上的信息素浓度增加,从而实现全局最优解的搜索。
而TSP问题是指旅行商问题,即在给定的一组城市中,旅行商要找到一条最短路径,使得每个城市都被访问一次并回到起点。
TSP问题是一个经典的组合优化问题,它在实际中具有广泛的应用。
在实际应用中,TSP问题的规模往往十分庞大,传统的算法在解决大规模TSP问题时效率低下,因此需要寻找更加高效的算法来解决TSP问题。
本文将介绍一种分层递进的改进聚类蚁群算法来解决TSP问题,该算法结合了分层聚类和蚁群算法的特点,能够有效地求解大规模TSP问题。
接下来,将从蚁群算法和TSP问题入手,介绍分层递进的改进聚类蚁群算法的基本原理和关键步骤,最后对算法进行实验验证,并对结果进行分析。
2.蚁群算法蚁群算法是由意大利学者Dorigo在上世纪90年代提出的,它模拟了蚂蚁在寻找食物的过程中通过信息素的传递来寻找最短路径的行为。
在蚁群算法中,蚂蚁会在城市之间不断地移动,并根据信息素浓度选择下一个要移动的城市,当所有蚂蚁都完成了一次移动后,会更新信息素浓度,然后进行下一轮的移动。
通过这种方式,蚁群算法能够逐步找到最短路径,同时也能够实现全局搜索和局部搜索的平衡,从而得到较好的优化结果。
在传统的蚁群算法中,蚂蚁在每一次移动时都会依据信息素浓度进行选择,但这种策略可能导致蚂蚁集中在某个局部最优解附近而无法跳出去探索其他地方,因此算法收敛速度较慢。
为了解决这个问题,一种改进的策略是引入聚类的概念,将蚂蚁分为不同的类别,并在每一类中进行搜索,使得蚂蚁能够更好地利用全局信息进行搜索。
接下来将介绍如何将聚类融入到蚁群算法中来解决TSP问题。
3.分层递进的改进聚类蚁群算法3.1 基本原理分层递进的改进聚类蚁群算法是基于蚁群算法和聚类算法相结合的一种优化算法。
还有页眉没有添加,页眉上写章标题,把我给你标注的问题改完就可以打印了摘要根据蚂蚁生态学提出的蚁群算法是一种新颖的用于求解复杂组合优化问题的模拟进化算法,具有典型的群体智能特征,表现出较强的学习能力和适应能力。
本文阐述了该算法的基本原理、算法模型和在TSP( Traveling Salesman Problem,旅行商)问题中的具体应用过程,并对算法进行了总结和展望。
关键词:蚁群算法,旅行商问题,外激素目录摘要Ⅰ目录II第一章引言 (1)第二章蚁群算法的基本原理和模型 (2)2.1 蚁群算法的基本原理 (2)2.2 蚁群算法的模型 (3)第三章基于蚁群算法的TSP求解 (5)3.1 TSP问题的描述 (5)3.2 基于蚁群算法的TSP求解 (5)3.3 蚁群算法的局限性 (6)第四章蚁群算法的改进 (8)4.1 优选参数m (8)4.2 参数 的调整 (8)4.3 信息素的更新 (8)4.4 信息素链表L 和禁忌链表TL 的构建 (9)第五章改进的算法基本流程 (10)第六章结论 (11)参考文献 (12)第一章引言研究群居性昆虫行为的科学家发现,昆虫在群落一级上的合作基本上是自组织的,在许多场合中尽管这些合作可能很简单,但它们却可以解决许多复杂的问题。
蚁群算法就是利用群集智能解决组合优化问题的典型例子。
蚁群算法(Ant Colony Algorithm, ACA)是由意大利学者M.Dorigo,V.Mzniezzo,A.Colorni 等人在20世纪90年代初首先提出来的。
它是继模拟退火算法、遗传算法、禁忌搜索算法、人工神经网络算法等元启发式搜索算法以后的又一种应用于组合优化问题的启发式搜索算法。
蚁群算法不仅能够智能搜索、全局优化,而且具有稳健性A、鲁棒性B、正反馈、分布式计算、易与其它算法结合等特点。
利用正反馈原理,可以加快进化过程;分布式计算使该算法易于并行实现,个体之间不断进行信息交流和传递,有利于找到较好的解,不容易陷入局部最优;该算法易与多种启发式算法结合,可改善算法的性能;由于鲁棒性强,故在基本蚁群算法模型的基础上进行修改,便可用于其它问题。
蚁群算法原理及在TSP 中的应用1 蚁群算法(ACA )原理1.1 基本蚁群算法的数学模型以求解平面上一个n 阶旅行商问题(Traveling Salesman Problem ,TSP)为例来说明蚁群算法ACA (Ant Colony Algorithm )的基本原理。
对于其他问题,可以对此模型稍作修改便可应用。
TSP 问题就是给定一组城市,求一条遍历所有城市的最短回路问题。
设()i b t 表示t 时刻位于元素i 的蚂蚁数目,()ij t τ为t 时刻路径(,)i j 上的信息量,n 表示TSP 规模,m 为蚁群的总数目,则1()ni i m b t ==∑;{(),}ij i i t c c C τΓ=⊂是t 时刻集合C 中元素(城市)两两连接ij t 上残留信息量的集合。
在初始时刻各条路径上信息量相等,并设 (0)ij const τ=,基本蚁群算法的寻优是通过有向图(,,)g C L =Γ实现的。
蚂蚁(1,2,...,)k k m =在运动过程中,根据各条路径上的信息量决定其转移方向。
这里用禁忌表(1,2,...,)k tabu k m =来记录蚂蚁k 当前所走过的城市,集合随着k tabu 进化过程作动态调整。
在搜索过程中,蚂蚁根据各条路径上的信息量及路径的启发信息来计算状态转移概率。
()kij p t 表示在t 时刻蚂蚁k 由元素(城市)i 转移到元素(城市)j 的状态转移概率。
()*()()*()()0k ij ij k kij ij ij s allowed t t j allowed t t p t αβαβτητη⊂⎧⎡⎤⎡⎤⎣⎦⎣⎦⎪∈⎪⎡⎤⎡⎤=⎨⎣⎦⎣⎦⎪⎪⎩∑若否则(1)式中,{}k k allowed C tabuk =-表示蚂蚁k 下一步允许选择的城市;α为信息启发式因子,表示轨迹的相对重要性,反映了蚂蚁在运动过程中所积累的信息在蚂蚁运动时所起作用,其值越大,则该蚂蚁越倾向于选择其他蚂蚁经过的路径,蚂蚁之间协作性越强;β为期望启发式因子,表示能见度的相对重要性,反映了蚂蚁在运动过程中启发信息在蚂蚁选择路径中的重视程度,其值越大,则该状态转移概率越接近于贪心规则;()ij t η为启发函数,其表达式如下:1()ij ijt d η=(2)式中,ij d 表示相邻两个城市之间的距离。
智能计算实验报告学院:班级:学号:姓名:成绩:日期:实验名称:基于蚁群优化算法的TSP问题求解题目要求:利用蚁群优化算法对给定的TSP问题进行求解,求出一条最短路径。
蚁群优化算法简介:蚁群算法是一中求解复杂优化问题的启发式算法,该方法通过模拟蚁群对“信息素”的控制和利用进行搜索食物的过程,达到求解最优结果的目的。
它具有智能搜索、全局优化、稳健性强、易于其它方法结合等优点,适应于解决组合优化问题,包括运输路径优化问题。
TSP数据文件格式分析:本次课程设计采用的TSP文件是att48.tsp ,文件是由48组城市坐标构成的,文件共分成三列,第一列为城市编号,第二列为城市横坐标,第三列为城市纵坐标。
数据结构如下所示:实验操作过程:1、TSP文件的读取:class chengshi {int no;double x;double y;chengshi(int no, double x, double y) {this.no = no;this.x = x;this.y = y;}private double getDistance(chengshi chengshi) {return sqrt(pow((x - chengshi.x), 2) + pow((y - chengshi.y), 2));}}try {//定义HashMap保存读取的坐标信息HashMap<Integer, chengshi> map = new HashMap<Integer,chengshi>();//读取文件BufferedReader reader = new BufferedReader(new (new )));for (String str = reader.readLine(); str != null; str = reader.readLine()) { //将读到的信息保存入HashMapif(str.matches("([0-9]+)(\\s*)([0-9]+)(.?)([0-9]*)(\\s*)([0-9]+)(.?)([0-9]*)")) {String[] data = str.split("(\\s+)");chengshi chengshi = new chengshi(Integer.parseInt(data[0]),Double.parseDouble(data[1]),Double.parseDouble(data[2]));map.put(chengshi.no, chengshi);}}//分配距离矩阵存储空间distance = new double[map.size() + 1][map.size() + 1];//分配距离倒数矩阵存储空间heuristic = new double[map.size() + 1][map.size() + 1];//分配信息素矩阵存储空间pheromone = new double[map.size() + 1][map.size() + 1];for (int i = 1; i < map.size() + 1; i++) {for (int j = 1; j < map.size() + 1; j++) {//计算城市间的距离,并存入距离矩阵distance[i][j] = map.get(i).getDistance(map.get(j));//计算距离倒数,并存入距离倒数矩阵heuristic[i][j] = 1 / distance[i][j];//初始化信息素矩阵pheromone[i][j] = 1;}}} catch (Exception exception) {System.out.println("初始化数据失败!");}}2、TSP作图处理:private void evaporatePheromone() {for (int i = 1; i < pheromone.length; i++)for (int j = 1; j < pheromone.length; j++) {pheromone[i][j] *= 1-rate;}}3、关键源代码(带简单的注释):蚂蚁类代码:class mayi {//已访问城市列表private boolean[] visited;//访问顺序表private int[] tour;//已访问城市的个数private int n;//总的距离private double total;mayi() {//给访问顺序表分配空间tour = new int[distance.length+1];//已存入城市数量为n,刚开始为0n = 0;//将起始城市1,放入访问结点顺序表第一项tour[++n] = 1;//给已访问城市结点分配空间visited = new boolean[distance.length];//第一个城市为出发城市,设置为已访问visited[tour[n]] = true;}private int choosechengshi() {//用来random的随机数double m = 0;//获得当前所在的城市号放入j,如果和j相邻的城市没有被访问,那么加入mfor (int i = 1, j = tour[n]; i < pheromone.length; i++) {if (!visited[i]) {m += pow(pheromone[j][i], alpha) * pow(heuristic[j][i], beta);}}//保存随机数double p = m * random();//寻找随机城市double k = 0;//保存城市int q = 0;for (int i = 1, j = tour[n]; k < p; i++) {if (!visited[i]) {k += pow(pheromone[j][i], alpha) * pow(heuristic[j][i], beta);q = i;}}return q;}城市选择代码:private int choosechengshi() {//用来random的随机数double m = 0;//获得当前所在的城市号放入j,如果和j相邻的城市没有被访问,那么加入mfor (int i = 1, j = tour[n]; i < pheromone.length; i++) {if (!visited[i]) {m += pow(pheromone[j][i], alpha) * pow(heuristic[j][i], beta);}}//保存随机数double p = m * random();//寻找随机城市double k = 0;//保存城市int q = 0;for (int i = 1, j = tour[n]; k < p; i++) {if (!visited[i]) {k += pow(pheromone[j][i], alpha) * pow(heuristic[j][i], beta);q = i;}}return q;}4、算法运行收敛图(即运行到第几步,求得的最优值是多少):run:本次为倒数第100次迭代,当前最优路径长度为41634.60本次为倒数第99次迭代,当前最优路径长度为41514.21本次为倒数第98次迭代,当前最优路径长度为38511.61本次为倒数第97次迭代,当前最优路径长度为38511.61本次为倒数第96次迭代,当前最优路径长度为38511.61本次为倒数第95次迭代,当前最优路径长度为38511.61本次为倒数第94次迭代,当前最优路径长度为37293.07、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、本次为倒数第6次迭代,当前最优路径长度为37293.07本次为倒数第5次迭代,当前最优路径长度为37293.07本次为倒数第4次迭代,当前最优路径长度为37293.07本次为倒数第3次迭代,当前最优路径长度为37293.07本次为倒数第2次迭代,当前最优路径长度为37293.07本次为倒数第1次迭代,当前最优路径长度为37293.07得到的最优的路径长度为: 37293.075、最终求得的最优解的TSP图像:最优路径如下:→1→9→38→31→44→18→7→28→37→19→6→30→43→27→17→36→46→33→15→12→11→23→14→25→13→20→47→21→39→32→48→5→29→2→26→4→35→45→10→42→24→34→41→16→22→3→40→8→1成功生成(总时间:3 秒)实验结果分析:本次通过JA V A语言实现蚁群优化算法,我们发现虽然我们找到了问题的最优解,但是最优解的收敛性并不乐观,并不能求得问题的精确解,并且随着参数的调节运行结果有随机性。
分层递进的改进聚类蚁群算法解决TSP问题改进聚类蚁群算法是一种针对旅行商问题(TSP)的优化算法,通过分层递进的方式不断改进蚁群算法来解决TSP问题。
下面将详细介绍这种算法的原理和步骤。
首先,需要了解蚁群算法的基本原理。
蚁群算法受到蚂蚁在寻找食物路径上的行为启发,通过模拟蚂蚁在地图上选择路径的行为,来求解最优路径。
蚂蚁在搜索过程中会释放信息素,其他蚂蚁通过感知到这些信息素来进行选择。
改进聚类蚁群算法的第一步是进行初始化。
初始化过程中,将问题分为多层,每层包含若干个聚类,每个聚类包含若干个蚂蚁。
每层的聚类个数和蚂蚁个数可以根据问题规模和实验经验进行确定。
接下来,需要进行分层聚类。
通过将问题分解为多个聚类,可以减少问题规模,简化计算过程。
每个聚类中的蚂蚁只搜索当前聚类中的解空间,并释放相应的信息素。
同时,每个聚类都会记录当前最优解。
在每个聚类中,蚂蚁通过模拟选择路径来搜索最优解。
蚂蚁根据当前位置和信息素浓度来选择下一个位置,并更新蚂蚁走过的路径和解的质量。
在每个位置选择之后,蚂蚁还会释放信息素,用于后续蚂蚁的选择。
在每个聚类中的蚂蚁完成搜索后,将选择最优解的蚂蚁移动到上一层。
这样,上一层的聚类就可以得到一个更好的初始解,并进行下一轮的搜索。
这个过程不断迭代,直到达到最高层。
最后,将最高层得到的优化解进行整理和调整,得到最终的TSP路径。
根据每个聚类中记录的最优解,可以确定每一层中每个聚类的初始路径。
然后,通过蚁群算法进行一定轮数的搜索和迭代,可以得到更优的路径。
通过分层递进的改进聚类蚁群算法,可以通过简化问题,减少搜索空间,提高搜索效率,从而得到更优的TSP路径。
该算法在解决TSP问题时具有较好的效果,并且可以通过调整和优化不同层的参数和设置来进一步提升算法的性能。
1 / 1 HUNAN UNIVERSITY 课 程 作 业
课程题目 智能优化算法
学生姓名 李小燕 学生学号 S131020016 专业班级 计算机科学与技术 学院名称 信息科学与工程学院 指导老师 杨圣洪
2014 年6月 8日 蚁群算法求解TSP问题 摘要:
蚁群算法是一种分布式内在并行算法。单个蚂蚁的搜索过程是彼此独
立的,易于局部最优,通过个体间不断的信息交流和传递有利于发现较好解;并且该算法是一种正反馈算法。路径上的信息素浓度较高,将吸引更多的蚂蚁沿这条路径运动,又使得信息素浓度增加,加快了算法的进化过程。本文通过求解TSP问题,通过在特定情况下对路径进行逐步遍历比较来降低陷入局部最优解的可能性, 找出最优解。 关键词:蚁群算法;TSP;信息素;遍历 1. 引言
TSP问题又称最短路径问题,还称为旅行商问题,是一种比较经典的 NP 难题,问题描述较简单,而获得最优解却十分困难。求解 TSP 问题不仅为其他算法提供了使用平台,而且算法的优劣性能也可通过其求得 TSP 问题的解集来验证。旅行商问题的经典描述为:已知N 个城市及相互间的距离,旅行商从某城市出发遍历这 N 个城市后再回到原点,在旅行商每个城市都只访问一次的前提下确定一条最短路径。 蚁群算法是一种基于种群的启发式仿生进化系统。该算法通过模拟自然界的蚂蚁觅食过程对目标进行搜索,而在搜索过程中人工蚂蚁会在其经过的路径上释放信息素,蚁群依赖于同类散发在周围环境中的特殊物质—信息素的轨迹来决定自己的去向。当某些路径上走过的蚂蚁越来越多时,留下的信息素也会越来越多,以致后蚂蚁选择该路径的概率也越来越高,从而更增加了该路径的吸引强度,逐渐形成了一条它们自己事先并未意识到的最短路线。 蚁群算法实现TSP 过程为:将 m 只蚂蚁放入到 n 个随机选择的城市中,那么每个蚂蚁每步的行动是:根据一定的依据选择下一个它还没有访问的城市;同时在完成一步(从一个城市到达另一个城市)或者一个循环(完成对所有 n 个城市的访问)后,更新所有路径上的信息素浓度。 2. 蚁群算法的数学模型 (1)、基本参数、信息素浓度公式、择路概率 设蚂蚁的数量为m,城市的数量为n,城市i与城市j之间的距离为dij,t时刻城市i与城市j之间的信息素浓度为tij(t),初始时刻,各个城市间连接路径上的信息素浓度相同,不妨记为tij(0)=t0。 蚂蚁k(k=1,2,..,m)根据各城市间连接路径上的信息素浓度,决定其下一个要访问的城市,设Pijk(t)表示t时刻,蚂蚁k从城市i到城市j的概率,其计算公式为如下:
ij[()][()][()][()]P0ijijkkijijsallowktttsallowtttsallow•
•
其中: ij(t)为启发式函数,ij(t)=1/dij,表示蚂蚁从城市i转移到城市j的期望程序; allowk(k=1,2,…,m)表示蚂蚁k待访问的城市的集合,开始时allowk为其他n-1城市,随着时间推进,其中的元素不断减少,直至为空,表示所有城市访问完,即遍历所有城市。 为信息素的重要程度因子,其值越大,转移中起的作用越大 为启发函数的重要程度因子,其值越大,表示启发函数在转移中的作用越大,即蚂蚁以较大的概率转移到距离短的城市。 蚂蚁释放的信息素会随时间的推进而减少,设参数(0<<1)表示信息素的挥发度,当所有蚂蚁完成一次循环后,各个城市间连接路径上的信息素浓度,需要实时更新。 tij(t+1)=(1-)tij(t)+tij,tij=1nkijkt
其中: tijk表示蚂蚁k在城市i与城市j的连接路径上,释放的信息素浓度 tij表示所有蚂蚁在城市i与城市j的连接路径上,释放的信息素浓度。 (2)、tijk的计算方法
tijk=/0kQLk第只蚂蚁从城市i访问城市j其他 其中: Q为常数,表示蚂蚁循环一次释放的信息素的总量; dij为第k只蚂蚁经过路径的长度,Length; 3. 算法实现步骤 1、初始化参数 蚂蚁数量m,信息素重要程度,启发函数重要程度,信息素挥发因子,信息素释放总量Q,最大迭代次数iter_max。获取各城市之间的距离dij,为了保证启发式函数ij=1/dij能顺利进行,对于i=j即自己到自己的距离不能给为0,而是给成一个很小的距离,如10-4或10-5。 2、构建解空间 将各个蚂蚁随机地置于不同出发点,对每个蚂蚁按归照下式,确定下一城市。
ij[()][()][()][()]P0ijijkkijijsallowktttsallowtttsallow•
•
3、更新信息素 计算各个蚂蚁经过的路径长度Lk,记录当前迭代次数中的最优解(即最短路径),根据如下公式更新信息素: tij(t+1)=(1-)tij(t)+tij,tij=1nkijkt
tijk=/0kQLk第只蚂蚁从城市i访问城市j其他 4、判断是否终止 若没有到最大次数,则清空蚂蚁经过路径的记录表,返回步骤2。 4. 相关实验
4.1 实验内容 1、访问我国每个省会城市一次也仅一次的最短路径,共有31个 2、如果采用枚举法,巡回路径可能1.3261032种。 3、城市的坐标citys,这是直角坐标,根据二个城市的坐标值,可以用D=22(12)(12)xxyy可计算出任意二个城市间的距离。 citys = 1304 2312
3639 1315 4177 2244 3712 1399 3488 1535 3326 1556 3238 1229 4196 1004 4312 790 4386 570 3007 1970 2562 1756 2788 1491 2381 1676 1332 695 3715 1678 3918 2179 4061 2370 3780 2212 3676 2578 4029 2838 4263 2931 3429 1908 3507 2367 3394 2643 3439 3201 2935 3240 3140 3550 2545 2357 2778 2826 2370 2975
4.2 实验代码
%% 清空环境变量
clear all clc load citys_data.mat %% 导入数据 %% 计算城市间相互距离 n = size(citys,1); %城市的个数 D = zeros(n,n); %n行n列的矩阵,即任意二个城市之间的距离 for i = 1:n for j = 1:n if i ~= j D(i,j) = sqrt(sum((citys(i,:) - citys(j,:)).^2)); else D(i,j) = 1e-4; end end end %% 初始化参数 m = 50; % 蚂蚁数量 alpha = 1; % 信息素重要程度因子 beta = 5; % 启发函数重要程度因子 rho = 0.1; % 信息素挥发因子 Q = 1; % 常系数 Eta = 1./D; % 启发函数 Tau = ones(n,n); % 信息素矩阵,全1矩阵 Table = zeros(m,n); % 路径记录表,全0矩阵,每只蚂蚁依次走过的城市 iter = 1; % 迭代次数初值 iter_max = 200; % 最大迭代次数 Route_best = zeros(iter_max,n); % 各代最佳路径 Length_best = zeros(iter_max,1); % 各代最佳路径的长度 Length_ave = zeros(iter_max,1); % 各代路径的平均长度 %% 迭代寻找最佳路径 while iter <= iter_max % 随机产生各个蚂蚁的起点城市 start = zeros(m,1); %m是蚂蚁的个数,m行1列的矩阵,记录每个蚂蚁的城市编号 for i = 1:m temp = randperm(n); start(i) = temp(1); end Table(:,1) = start; %路径记录表的1列,为每个蚂蚁的起点城市 % 构建解空间 citys_index = 1:n; % 逐个蚂蚁路径选择 for i = 1:m % 逐个城市路径选择 for j = 2:n tabu = Table(i,1:(j - 1)); % 已访问的城市集合(禁忌表) allow_index = ~ismember(citys_index,tabu);%不是tabu的城市就是要访问的城市 allow = citys_index(allow_index); % 待访问的城市集合 P = allow; for k = 1:length(allow) % 计算城市间转移概率 P(k) = Tau(tabu(end),allow(k))^alpha * Eta(tabu(end),allow(k))^beta; end P = P/sum(P);%规一化 % 轮盘赌法选择下一个访问城市 Pc = cumsum(P);%依次累加,是实现轮盘赌法选择的方法 target_index = find(Pc >= rand); target = allow(target_index(1)); Table(i,j) = target;