蚁群算法及其在TSP问题中的应用研究
- 格式:doc
- 大小:22.50 KB
- 文档页数:3
分层递进的改进聚类蚁群算法解决TSP问题1.引言蚁群算法是一种模拟昆虫觅食行为的群体智能优化算法,它通过模拟蚂蚁在寻找食物过程中留下的信息素轨迹,使得较优路径上的信息素浓度增加,从而实现全局最优解的搜索。
而TSP问题是指旅行商问题,即在给定的一组城市中,旅行商要找到一条最短路径,使得每个城市都被访问一次并回到起点。
TSP问题是一个经典的组合优化问题,它在实际中具有广泛的应用。
在实际应用中,TSP问题的规模往往十分庞大,传统的算法在解决大规模TSP问题时效率低下,因此需要寻找更加高效的算法来解决TSP问题。
本文将介绍一种分层递进的改进聚类蚁群算法来解决TSP问题,该算法结合了分层聚类和蚁群算法的特点,能够有效地求解大规模TSP问题。
接下来,将从蚁群算法和TSP问题入手,介绍分层递进的改进聚类蚁群算法的基本原理和关键步骤,最后对算法进行实验验证,并对结果进行分析。
2.蚁群算法蚁群算法是由意大利学者Dorigo在上世纪90年代提出的,它模拟了蚂蚁在寻找食物的过程中通过信息素的传递来寻找最短路径的行为。
在蚁群算法中,蚂蚁会在城市之间不断地移动,并根据信息素浓度选择下一个要移动的城市,当所有蚂蚁都完成了一次移动后,会更新信息素浓度,然后进行下一轮的移动。
通过这种方式,蚁群算法能够逐步找到最短路径,同时也能够实现全局搜索和局部搜索的平衡,从而得到较好的优化结果。
在传统的蚁群算法中,蚂蚁在每一次移动时都会依据信息素浓度进行选择,但这种策略可能导致蚂蚁集中在某个局部最优解附近而无法跳出去探索其他地方,因此算法收敛速度较慢。
为了解决这个问题,一种改进的策略是引入聚类的概念,将蚂蚁分为不同的类别,并在每一类中进行搜索,使得蚂蚁能够更好地利用全局信息进行搜索。
接下来将介绍如何将聚类融入到蚁群算法中来解决TSP问题。
3.分层递进的改进聚类蚁群算法3.1 基本原理分层递进的改进聚类蚁群算法是基于蚁群算法和聚类算法相结合的一种优化算法。
用蚁群算法解决TSP 问题一、引言蚁群算法是一种受自然界生物行为启发而产生的“自然”算法,产生于对蚂蚁行为的研究。
蚁群中的蚂蚁以“信息素”为媒介,间接异步的相互联系。
蚂蚁在行动中,会在他们经过的地方留下一些化学物质,称为“信息素”。
这些物质能被同一种群众后来的蚂蚁感受到,并作为一种信号影响后者的行动,具体表现在后到的蚂蚁选择有这些物质的路径的可能性比选择没有这些物质的路径的可能性大的多。
后者留下的信息素会对原有的信息素进行加强,并循环下去。
这样,经过蚂蚁多的路径,后到蚂蚁选择这条路径的可能性就越来越大。
由于在一定的时间内,越短的路径会被越多的蚂蚁访问,因而积累的信息素就越多,在下一个时间内被其他的蚂蚁选中的可能性也越大。
这个过程会持续到所有的蚂蚁都走到最短的那一条路径为止。
二、关键技术(1) 解的表达形式在应用蚁群优化算法时,只需要建立一个虚拟的始终点,相当于蚁群的巢穴和食物所在地,这样一个所经过城市的路径的排列就构成了一个解;(2) 信息素的记忆和更新在算法开始时,由于从来没有蚂蚁去寻找过路径,因此可以认为是没有任何先验信息,即每条路上的信息相等。
客观地将,信息素应该都为0,但是由于在蚁群算法中,信息素决定了蚂蚁选择这条路径的概率,因此可以认为初始信息素矩阵为:1/(*(1))0ij N N p -⎧=⎨⎩i j i j ≠=其中N 为城市数 当算法运行过程中,每次放出m 支蚂蚁,每只蚂蚁按照信息素选择路径,将其中路径最短的记录下来,对这条最短路进行信息素的加强;而对于其他路径,因为信息素的挥发,信息素浓度将会降低,更新后的信息素矩阵为: 11(1)//(1)/k ij k ij k ij p N p p ρρρ--⎧-+⎪=⎨-⎪⎩i j i j →→经过路径不经过路径其中N 为城市数,ρ为挥发系数 (3) 蚁群的规模在一般应用中,蚁群中蚂蚁的个数m 是固定数,不超过TSP 图的节点数。
三、算法实现步骤1 设定蚁群规模m ,计算次数n ,挥发系数ρ,初始化信息素矩阵,设定变量best =+∞记录全局最优解;步骤2 若n =0,推出并输出结果;否则n=n-1,分别放出m 只蚂蚁,按照信息素概率选择路径,并找出m 条路径中的当代最优路径cubest ; 步骤3 根据当代最有路径更新信息素;步骤4 如果cubest<best ,best=cubest ,执行步骤2;否则直接执行步骤2;四、结果及分析通过五个城市节点的TSP 问题的求解,其城市间的距离矩阵为:01015621008139158020156132005291550⎛⎫ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎝⎭蚁群算法找到的最优路径为A C B D E →→→→,总路程为43;通过试验结果发现,对于小规模的TSP问题,蚁群算法和禁忌搜索、模拟退火算法的计算结果相似,而且耗时很短,因此该算法是合理的。
(计算智能大作业)应用蚁群算法求解TSP问题目录蚁群算法求解TSP问题 (3)摘要: (3)关键词: (3)一、引言 (3)二、蚁群算法原理 (4)三、蚁群算法解决TSP问题 (7)四、解决n个城市的TSP问题的算法步骤 (9)五、程序实现 (11)六、蚁群算法优缺点分析及展望 (18)七、总结 (18)采用蚁群算法解决TSP问题摘要:蚁群算法是通过蚂蚁觅食而发展出的一种新的启发算法,该算法已经成功的解决了诸如TSP问题。
本文简要学习探讨了蚂蚁算法和TSP问题的基本内容,尝试通过matlab 仿真解决一个实例问题。
关键词:蚁群算法;TSP问题;matlab。
一、引言TSP(Travelling Salesman Problem)又称货郎担或巡回售货员问题。
TSP问题可以描述为:有N个城市,一售货员从起始城市出发,访问所有的城市一次,最后回到起始城市,求最短路径。
TSP问题除了具有明显的实际意义外,有许多问题都可以归结为TSP问题。
目前针对这一问题已有许多解法,如穷举搜索法(Exhaustive Search Method), 贪心法(Greedy Method), 动态规划法(Dynamic Programming Method)分支界定法(Branch-And-Bound),遗传算法(Genetic Agorithm)模拟退火法(simulated annealing),禁忌搜索。
本文介绍了一种求解TSP问题的算法—蚁群算法,并通过matlab仿真求解50个城市之间的最短距离,经过仿真试验,证明是一种解决TSP问题有效的方法。
20世纪90年代,意大利学者M.Dorigo等人在新型算法研究的过程中,通过模拟自然界蚂蚁的觅食过程:即通过信息素(pheromone)的相互交流从而找到由蚁巢至食物的最短路径,提出了一种基于信息正反馈原理的新型模拟进化算法——蚁群算法(Ant Colony algorithm)。
蚁群算法(ACO)解决TSP问题⼀、蚁群算法1.基本原理蚁群算法(Ant Colony Optimization,ACO)是⼀种基于种群寻优的启发式搜索算法,有意⼤利学者M.Dorigo等⼈于1991年⾸先提出。
该算法受到⾃然界真实蚁群集体在觅⾷过程中⾏为的启发,利⽤真实蚁群通过个体间的信息传递、搜索从蚁⽳到⾷物间的最短路径等集体寻优特征,来解决⼀些离散系统优化中的困难问题。
经过观察发现,蚂蚁在寻找⾷物的过程中,会在它所经过的路径上留下⼀种被称为信息素的化学物质,信息素能够沉积在路径上,并且随着时间逐步挥发。
在蚂蚁的觅⾷过程中,同⼀蚁群中的其他蚂蚁能够感知到这种物质的存在及其强度,后续的蚂蚁会根据信息素浓度的⾼低来选择⾃⼰的⾏动⽅向,蚂蚁总会倾向于向信息素浓度⾼的⽅向⾏进,⽽蚂蚁在⾏进过程中留下的信息素⼜会对原有的信息素浓度予以加强,因此,经过蚂蚁越多的路径上的信息素浓度会越强,⽽后续的蚂蚁选择该路径的可能性就越⼤。
通常在单位时间内,越短的路径会被越多的蚂蚁所访问,该路径上的信息素强度也越来越强,因此,后续的蚂蚁选择该短路径的概率也就越⼤。
经过⼀段时间的搜索后,所有的蚂蚁都将选择这条最短的路径,也就是说,当蚁巢与⾷物之间存在多条路径时,整个蚁群能够通过搜索蚂蚁个体留下的信息素痕迹,寻找到蚁巢和⾷物之间的最短路径。
蚁群算法中,蚂蚁个体作为每⼀个优化问题的可⾏解。
⾸先随机⽣成初始种群,包括确定解的个数、信息素挥发系数、构造解的结构等。
然后构造蚁群算法所特有的信息素矩阵每只妈蚁执⾏蚂蚊移动算⼦后,对整个群体的蚂蚁做⼀评价,记录最优的蚂蚁。
之后算法根据信息素更新算⼦更新信息素矩阵,⾄此种群的⼀次选代过程完成。
整个蚂蚁群体执⾏⼀定次数的选代后退出循环、输出最优解。
2.术语介绍(1)蚂蚁个体。
每只蚂蚁称为⼀个单独的个体,在算法中作为⼀个问题的解。
(2)蚂蚁群体。
⼀定数量的蚂蚁个体组合在⼀起构成⼀个群体,蚂蚁是群体的基本单位。
蚁群算法原理及在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问题的定义、特点以及求解难度,然后详细阐述了蚁群算法的基本原理和算法流程。
在此基础上,本文提出了一种基于自然选择策略的蚁群算法,该算法通过引入自然选择的思想,使得蚁群在搜索过程中能够自动适应环境变化,优化搜索策略,从而提高算法的求解效率。
本文的主要研究内容包括:分析TSP问题的数学模型和求解难点,为蚁群算法的应用奠定基础;设计并实现基于自然选择策略的蚁群算法,通过仿真实验验证算法的有效性和优越性;将算法应用于实际TSP问题中,评估其在实际应用中的性能和效果。
本文的研究不仅有助于深入理解TSP问题的求解方法和蚁群算法的优化原理,而且能够为解决其他优化问题提供新的思路和方法。
本文的研究结果也为蚁群算法在实际应用中的推广和应用提供了有力支持。
二、自然选择策略的基本原理自然选择策略,源自达尔文的进化论,是生物进化过程中的核心机制。
在自然界中,生物体通过遗传、变异和选择三个基本过程不断适应和进化。
遗传使得生物体的特征能够传递给后代,变异则引入新的遗传信息,而自然选择则决定了哪些特征在生存和繁衍中更具优势。
经过长时间的演化,适应性强的特征会得到保留和增强,而适应性弱的特征则可能逐渐消失。
将这种自然选择的思想引入算法设计,就形成了自然选择策略。
在算法中,每个解被视为一个个体,而个体的适应度则通过某种评价函数来衡量。
算法通过模拟自然选择的过程,不断迭代生成新的解,并保留适应度高的解,淘汰适应度低的解。
智能计算实验报告学院:班级:学号:姓名:成绩:日期:实验名称:基于蚁群优化算法的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文件是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问题是一类典型的np完全问题,蚁群算法是求解该问题的方法之一。
该文在研究蚁群算法的基本优化原理的基础上,建立了求解tsp 问题的数学模型,设计了一个求解tsp问题的蚁群算法程序,并通过仿真实验验证了算法的有效性,分析了蚂蚁规模、周游次数等因素对蚁群算法搜索结果所产生的影响。
关键词:tsp;蚁群算法;np完全问题
中图分类号:tp301 文献标识码:a 文章编号:1009-3044(2013)13-3117-03
旅行商问题(traveling salesman problem,简称tsp)是一个具有广泛应用背景和重要理论价值的组合优化问题,它已被证明属于np难题[1]。
目前对于求解该类问题的研究主要有两个方向:一是传统的数学规划方法,这种算法可以得到全局最优解,但复杂性往往难以接受,因而不适应于大规模复杂问题的求解。
二是近年来发展起来的各种仿生进化算法如遗传算法、蚁群算法等,此类算法能够在多项式时间内找到全局最优解或近似全局最优解[2]。
蚁群算法(ant colony algorithm,简称aca)是受自然界中蚂蚁集体寻食过程的启发而提出来的一种新的智能优化算法,它具有高度的本质并行性、正反馈选择、分布式计算、鲁棒性等优点,蚁群算法最早成功地应用于解决tsp问题。
本文在研究蚁群算法的基本优化原理的基础上,编写了一个基于vc的求解tsp问题的蚁群算法程序,并且通过多次实验测试,验证
了算法的有效性,分析了蚂蚁规模、周游次数等因素对蚁群算法的搜索结果和效率所产生的影响。
1 tsp问题建模
2 基于蚁群算法的tsp问题求解
2.2蚁群算法的基本原理
蚁群算法是一种源于自然生物界的新型仿生优化算法,它于20
世纪90年代初由意大利学者m.dorigo,v.maniezzo首次提出[3],蚁群算法的特点是模拟自然界中蚂蚁寻食的群体行为。
研究表明,蚂蚁会在走过的路上留下信息素,信息素会随时间的推移逐渐挥发消失,蚂蚁就是通过信息素进行信息交流。
蚂蚁趋向于朝信息素积累较多的路径移动,信息素浓度越高的路径,选择它的蚂蚁就越多,则该路径上留下的信息素浓度就越大,而高浓度的信息素反过来又会吸引更多的蚂蚁,从而形成一种正反馈。
通过这种正反馈机制,蚂蚁最终可以发现最短的路径,并且最后所有的蚂蚁都会趋向于选择这条最短路径[4]。
这就是蚁群算法的基本原理。
2.2求解tsp问题的蚁群算法设计
2.3算法步骤
4 结束语
本文探讨了蚁群算法的基本优化原理,设计并实现了求解tsp问题的蚁群算法程序,通过实验验证了算法的有效性,同时,经过多次实验测试结果,分析了对蚁群行为和算法的解产生影响的各个因素。
蚁群算法作为一种新的仿生进化算法,它在解决许多复杂组合优化问题方面显示出了明显的优势,但也存在着诸如搜索时间较长等不足之处,因此,对算法的改进、收敛性分析及理论依据等方面还有待进一步深入研究。
参考文献:
[1] 郭平,嫣文静.求解tsp问题的蚁群算法综述[j].计算机科学,2007,34(10):181-184.
[2] 周康,强小利,同小军,等.求解tsp算法[j].计算机工程与应用,2007(29):43-47.
[3] dorigo m, maniezzo v, colorni a. the ant system:optimization by a colony of cooperating agents[j]. ieee transaction on systems,1996,26(1):1-26.
[4] 李志伟.基于群集智能的蚁群优化算法研究[j].计算机工程与设计,2003,24(8):27-29.
[5] dorigo m, bonabeau e, theraulaz g. ant algorithms and stigmergy[j]. future generation computer systems journal,2000,16 (8): 851-857.。