基于MATLAB的蚁群算法解决旅行商问题(附带源程序、仿真)
- 格式:doc
- 大小:99.50 KB
- 文档页数:10
关于旅行商问题的数学模型旅行商问题(TravelingSalesmanProblem,TSP)是著名的组合优化问题,它的目标是找到一条路径,使得一个旅行商可以经过所有给定的城市,路径总长度最短。
这个问题在实际生活中有着广泛的应用,例如物流配送、电路板布线、DNA序列比对等领域。
本文将介绍旅行商问题的数学模型和解法。
1. 问题描述假设有n个城市,它们的位置分别为(xi,yi),i=1,2,...,n。
旅行商要从一个城市出发,经过所有城市恰好一次,最后回到出发城市。
城市之间的距离可以用欧几里得距离表示:d(i,j) = sqrt((xi-xj)^2 + (yi-yj)^2)旅行商问题的目标是找到一条路径,使得路径总长度最短。
2. 数学模型2.1 定义变量我们定义变量xij表示从城市i到城市j的路径是否被选择,如果被选择则xij=1,否则xij=0。
例如,x12表示从城市1到城市2的路径是否被选择。
2.2 目标函数旅行商问题的目标是找到一条路径,使得路径总长度最短。
因此,我们可以定义目标函数为:minimize ∑i∑j d(i,j)xij其中,i,j表示城市的编号,d(i,j)表示城市i和城市j之间的距离,xij表示从城市i到城市j的路径是否被选择。
2.3 约束条件旅行商需要经过所有城市恰好一次,因此我们需要添加以下约束条件:1. 每个城市只能被经过一次:∑j xij = 1, i=1,2,...,n2. 每个城市离开后只能到达一个城市:∑i xij = 1, j=1,2,...,n3. 不能出现子回路:∑i∈S ∑j∈S xij ≤ |S|-1, S{1,2,...,n}, |S|≥2其中,第一个约束条件表示每个城市只能被经过一次,第二个约束条件表示每个城市离开后只能到达一个城市,第三个约束条件表示不能出现子回路。
3. 解法旅行商问题是一个NP难问题,没有多项式时间算法可以求解。
因此,我们需要使用一些启发式算法来求解这个问题。
基于蚁群算法的机器人路径规划摘要当前机器人朝着智能化的方向发展着,已经能够解决一些人类自身难以完成的任务。
机器人的研究方向分为好多个分支,其中机器人路径规划就是热点问题之一。
主要用于解决机器人在复杂环境下做出路径选择,完成相应任务的问题。
典型的路径规划问题是指在有障碍物的工作环境中,按照一定的评价标准(行走路线最短、所用时间最少等)为机器人寻找一条从起点到终点的运动路径,让机器人在运动过程中能安全、无碰撞地通过所有的障碍物。
基于蚁群算法的机器人路径规划的研究,利用仿真学的基本思想,根据生物蚂蚁协作和觅食的原理,建立人工蚁群系统。
本文介绍了使用基本蚁群算法和改进蚁群算法在机器人路径规划中的应用,以栅格法作为路径规划的环境模型建立方法。
其中改进蚁群算法依据最大最小蚂蚁系统原理和信息素奖励思想,还增加了其它启发信息来指导路径的搜索。
本文中介绍的基本蚁群算法应用蚁周模型对找到的路径进行信息素的更新,而在改进蚁群算法中,则综合使用了局部信息素更新原则和全局信息素更新原则。
另外在本文中介绍的改进蚁群算法使用了回退策略和落入陷阱时的信息素惩罚机制,帮助处理了蚂蚁在寻找路径过程中,落入陷阱后的问题。
不过改进后的蚁群算法的及时寻找到最优解的特性仍然有待于进一步的提高。
关键词:路径规划,蚁群算法,改进Path Planning for Robot Based on Ant ColonyAlgorithmAbstractNow robots are developing in the direction of intelligent, they have been able to solve some hard task as human beings do. Robot research has divide into the direction of large number of branches, where the robot path planning is one of hot issues. it is mainly used to solve the robot path in a complex environment to make choices, to complete the task. A typical path planning problem is that there are obstacles in the work environment, according to certain evaluation criteria (the shortest walking route, the minimum time spent, etc.) to find a robot's movement from origin to destination path, let the robot in motion of safe, collision-free through all the obstacles.Robot path planning research based on ant colony algorithm, is according to the simulation research, use the biological ant principles of feeding and cooperation and the establishment of artificial ant colony system. This article describes the use of basic ant colony algorithm and improved ant colony algorithm in robot path planning applications with using the grid method to establish the environment model of path planning. Improved ant colony algorithm is based on the maximum and minimum ant system theory and pheromone reward ideas. It has added other enlightening information to guide the path research. The basic ant colony algorithm described in this article uses the ant-cycle model to update the pheromone for the found path, in the improved ant colony algorithm, uses both the local pheromone updating principles and global pheromone updating the principles. Improved ant colony algorithm in this paper uses the fallback strategy, and the pheromone punishment mechanism when falling into trap to help deal with the ants in the process of finding a path falling into the trap. But the improved ant colony algorithm to find the optimal solution remains to be further improved in the optimal properties.Keywords: path planning, ant colony algorithm, improvedII目录第1章引言 (1)1.1问题的提出 (1)1.1.1研究的背景 (1)1.1.2研究的意义 (2)1.2本文研究路线 (3)1.2.1主要工作内容 (3)1.2.2目标 (3)1.3论文的主要内容 (3)第2章蚁群算法与机器人路径规划研究概述 (5)2.1蚁群算法和机器人路径规划的发展历史,现状,前景 (5)2.1.1蚁群算法的发展历史,现状,前景 (5)2.1.2移动机器人路径规划的发展历史,现状,前景 (6)2.2蚁群算法的特点 (7)2.2.1并行性 (7)2.2.2健壮性 (7)2.2.3 正反馈 (8)2.2.4局部收敛 (8)2.3基于蚁群算法的机器人路径规划实现的开发方式 (8)2.3.1开发语言的选择 (8)2.3.2开发工具的选择 (8)2.4蚁群算法介绍 (9)2.4.1 基本蚁群算法 (9)2.4.2 基本蚁群算法改进方案简介 (11)2.5机器人路径规划的环境模型建立 (11)2.5.1 栅格法 (11)2.6使用matlab仿真 (12)2.6.1 matlab仿真介绍 (12)2.7本章小结 (12)第3章基于蚁群算法的机器人路径规划分析与设计 (13)3.1基于蚁群算法的机器人路径规划需求设计 (13)3.2基于蚁群算法的机器人路径规划的要求 (13)3.3 主要的数据结构 (13)3.4基本蚁群算法实现机器人路径规划功能模块 (14)3.4.1程序入口模块 (14)3.4.2 算法运行的主体函数模块 (14)3.4.3 程序运行的清理模块 (15)3.4.4 下一步选择模块 (15)3.4.5 随机性选择模块 (16)3.4.6 路径处理和信息记录模块 (17)3.5 基本蚁群算法实现机器人路径规划整体逻辑设计 (17)3.5.1基本蚁群算法实现机器人路径规划整体结构图 (17)3.5.2基本蚁群算法实现机器人路径规划逻辑结构图 (19)3.6改进蚁群算法实现机器人路径规划功能模块 (20)3.6.1 程序运行环境处理修改部分 (20)3.6.2 下一步选择的修改部分 (20)3.6.3信息素更新和路径处理修改部分 (21)3.7 改进蚁群算法实现机器人路径规划整体逻辑设计 (22)3.7.1改进蚁群算法实现机器人路径规划整体结构图 (22)3.7.2改进蚁群算法实现机器人路径规划逻辑结构图 (23)3.8系统开发环境介绍 (24)3.8.1开发环境 (24)3.8.2调试环境 (24)3.8.3测试环境 (24)第4章基于蚁群算法的机器人路径规划的实现 (25)4.1基于基本蚁群算法的实现 (25)4.1.1算法运行的主体函数模块 (25)4.1.2 下一步选择模块 (26)4.2基于改进蚁群算法的实现 (27)4.2.1下一步选择模块 (28)4.2.2随机性选择模块 (29)4.3本章小结 (31)第5章基于蚁群算法实现机器人路径规划的仿真实验 (32)5.1运行环境 (32)5.2基于基本蚁群算法实现机器人路径规划仿真实验 (32)5.2.1 仿真步骤 (32)5.2.2 使用地图模型为5-1的仿真 (32)5.2.3 使用基本蚁群算法仿真结果 (33)IV5.2.4基于改进蚁群算法的仿真 (35)5.3 多次重复仿真实验记录 (36)5.4 本章小结 (37)第6章结论 (38)致谢 (39)参考文献 (40)基于蚁群算法的机器人路径规划第1章引言1.1问题的提出1.1.1研究的背景蚁群算法(ant colony optimization, ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型算法。
蚁群算法(Ant Colony Algorithm,简称ACA)是一种基于自然界蚁群搜索行为的近似算法,它是一种模拟进化算法,通过模拟蚂蚁在自然界中穿越路径搜索食物的行为来解决各种复杂的旅行商问题。
蚁群算法可以用来解决多种复杂的优化问题,其中旅行商问题是其中最经典的一种,给出一组城市和每对城市间的距离,要求从某一城市出发,经过每个城市恰好一次,最后回到出发城市,使得所有城市间的距离的总和最短,这就是旅行商问题。
解决旅行商问题的蚁群算法包括以下几个步骤:
(1)初始化:首先,设置蚂蚁的数量、初始位置、参数和信息素矩阵,以及其他必要的参数。
(2)选择:每只蚂蚁根据它们的本能和信息素的分布来选择下一步的行动,具体的算法是通过一个概率公式完成的。
(3)移动:每只蚂蚁根据它们的选择移动到下一个城市,并记录它们的路径。
(4)更新:每只蚂蚁移动到新的城市后,都会在该城市留下一点信息素,用以指示其他蚂蚁此处是一个可行的路径。
(5)重复:重复上述步骤直到设定的迭代次数,即每只蚂蚁完成一次完整的旅行。
(6)评估:最后,比较每只蚂蚁所得到的路径,找出最优解,即旅行距离最短的路径。
最后,蚁群算法可以求解旅行商问题,从而求得最优解,即最短的路径,以此解决复杂的优化问题。
蚁群算法的优势在于其简单、快速,而且能够很好地模拟自然界的行为,以求解复杂的优化问题。
蚁群算法的缺点在于它没有全局最优解的概念,因此可能会收敛到局部最优解,而无法得到全局最优解。
虽然蚁群算法存在一定的局限性,但它仍然是一种非常有效的优化算法,广泛应用于现实世界的复杂问题的求解中。
多目标旅行商问题(MO-TSP)是指在多个目标地点之间找到最优路径,使得旅行商能够同时满足多个旅行目标的问题。
这是一个复杂的组合优化问题,涉及到时间、成本、距离等多个目标的平衡。
针对这一问题,已经有许多算法被提出,比如遗传算法、模拟退火算法、蚁群算法等。
在本文中,我将针对用于解决多目标旅行商问题的算法进行深入剖析和讨论。
1. 遗传算法遗传算法是一种模仿自然选择和遗传机制的优化方法,通过种群的进化来寻找问题的最优解。
在解决MO-TSP问题时,遗传算法可以通过不断进化种群中的路径来寻找最佳的解决方案。
在每一代进化中,选择、交叉和变异等操作都会对种群进行改进,直到找到最优的解。
2. 模拟退火算法模拟退火算法是一种启发式算法,模拟金属退火过程中的晶粒结构变化来寻找问题的最优解。
在解决MO-TSP问题时,模拟退火算法可以通过接受较差解的概率来跳出局部最优解,并在搜索空间中进行全局搜索,以找到更好的解。
3. 蚁群算法蚁群算法是一种基于蚁群寻食行为的启发式算法,模拟蚂蚁在搜索食物时释放信息素的过程。
在解决MO-TSP问题时,蚁群算法可以通过蚂蚁在路径上释放信息素的方式来寻找最优路径,蚁群不断更新信息素浓度,并通过信息素浓度来选择下一步的移动方向。
在实际应用中,这几种算法都有其优缺点,如何选择最合适的算法取决于实际问题的复杂度、目标要求和算法的性能。
在我看来,遗传算法在求解MO-TSP问题时具有良好的全局搜索能力,但对于大规模问题的收敛速度可能较慢;模拟退火算法适用于局部搜索和全局搜索的结合,但在处理多目标问题时需要合理设定参数;蚁群算法在求解路径优化问题时具有较好的鲁棒性和稳健性,但对于问题解空间的探索可能会存在过早收敛的问题。
MO-TSP问题是一个复杂的组合优化问题,需要综合运用各种启发式算法和元启发式算法,以及结合实际问题的特点和要求,才能找到最佳的解决方案。
通过对算法的深入理解和灵活运用,我们可以在实际问题中取得较好的优化效果。
MATLAB 实现基于蚁群算法的机器人路径规划1、问题描述移动机器人路径规划是机器人学的一个重要研究领域。
它要求机器人依据某个或某些优化原则(如最小能量消耗,最短行走路线,最短行走时间等),在其工作空间中找到一条从起始状态到目标状态的能避开障碍物的最优路径。
机器人路径规划问题可以建模为一个有约束的优化问题,都要完成路径规划、定位和避障等任务。
2 算法理论蚁群算法(Ant Colony Algorithm ,ACA ),最初是由意大利学者Dorigo M. 博士于1991 年首次提出,其本质是一个复杂的智能系统,且具有较强的鲁棒性,优良的分布式计算机制等优点。
该算法经过十多年的发展,已被广大的科学研究人员应用于各种问题的研究,如旅行商问题,二次规划问题,生产调度问题等。
但是算法本身性能的评价等算法理论研究方面进展较慢。
Dorigo 提出了精英蚁群模型(EAS ),在这一模型中信息素更新按照得到当前最优解的蚂蚁所构造的解来进行,但这样的策略往往使进化变得缓慢,并不能取得较好的效果。
次年Dorigo 博士给出改进模型(ACS ),文中改进了转移概率模型,并且应用了全局搜索与局部搜索策略,来得进行深度搜索。
Stützle 与Hoos 给出了最大-最小蚂蚁系统(MAX-MINAS ),所谓最大-最小即是为信息素设定上限与下限,设定上限避免搜索陷入局部最优,设定下限鼓励深度搜索。
蚂蚁作为一个生物个体其自身的能力是十分有限的,比如蚂蚁个体是没有视觉的,蚂蚁自身体积又是那么渺小,但是由这些能力有限的蚂蚁组成的蚁群却可以做出超越个体蚂蚁能力的超常行为。
蚂蚁没有视觉却可以寻觅食物,蚂蚁体积渺小而蚁群却可以搬运比它们个体大十倍甚至百倍的昆虫。
这些都说明蚂蚁群体内部的某种机制使得它们具有了群体智能,可以做到蚂蚁个体无法实现的事情。
经过生物学家的长时间观察发现,蚂蚁是通过分泌于空间中的信息素进行信息交流,进而实现群体行为的。
TSP问题遗传算法通用Matlab程序程序一:主程序%TSP问题(又名:旅行商问题,货郎担问题)遗传算法通用matlab程序%D是距离矩阵,n为种群个数%参数a是中国31个城市的坐标%C为停止代数,遗传到第 C代时程序停止,C的具体取值视问题的规模和耗费的时间而定%m为适应值归一化淘汰加速指数,最好取为1,2,3,4,不宜太大%alpha为淘汰保护指数,可取为0~1之间任意小数,取1时关闭保护功能,建议取0.8~1.0之间的值%R为最短路径,Rlength为路径长度function [R,Rlength]=geneticTSP(D,a,n,C,m,alpha)[N,NN]=size(D);farm=zeros(n,N);%用于存储种群for i=1:nfarm(i,:)=randperm(N);%随机生成初始种群endR=farm(1,:);subplot(1,3,1)scatter(a(:,1),a(:,2),'x')pause(1)subplot(1,3,2)plotaiwa(a,R)pause(1)farm(1,:)=R;len=zeros(n,1);%存储路径长度fitness=zeros(n,1);%存储归一化适应值counter=0;while counter for i=1:nlen(i,1)=myLength(D,farm(i,:));%计算路径长度endmaxlen=max(len);minlen=min(len);fitness=fit(len,m,maxlen,minlen);%计算归一化适应值rr=find(len==minlen);R=farm(rr(1,1),:);%更新最短路径FARM=farm;%优胜劣汰,nn记录了复制的个数nn=0;for i=1:nif fitness(i,1)>=alpha*randnn=nn+1;FARM(nn,:)=farm(i,:);endendFARM=FARM(1:nn,:);[aa,bb]=size(FARM);%交叉和变异while aa if nn<=2nnper=randperm(2);elsennper=randperm(nn);endA=FARM(nnper(1),:);B=FARM(nnper(2),:);[A,B]=intercross(A,B);FARM=[FARM;A;B];[aa,bb]=size(FARM);endif aa>nFARM=FARM(1:n,:);%保持种群规模为nendfarm=FARM;clear FARMcounter=counter+1endRlength=myLength(D,R);subplot(1,3,3)plotaiwa(a,R)程序二:计算邻接矩阵%输入参数a是中国31个城市的坐标%输出参数D是无向图的赋权邻接矩阵function D=ff01(a)[c,d]=size(a);D=zeros(c,c);for i=1:cfor j=i:cbb=(a(i,1)-a(j,1)).^2+(a(i,2)-a(j,2)).^2;D(i,j)=bb^(0.5);D(j,i)=D(i,j);endend程序三:计算归一化适应值%计算归一化适应值的子程序function fitness=fit(len,m,maxlen,minlen)fitness=len;for i=1:length(len)fitness(i,1)=(1-((len(i,1)-minlen)/(maxlen-minlen+0.0001))).^m;end程序四:交叉和变异的子程序%交叉算法采用的是由Goldberg和Lingle于1985年提出的PMX(部分匹配交叉) function [a,b]=intercross(a,b)L=length(a);if L<=10%确定交叉宽度W=9;elseif ((L/10)-floor(L/10))>=rand&&L>10W=ceil(L/10)+8;elseW=floor(L/10)+8;endp=unidrnd(L-W+1);%随机选择交叉范围,从p到p+Wfor i=1:W%交叉x=find(a==b(1,p+i-1));y=find(b==a(1,p+i-1));[a(1,p+i-1),b(1,p+i-1)]=exchange(a(1,p+i-1),b(1,p+i-1)); [a(1,x),b(1,y)]=exchange(a(1,x),b(1,y));endfunction [x,y]=exchange(x,y)temp=x;x=y;y=temp;程序五: 计算路径的子程序%该路径长度是一个闭合的路径的长度function len=myLength(D,p)[N,NN]=size(D);len=D(p(1,N),p(1,1));for i=1:(N-1)len=len+D(p(1,i),p(1,i+1));end程序六:用于绘制路径示意图的程序function plotaiwa(a,R)scatter(a(:,1),a(:,2),'x')hold onplot([a(R(1),1),a(R(31),1)],[a(R(1),2),a(R(31),2)])hold onfor i=2:length(R)x0=a(R(i-1),1);y0=a(R(i-1),2);x1=a(R(i),1);y1=a(R(i),2);xx=[x0,x1];yy=[y0,y1]; plot(xx,yy) hold onend。
- -- - . -word资料- 摘 要:旅行商问题的传统求解方法是遗传算法,但此算法收敛速度慢,并不能获得问题的最优化解。蚁群算法是受自然界中蚁群搜索食物行为启发而提出的一种智能优化算法,通过介绍蚁群觅食过程中基于信息素的最短路径的搜索策略,给出基于MATLAB的蚁群算法在旅行商问题中的应用,对问题求解进行局部优化。经过计算机仿真结果表明,这种蚁群算法对求解旅行商问题有较好的改进效果。 关键词:蚁群算法;旅行商问题;MATLAB;优化
一、意义和目标 旅行商问题是物流领域中的典型问题,它的求解具有十分重要的理论和现实意义。采用一定的物流配送方式,可以大大节省人力物力,完善整个物流系统。 已被广泛采用的遗传算法是旅行商问题的传统求解方法,但遗传算法收敛速度慢,具有一定的缺陷。本文采用蚁群算法,充分利用蚁群算法的智能性,求解旅行商问题,并进行实例仿真。进行仿真计算的目标是,该算法能够获得旅行商问题的优化结果,平均距离和最短距离。 二、国内外研究现状 仿生学出现于20世纪50年代中期,人们从生物进化机理中受到启发,提出了遗传算法、进化规划、进化策略等许多用以解决复杂优化问题的新方法。这些以生物特性为基础的演化算法的发展及对生物群落行为的发现引导研究人员进一步开展了对生物社会性的研究,从而出现了基于群智能理论的蚁群算法,并掀起了一股研究的热潮。 20世纪90年代意大利科学家M.Dorigo M最早提出了蚁群优化算法——蚂- -- - . -word资料- 蚁系统(Ant system, AS),在求解二次分配、图着色问题、车辆调度、集成电路设计以及通信网络负载问题的处理中都取得了较好的结果。 旅行商问题(TSP, Traveling Salesman Problem)被认为是一个基本问题,是在1859年由威廉·汉密尔顿爵士首次提出的。所谓TSP问题是指:有N个城市,要求旅行商到达每个城市各一次,且仅一次,并回到起点,且要求旅行路线最短。这是一个典型的优化问题,对一个具有中等顶点规模的图来说,精确求解也是很复杂的,计算量随着城市个数的增加而呈指数级增长,即属于所谓的 NP问题。TSP在工程领域有着广泛的应用 ,并常作为比较算法性能的标志。如网络通讯、货物运输、电气布线、管道铺设、加工调度、专家系统、柔性制造系统等方面, 都是TSP广泛应用的领域。求解算法包括贪婪法(GM)、极小代数法(MA)、模拟退火法(SA)和遗传算法(GA)等。而应用蚁群算法求解旅行商问题是近年来研究的新方向,由于其并行性与分布性,特别适用于大规模启发式搜索,实验结果证明了其可行性和有效性。 三、蚁群系统基本原理 在蚂蚁群找到食物时,它们总能找到一条从食物到巢穴之间的最优路径。这是因为蚂蚁在寻找路径时会在路径上释放出一种特殊的信息素(phero-mone)。当它们碰到一个还没有走过的路口时,就随机地挑选一条路径前行。与此同时释放出与路径长度有关的信息素。路径越长,释放的激素浓度越低。当后来的蚂蚁再次碰到这个路口的时候,选择激素浓度较高路径概率就会相对较大。这样形成了一个正反馈。最优路径上的激素浓度越来越大,而其它的路径上激素浓度却会随着时间的流逝而消减。最终整个蚁群会找出最优路径。在整个寻径过程中,虽然单个蚂蚁的选择能力有限,但是通过激素的作用,整个蚁群之间交换着路径信- -- - . -word资料- 息,最终找出最优路径。 四、基于MATLAB的蚁群算法求解旅行商问题 TSP问题描述如下: 设有n个城市C=(1,2,...,n),任意两个城市i,j之间的距离为dij
,求一
条经过每个城市的路径π=(π(1),π(2),...,π(n)),使得距离最小。 主要符号说明 C n个城市的坐标,n×2的矩阵 NC_max 最大迭代次数 m 蚂蚁个数 Alpha 表征信息素重要程度的参数 Beta 表征启发式因子重要程度的参数 Rho 信息素蒸发系数 Q 信息素增加强度系数 R_best 各代最佳路线 L_best 各代最佳路线的长度 求解TSP问题的蚂蚁算法中,每只蚂蚁是一个独立的用于构造路线的过程,若干蚂蚁过程之间通过自适应的信息素值来交换信息,合作求解,并不断优化。这里的信息素值分布式存储在图中,与各弧相关联。蚂蚁算法求解TSP问题的过程如下: (1)首先初始化,设迭代的次数为NC。初始化NC=0 (2)将m个蚂蚁置于n个顶点上 (3)m只蚂蚁按概率函数选择下一座城市,完成各自的周游 - -- - . -word资料- 每个蚂蚁按照状态变化规则逐步地构造一个解,即生成一条回路。蚂蚁的任务是访问所有的城市后返回到起点,生成一条回路。设蚂蚁k当前所在的顶点为i,那么,蚂蚁k由点i向点j移动要遵循规则而不断迁移,按不同概率来选择下一点。 (4)记录本次迭代最佳路线 (5)全局更新信息素值 应用全局信息素更新规则来改变信息素值。当所有m个蚂蚁生成了m个解,其中有一条最短路径是本代最优解,将属于这条路线上的所有弧相关联的信息素值进行更新。 全局信息素更新的目的是在最短路线上注入额外的信息素,即只有属于最短路线的弧上的信息素才能得到加强,这是一个正反馈的过程,也是一个强化学习的过程。在图中各弧上,伴随着信息素的挥发,全局最短路线上各弧的信息素值得到增加。 (6)终止 若终止条件满足,则结束;否则NC=NC+1,转入步骤(2)进行下一代进化。终止条件可指定进化的代数,也可限定运行时间,或设定最短路长的下限。 (7)输出结果 - --
- . -word资料- 五、数据实验及结果 通过计算机仿真,得出旅行商问题优化结果和平均距离和最短距离,如图所示: - --
- . -word资料- 六、分析与总结 本文设计了一种基于MATLAB实现的蚁群算法,用以求解组合优化难题中的典型代表旅行商问题。对30个城市旅行商问题进行了测试,所得结果能达到优化作用,实现了本文的研究目标。 经过对旅行商问题的深入理解,得到了能解决问题的基本数学模型,然后设计算法的基本思想,技术路线,最后编码。在多次调试,修改后,本算法成功运行,并实现了最初的设定目标。另外,MATLAB具有丰富的绘图函数,对于绘图十分方便,这是选择MATLAB解决TSP问题的算法编写、调试的原因。 蚁群算法研究处于初期,还有许多问题值得研究,如算法的参数选择、蚂蚁数的比例等只能通过仿真实验,无法给出理论指导。 - --
- . -word资料- 附 录: 蚁群算法解决旅行商问题MATLAB程序 function yy=ACATSP x=[41 37 54 25 7 2 68 71 54 83 64 18 22 83 91 25 24 58 71 74 87 18 13 82 62 58 45 41 44 4]'; y=[94 84 67 62 64 99 58 44 62 69 60 54 60 46 38 38 42 69 71 78 76 40 40 7 32 35 21 26 35 50]'; C=[x y]; NC_max=50; m=30; Alpha=1.5; Beta=2; Rho=0.1; Q=10^6; %%------------------------------------------------------------------------- %% 主要符号说明 %% C n个城市的坐标,n×2的矩阵 %% NC_max 最大迭代次数 %% m 蚂蚁个数 %% Alpha 表征信息素重要程度的参数 %% Beta 表征启发式因子重要程度的参数 %% Rho 信息素蒸发系数 %% Q 信息素增加强度系数 %% R_best 各代最佳路线 %% L_best 各代最佳路线的长度 %%========================================================================= %%第一步:变量初始化 n=size(C,1);%n表示问题的规模(城市个数) D=zeros(n,n);%D表示完全图的赋权邻接矩阵 for i=1:n for j=1:n if i~=j D(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5; else D(i,j)=eps; %i=j时不计算,应该为0,但后面的启发因子要取倒数,用eps(浮点相对精度)表示 end D(j,i)=D(i,j); %对称矩阵 end end - -- - . -word资料- Eta=1./D; %Eta为启发因子,这里设为距离的倒数 Tau=ones(n,n); %Tau为信息素矩阵 Tabu=zeros(m,n); %存储并记录路径的生成 NC=1; %迭代计数器,记录迭代次数 R_best=zeros(NC_max,n); %各代最佳路线 L_best=inf.*ones(NC_max,1); %各代最佳路线的长度 L_ave=zeros(NC_max,1); %各代路线的平均长度 while NC<=NC_max %停止条件之一:达到最大迭代次数,停止 %%第二步:将m只蚂蚁放到n个城市上 Randpos=[]; %随即存取 for i=1:(ceil(m/n)) Randpos=[Randpos,randperm(n)]; end Tabu(:,1)=(Randpos(1,1:m))'; %%第三步:m只蚂蚁按概率函数选择下一座城市,完成各自的周游 for j=2:n %所在城市不计算 for i=1:m visited=Tabu(i,1:(j-1)); %记录已访问的城市,避免重复访问 J=zeros(1,(n-j+1)); %待访问的城市 P=J; %待访问城市的选择概率分布 Jc=1; for k=1:n if length(find(visited==k))==0 %开始时置0 J(Jc)=k; Jc=Jc+1; %访问的城市个数自加1 end end %下面计算待选城市的概率分布 for k=1:length(J) P(k)=(Tau(visited(end),J(k))^Alpha)*(Eta(visited(end),J(k))^Beta); end P=P/(sum(P)); %按概率原则选取下一个城市 Pcum=cumsum(P); %cumsum,元素累加即求和 Select=find(Pcum>=rand); %若计算的概率大于原来的就选择这条路线 to_visit=J(Select(1)); Tabu(i,j)=to_visit; end end if NC>=2 Tabu(1,:)=R_best(NC-1,:); end %%第四步:记录本次迭代最佳路线 L=zeros(m,1); %开始距离为0,m*1的列向量