《本科毕业论文》

 

 
   

 

 

 

 

 毕业论文

(本 科 生)

论文题目(中文) 基于蚂蚁算法的路由选择仿真模拟                                      论文题目(外文) Simulation of routing based on Ant

algorithm

学  生  姓  名        牛维强    

导师姓名、职称        袁永娜  讲师

学生所属学院        信息科学与工程学院

专          业        计算机科学与技术

年          级         2014级

 

 

兰州大学教务处

 

诚信责任书

本人郑重声明:本人所呈交的毕业论文(设计),是在导师的指导下独立进行研究所取得的成果。毕业论文(设计)中凡引用他人已经发表或未发表的成果、数据、观点等,均已明确注明出处。除文中已经注明引用的内容外,不包含任何其他个人或集体已经发表或在网上发表的论文。

本声明的法律责任由本人承担。

论文作者签名:                                日  期:

关于毕业论文(设计)使用授权的声明

本人在导师指导下所完成的论文及相关的职务作品,知识产权归属兰州大学。本人完全了解兰州大学有关保存、使用毕业论文的规定,同意学校保存或向国家有关部门或机构送交论文的纸质版和电子版,允许论文被查阅和借阅;本人授权兰州大学可以将本毕业论文的全部或部分内容编入有关数据库进行检索,可以采用任何复制手段保存和汇编本毕业论文。本人离校后发表、使用毕业论文或与该论文直接相关的学术论文或成果时,第一署名单位仍然为兰州大学。

本毕业论文研究内容:

□可以公开

□不宜公开,已在学位办公室办理保密申请,解密后适用本授权书。

(请在以上选项内选择其中一项打“√”)

论文作者签名:                         导师签名:

日        期:                         日    期:

基于蚂蚁算法的路由选择仿真模拟

摘 要

本论文主要讲述了现代网络技术中的网络路由选择借助蚂蚁算法来寻找最短路径及其过程的模拟。蚂蚁算法自1992年问世以来,就被全世界各地的专家学者们所青睐,在glgoo里输入关键词“蚂蚁算法”,从1990年开始的就有9890条结果,2017年至今,就有414篇文章与它有关,2018年开年就有28篇文章关于它的研究和应用。从知网来看,在刚刚过去的2017年还有51篇文章是关于蚂蚁算法的。分析过去的接近二十年的时间里,我们可以发现,蚂蚁算法在计算机软件及计算机应用,自动化技术,互联网技术,电信技术,数学,公路与水路运输,电力工业,航空航天工程,工业设备,地质学,船舶工业,农业经济,生物学,化工,交通运输经济,轻工业手工业,贸易,资源科学等学科和领域都有很广泛的应用。本文讲述了蚂蚁算法在网络技术方面的一个应用,首先分析了传统蚁群算法原理,还有网络技术中路由选择的原理和存在的一些问题,然后产生了蚂蚁算法在路由选择情景中的模拟应用模型。之后用计算机图形学的思维进行可视化的模拟和呈现出来,在模拟过程中,分析、设计模拟平台的功能与基本内容,用JAVA小程序实现了动态模拟过程,接着对模拟的结果进行分析,最后对于蚂蚁算法在未来科技中的发展进行了丰富展望。

关键词: 蚁群算法;信息素;可视化;模拟系统;路由选择;Java小程序

SIMULATION OF ROUTING BASED ON ANT ALGORITHM

Abstract

This thesis mainly describes the network routing in modern network technology. Ant algorithm is used to find the shortest path and the simulation of its process. Since its inception in 1992, ant algorithm has been favored by experts and scholars all over the world. The key word "ant algorithm" has been inputted into glgoo. Since 1990, there have been 9890 results, and in 2017, here are 414 articles about it and 28 articles about its research and application in 2018. There were 51 other articles on ant algorithms in 2017 though. Some network aspects researchers are working hard on study and analyze over the past two decades, ant algorithms have a very wide range of applications in computer software and computer applications, automation technology, Internet technology, telecommunications technology, mathematics, Road and waterway transport, power industry, aerospace engineering, industrial equipment, geology, ship industry, agricultural economy, biology, chemical industry, transportation economy, light industry handicraft industry, trade, Resources science and other disciplines and fields. In this thesis, an application of ant algorithm in network technology is studied. Firstly, the theory of traditional ant colony algorithm and route selection in network technology is analyzed. Then the simulation application model of ant algorithm in routing scenario is presented. In the process of simulation, the functions and basic contents of the simulation platform are analyzed and designed, and the dynamic simulation process is realized with Java applet. Finally the simulation results are analyzed and the development of ant algorithm in the future science and technology is prospected.

Key words: ant colony algorithm; pheromone; simulation; routing selection; applet

 

 

前 言 6

第1章  绪 论 7

1.1 研究意义 7

1.2 蚂蚁算法的研究进展 7

第2章 网络路由选择原理 9

2.1 路由选择的意义 9

2.1.1 路由选择技术的组成 9

2.1.2 路由算法设计目标 9

2.1.3 路由算法的分类 9

2.2. 经典路由算法 10

2.2.1 Dijkstra算法 10

2.2.2 最短路径算法的不足 10

第3章 蚁群算法基本原理 12

第4章 平台开发工具 15

4.1 软件环境 15

4.2 其他资料 15

4.3 Java 特性 15

4.3.1 简单 15

4.3.2 面向对象 15

4.3.3 跨平台 16

4.3.4 支持分布式的网络应用 16

第5章 系统功能结构 17

5.1 系统的总体结构图 17

5.2 蚂蚁算法步骤 17

第6章 系统的实现 21

6.1 蚁群算法模拟的实现结果 21

第7章 算法的不足和思考 25

7.1 算法的不足 25

7.2 蚂蚁算法的部分展望 26

结束语 27

参考文献 28

致  谢 29

论文(设计)成绩 30

 

大自然才是真正的最伟大的创造者和发明家,是人类的创造力的丰富资源。人类认识事物的能力本质上就是来源于和自然的相互作用过程中的。生物和自然通过自身的演化过程磨合产生了完美的“自然算法”。

最近几年,信息技术领域的科技发展一如既往的飞速发展,目前在计算机领域比较热门的技术就是人工智能,大数据,云计算,在人工只能领域里有一个很重要的方向就是机器学习,机器学习很多的方法和模型,其中遗传算法作为仿生算法在实际应用中取得了很大的成果,那么在本篇论文当中我们提到另外一个仿生优化算法——蚂蚁算法。生物学家们长期观察蚂蚁群体发现,虽然每个蚂蚁本身的行为极其简单,但由众多简单的个体所组成的大的群体却能够表现出令人惊讶的活动。后来的研究发现,蚂蚁是通过信息素进行信息传递的。蚂蚁在运动过程中,会在路途上留下该物质,蚂蚁他们自己可以感知到它,然后蚂蚁会根据这种信息指导接下来的运动策略。在蚂蚁群体中运动有这样一种规律,如果某个路径上走的蚂蚁越多,那么其他的蚂蚁选择走该路概率会越大.蚂蚁之间是通过这种信息交流从而找到它们的目标物,这种信息交换是正反馈性质的。本文就是讨论模拟蚂蚁的这种活动规律,虽然模拟蚂蚁是人工蚂蚁,但是它和真实的蚂蚁都存在一个群体中个体相互交流通信的机制,都会完成一个相同的任务,都会借助当前信息进行路径的选择。这种机制和网络技术中的路由选择很类似,因而我们把这种机制运用到网络的路由选择算法当中。然后用可视化技术模拟,使之很形象的表现出来,通过可视化技术,不仅增强了科研展示的更好的效果,而且增加了趣味性。

随着人工智能时代的到来,蚂蚁算法未来会与其他的智能算法进行大量的结合,比如遗传算法,人工神经网络,情感计算等。比如,在无人车研究方面,蚂蚁用无线外激素网络来确保他们个体之间不会相互碰撞,不管多少蚂蚁,它们总是可以保持一种相对恒定的速度和状态。科学家已经将这些行为融入到了无人驾驶人工智能算法当中,我们期待这未来更加智能的时代。

第1章   

1.1 研究意义

自从人类历史进入到信息科技时代,我们每天的生活无时无刻都在被现代科技影响着,改变着。网络,作为信息科技的重要产物之一,已经每时每刻在参与到我们现代人的生活中。历史上因特网的真正的诞生,是1969年12月,美国建立的ARPA网。其实,计算机网络系统比较复杂,用的是分层网络技术。因为期初的各个机构的分层网络系统体系结构有不同的标准,这给网络的发展和应用造成很多的阻碍,后来国际标准化组织ISO在1984年颁布了“开放系统互连基本参考模型”OSI国际标准,由底向上是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。

路由选择是分级层次里的网络层的协议。网络层路由选择协议一般而言都是基于典型的两种分布式算法,分别是距离向量路由算法和链路状态路由算法。

蚂蚁算法是人们根据自然界中的蚂蚁的群体活动规律的认知而抽象出来的一种特殊的具有自适应性的目标搜索算法,这种算法相比于传统的搜索算法具有稳定性高,并行性强,更加智能化的优点,所以科学家引入蚂蚁算法在网络路由选择里应用。蚂蚁算法利用蚂蚁寻路中增强信息素的强度进行路径优化的方式进行搜索目标物,然后本论文就是首先用蚂蚁算法找到最短路径,然后直接成为路由选择的最短路径。本论文重点在把这种寻找最短路径的过程动态呈现出来,更能直观的感受和观察寻找最短路径的过程,增加研究的趣味性和即视感。

1.2 蚂蚁算法的研究进展

其实早在20世纪50年代,仿生学家就根据自然的智慧提出了遗传算法,用进化策略来进行解决复杂的优化问题,然后引起的群体智能理论在一段时间内很火,1992年,dorigo M等人提出了蚂蚁系统(Ant system)用来解决旅行商问题(TSP),在1996年后,蚂蚁算法才慢慢得到全世界学者的重视,并在各个领域开始应用。1997年德国的学者Stutzle和Hoos H提出最大最小蚂蚁系统,对AS系统进行了改进,很具有历史意义和典型性。从1998年开始,在比利时的布鲁塞尔每2年举行届ANTS国际学术会议。

国内的研究蚂蚁算法及其应用比较晚点,开始于1998年末。从公开发表的相关论文(以投稿日期为标准)库来讲的话,国内最先研究蚂蚁算法的是东北大学控制仿真研究中心的张纪会博士与旭心教授(1997年10月)。近几年,邱秀娟等学者利用伪随机比例改进了蚂蚁算法,赵立东在蚂蚁算法里融入了遗产算法,加快了算法的收敛速度。

进入21世纪的最近十几年,国际著名顶级学术刊物《Nature》多次对蚂蚁算法的研究成果进行过报道,我们可以从中发现,蚂蚁算法的研究已经从起初的TSP领域渗透大到了其他的各种智能领域和场景,由解决一维静态优化问题到解决多维动态组合优化问题,由离散域范围扩展到了连续域范围。蚂蚁算法的可视化模拟工作更加具有工程性,实践性,理论性要求并不是很高。作为本科生,因此我选择进行蚂蚁算法的可视化模拟作为我毕业设计的主要内容。

2网络路由选择原理

2.1 路由选择的意义  

因特网其实是TCP/IP网络,目前世界上最大的网就是TCP/IP网络。

路由选择是网络运作的核心和关键,合理而高效的路由选择不仅要保障全网的正常运行,而且要有高的网络的接通率。

路由技术是随着网络技术的发展而来的,在早期的ISO/ OSI 体系结构中,路由属于网络层,路由选择是分组交换系统里一个重要阶段,是为通往特定节点的数据包找到最短路径。路由选择的规则就是路由算法,路由算法要么运行在网络主机上,要么运行在专用的路由设备上,比如路由器。

间接路由有三类:静态路由,默认路由,动态路由,应用最广泛和最复杂的且具有研究意义的就是动态路由。网络路由是由路由表来存储信息的,网络中最常用的是用以下两种路由算法来维护其路由选择表,它们分别是:距离向量路由算法,链路状态路由算法。

2.1.1 路由选择技术的组成

路由技术主要包括确定最佳路径和传输数据包这两个部分,信包的传递叫做交换,交换过程简单,而路径的选择过程复杂,所以我们往往重点关注路径选择的过程。

2.1.2 路由算法设计目标

(1) 最佳路径

算法必须有寻找最佳路径的能力,最佳路径取决于相对应的衡量标准

(2) 简单

要求算法简单,节省开支,减少时延,用节点上最少的运行资源

(3) 稳定

算法必须是稳定。在遇到特殊情况时,算法能够稳定地运行。

(4)自适应

路由算法要有适应能力,当网络环境发生变化的时候,能够较快的新的环境

中运作。还需能适应网络带宽,网络延迟等变化。

2.1.3 路由算法的分类

1.分层路由选择算法类

将通信网络中的各子网首先划分为几个区,每个节点只在本区内进行路由选择,然后把各区的结果再联合统一起来即可。

  1. 分布式路由选择算法类

网络中的每个节点要定期的与其相邻节点交互信息,每个节点都需要存储一张路由选择表,然后不断的更新路由选择表。典型代表有:距离向量路由算法和链路状态算法。

3.集中式路由选择算法类

首先设置一个路由选择控制中心,每个节点要定期地向控制中心发送各自的状态信息。

4.孤立式路由选择算法类

节点决定分组路由时,仅仅是依据节点本身的信息而不会与其他节点有任何交互。

5.扩展式路由选择算法类

又称之为宏泛式算法,当节点收到不是发给自己的分组时,会复制若干个副本发给自己相邻的节点。这样肯定会有一个路径到达目标节点,但是这样的策略有点资源浪费,不利于大流量的情况。

2.2. 经典路由算法

2.2.1 Dijkstra算法

在1959 年提出的,该算法的结果就是始点到各顶点的最短路径。

Dijkstra 算法的步骤一般如下:

第一步:需要初始化V={1 2 N} S = {F} D [I ] = L[F I ] Y[ I ] = F 其中I=1,2 ,…N 。

F 表示路径的始点,I 表示某一顶点N 表示网络中所有顶点的数目,V 是所有顶点的集合L[F I]表示从F 点到I 点的距离S 是顶点的集合,D N 个元素的数组用来存储顶点F 到其它顶点的最短距离,Y N 个元素的数组用来存储最短路径中在顶点I 之前经过的最近顶点。

第二步:从V S 集合中找一个顶点T 使得D[T] 是最小值并将T 加入到S 集合中如果V S 是空集合则结束运算

第三步:调整Y D 数组中的值在V S 集合中对于顶点T 的邻接各顶点I 如果D[I ]> D[T]+L[I T] 那么令Y[I]=T D[I] = D[T]+L[I T]

重复执行第二步,直到程序结束。

2.2.2 最短路径算法的不足

该算法的数据结构实现起来比较复杂,当网络拓扑结构比较复杂的时候,其实就已经难以对付。主要表现在如下方面:

(1)数据结构中复杂网络是用图来表示的,图的存储表示一般是无向图,用邻接矩阵和十字链表表示,复杂网络图的存储消费太多空间。

(2) 算法时间长,当遇到复杂网络结构时,Dijkstra 算法来计算路径时间花费很长。

(3)遇到的复杂的网络结构运行效率大大降低。

3章 蚁群算法基本原理

3.1 蚂蚁算法的产生

蚂蚁是大自然最为常见的一种昆虫,地球上除了在南极洲外的其他地方都有它的存在,它形体小,但是具有群体社会性,央视《自然传奇》蚂蚁帝国里讲到,当蚂蚁联合起来时候,个体就会消失,群体就会变成一个存在的整体,由原先的小小的个体变成一只巨大的野兽。随着近代仿生学的发展,这种似乎微不足道的小东西越来越多地受到学者们的关注,1992年Marco Dorigo这位博士生首次公布了这个提法,在此基础上一个很好的优化算法逐渐发展起来。

3.2 蚂蚁算法的思想

蚂蚁算法具有并行性,这种并行,就是所有不同方向在同时探索,不同方向的扫描的深度和速度并不一样,是阶梯式的层次化的,会根据状态的信息不断重新计算。它是过程导向的而不是结果导向的算法,从微观上看,他很简单,但和一般的算法又有区别:

第一,它是全方位的扫描,每个角度都有蚂蚁在搜寻食物,不带主观偏见的。

第二,因为它是全方位的,所以蚁群这个复杂系统里,就会与各种机会横向比较,比较之后才会选择最好的机会,这个比较不断微调的。

第三,这种算法具有稳定性,也不存在过度用杠杆的问题的可能性。所以某个方向的蚁群遇到意想不到的灾害时,总有其它方向的蚂蚁可以备用。

3.3 蚁群算法原理

信息素可以被其他的蚂蚁感知到,然后继续不断的感知递推,自然地当之前的蚂蚁留下的信息素和后来的蚂蚁的信息素重合的时候,信息素形成一种叠加的效果,并循环下去。这样,经过蚂蚁越多的位置,后面的蚂蚁就会越多的去走,在一段时间内,那些被识别为短的路径会被更大概率地访问,积累的信息素也就越多,在下一个时间段内被其他的蚂蚁选择走的可能性就越大。持续一段时间后,蚂蚁就会都走那条最短路径,这就是具有正反馈效应的蚂蚁搜索法。(如图)

图1中有一条蚂蚁经过的路径,其中a是食物,e是巢穴,如图1 a)所示。当蚂蚁遇到障碍物,从e点到a点的是蚂蚁的目标原则路线,但是在d点遇到了障碍物,出现了分叉路口,每只蚂蚁就必须在d点做出向左还是向右的决策。当返回的时候,从a点到e点的蚂蚁也必须在b点做出向哪边走的决定。具体的选择概率是会受到信息素的影响。如果向右的路径上的信息素量大,则选择向右走的概率大。需要注意的是,刚开始时候,对障碍出现后第一个到达b点或d点的蚂蚁而言,此时因为没有信息素的存在,所以它们的选择是任意的,如图1 b)所示。本文我们以从e点到a点也就是去找食物的这一过程的蚂蚁活动举例说明原理,对于从a 点到e点的返回过程的蚂蚁活动而言规律是一致的。从图中我们显然看见,路径d-h-b是比路径d-c-b要短,我们假定的每只蚂蚁的运动速度是一定的也是相同的,不会出现时而快时而慢的情况,这样的话,选择d-h-b路径的第一只蚂蚁肯定要比选择d-c-b的第一只蚂蚁早到达b点。此时,从d点向b点看,指向路径d-h-b的信息素量要比指向路径d-c-b的信息素大。因此从下一时刻开始,从e点经d点达到a点的蚂蚁选择d-h-b路径比选择d-c-b路径的概率要大得多。从而使路径d-h-b(或b-h-d)信息素与路径d-c-b(或b-c-d)上的信息素量的差变大。信息素量差大直观的表现出来就是选择路径d-h-b(或b-h-d)路径的蚂蚁进一步增加,越来越多的蚂蚁走d-h-b路线,最终d-c-b路线几乎不会出现蚂蚁的踪迹。

我们如何模拟蚂蚁算法呢?首先,你要让蚂蚁能够避开障碍物,其次,要让蚂蚁找到食物,就要遍历空间上的所有点;再次,如果要让蚂蚁找到最短的路径,那么需要计算所有可能的路径并且比较它们的大小。
  实现这些功能,虽然看起来很复杂,但是把它分解分析,其实还是比较简单的,因为我们模拟的是简单的原理。每只蚂蚁感知和相应的是很小范围内的眼前的局部信息,根据这些局部信息利用几条简单的规则进行决策和响应,然而,在蚁群这个大型的群体里,复杂性的行为就会奇妙地凸现出来。其简单规则可以概括为以下几个大的方面:

1.范围:
  蚂蚁活动的范围是方形的空间,蚂蚁的速度半径VR(一般是3),也就是说它可以感知和活动的范围是VR*VR整个方形区域。
2.环境:
   模拟虚拟界面,里面有蚂蚁,障碍物,窝,食物。另外有信息素(信息素存活时间有一定限度,是具有生命周期的)
3.觅食规则:
  每个蚂蚁感知自身一定的小范围内(这种小范围精度很小,人肉眼是无法感知的)是否有目标物的存在,如果有,当然是最好的情况,就直接到达。如果没有就看信息素,看哪个信息素多就走哪儿。回窝的过程和上面的一样,不过信息素变成了窝方向信息素。

4.移动规则:
  每只蚂蚁都朝向信息素最多的方向移,当自己附近没有信息素时,蚂蚁具有运动的惯性, 和随机性,允许一定的方向错误,这样它单个的运动既有目的性,又有随机性。为防止蚂蚁原地踏步,要标记已经走过的点,如果发现要走的下一点已经在最近走过了,会尽量避开。
5.避障规则:
  当蚂蚁运动过程中遇到障碍物了,就会马上随机产生新的方位前行,而此时如果还感知到了信息素的话,其接下来的运动方位还会受到信息素的引导因素。

6.播撒信息素规则:
  每只蚂蚁在刚找到食物或者窝的时候会释放一定的信息素,但是信息素的生命周期时有时间限定的,当过了一段时间后就会消失。体现在直观的观察者感受就是当蚂蚁远离目标物的时候,我们看到随着逐渐远离,信息素是越来越少的。

遵循以上这些规则,我们其实已经发现,蚂蚁之间不会有直接的交互,但是通过环境其实在进行间接的交互,整个模拟系统里的元素形成了一个整体,稳定运行,达到了真实蚂蚁的活动原理一致的效果。

4平台开发工具

4.1 软件环境

装有JDK的JAVA环境的个人计算机,并且设置好了classpath环境变量,安装有eclipse即可。

4.2 其他资料

《Java面向对象编程》孙卫琴,电子工业出版社.

《Java程序员教程》Paul J.deitel

Deitel &associates,inc.

Harvey  M.deitel

Deitel &associates,inc.著,

电子工业出版社.

《Java面向对象程序设计》马俊 范枚编著.清华大学出版社.

《Java与模式》.阎宏.电子工业出版社.

4.3 Java 特性

4.3.1 简单

(1) 舍弃C++的不足之处和一些不用的冗杂功能, 例如操作符过载、多级继承性和各种自动强制性等。

(2) 增加了自动垃圾回收机制, 使程序员在开发过程中不考虑存储器管理,减少编程错误的发生率,大大提高编程效率。

(3) 减小程序规模, 提出了小应用程序applet

4.3.2 面向对象

Java 是面向对象的, 而C++是强制面向对象语言,在Java 语言中, 除了原始数据类型外, 其余的成分均属Java 的对象,Java支持静态和动态风格的代码重用。

4.3.3 跨平台

Java 是一种解释执行语言, 运行在Java 虚拟机上的, 而虚拟机是独立于硬件的, 只要装有虚拟机的平台都可以运行Java程序。除上述优点以外, Java 有多线程动态性。

4.3.4 支持分布式的网络应用

Java核心类库包括一个支持HTTP,SMTP,FTP等基于TCP/IP协议的类库,Java程序可以用URL打开和访问网络对象。在网络应用中,Java堪称完美。

5系统功能结构

5.1 系统的总体结构图

5.2 蚂蚁算法步骤

第一步:首先看蚂蚁是否找到了目标点(在还没有找到食物时,目标点是食物,找到食物后,目标点换成窝)

实现代码:

        if(Judged==false){

if(JudgeEnd()){

//看蚂蚁是否到了目标点,如果到了,则退出该函数

Judged=true;

return;  }

}

第二步:计算蚂蚁主方向,当没有信息素做指导的时蚂蚁默认主方向运动

 

 

第三步:搜索周围信息,包括信息素信息,障碍物信息

 

6章 系统的实现

6.1 蚁群算法模拟的实现结果

程序执行结果图:

程序运行说明

浅蓝色点是食物,黄点是窝,雾状点是蚂蚁信息素,红点是障碍物,白点代表蚂蚁(该截图中是因为程序还没有开始执行,所以就暂时无白色点)。另外,我们可以按设置更改算法的变量。

预期的结果
    蚂蚁各自相互独立的在找食物。当某一只找到食物以后,便会释放信息素,让其他同伴能够感知,每个蚂蚁都这样做,那么越来越多的蚂蚁会找到食物。当某个蚂蚁意外的走出新路,如果新的路径比原来的其他路更短,根据信息素原理,其他蚂蚁就会被吸引到这条更短的路上来。经过一段时间运行,一条最短路径很显然的出现了。

下面是程序运行的部分截图:

上图是刚执行时,白色的蚂蚁从黄窝中出来,按随机分配的方向跑,所以看上去像是个圈。

上图中有只蚂蚁找到了食物,然后将窝作为目标点,回窝,并也留下信息素(蓝色的轨迹)

从上图中发现,其他蚂蚁找到了食物,在回窝路上,根据其他蚂蚁留下的信息素找到了回路。

图中,一只蚂蚁在找到事物回窝中路上,遇到了障碍,因为此时周围也没有其他的信息素,就根据主方向走,若随机变换后的方向上还有障碍物,那蚂蚁就再随机变换方位,直到没有障碍物时候。

在此图中,我们观察那只遇见障碍的蚂蚁(白圈标记),因为在运动中遇到了信息素,所以选择走信息素引导的路径。

上图是程序执行1小时后的截图,信息素有一个特性就是会在释放后保留一段时间。大多数蚂蚁都集中到了一条比较短的明显的路径上,位于这条路径上留下的信息素最多,由于其他的路径不是最优解,走过的蚂蚁比较少,留下的信息素也少。此时,程序运行结果趋于稳定。

7章 算法的不足和思考

7.1 算法的不足

任何事物必然都是两面性,蚂蚁算法有它优良的一面,在面对具体问题的时候当然也不免有些不足。

  1. 仅限于局部最优解。

2. 寻找过程中有停滞现象。当迭代到一定次数后,在某个或些局部最优解附近的小范围内发生了停滞现象。

3. 算法的运行时间长。尽管和其他算法相比,蚁群算法在迭代次数和路径结果上都有一定的优势,但是在寻找最优路径过程中花费的时间还是不太理想,如果遇到大型的网络结构,那么花费的时间会更长,虽然它有时候是比传统最短路径算法先进。

4. 通过不断的测试,我们发现蚂蚁的数目对于算法的运行过程和运行结果都有很大的影响。

实验条件: 其他的参数值都不变

 

 图1 蚂蚁的数量为10                         图2 蚂蚁的数量为50

实验结果说明,蚂蚁数量越多,算法的性能会更好,但是相应的其运行的时间更多。蚂蚁的数量的选择成为算法性能的重要因素。蚁群算法真正的应用于网络路由实践中,还是需要很多的因素需要去研究,本论文只是对通过实验选取一些比较简单的不稳定因素对算法的性能做了简要的分析。另外,蚁群算法中信息素的调整也是一个很重要的因素,这需要更加深入的实验设计和研究。这也是以后关于蚂蚁算法学者们研究的一个方向。还有一点需要说明的是,蚂蚁的活动机制可能还有更加复杂的原理,信息素只是一个因素之一,这些都是后来人需要探索的,去更深入的研究蚂蚁活动的秘密。

7.2 蚂蚁算法部分展望

蚂蚁算法是自然界给予我们的智慧启迪,它既代表了社会组织的历史,也在一定程度上代表了我们人类世界计算机的未来。 它作为拉马克搜索方式之一,当一只蚂蚁在自己的活动中发现了最新的最短路径的时,立马会产生信息素把信息传递给其他的个体蚂蚁,单只蚂蚁的毕生所学就间接地很巧妙转变为蚂蚁群体信息总和的一部分,这样单个蚂蚁把它学习到的知识自然地传播给自己的群体。从而表现出群体惊人的搜索能力。

蚂蚁投入“传播”的信息可以说是很少的,单个个体传播的范围也很小,信号也比较弱。但是将弱传播机制引入“进化”的思想后产生的提法是相当具有有吸引力的,这给我们连接分布式计算机方式带来了很好的解决思路。

随着人工智能时代越来越离我们生活接近,蚂蚁算法未来会与其他的智能算法结合,比如遗传算法,人工神经网络,情感计算等。

蚂蚁算法本身具有并行性,单只蚂蚁在活动中是不受其他蚂蚁的影响,是相互独立的,但是他们之间又是通过信息传递的机制进行交互,从而达到整个状态的稳定。所以说蚂蚁算法应该是以分布式的协同优化计算方式为特征的,在串行计算机上对蚂蚁算法的进行模拟并不能真正的体现出蚂蚁算法并行性要求,蚂蚁算法的模拟研究在未来会借助并行机的实现来进行,而无疑这也将会推进并行机的研究和发展,这会对智能计算机体系结构产生促进作用。正所谓,科学的发展就是在相互的发展中不断成全各个领域,不断螺旋上升的过程。

最近的研究发现,人体免疫系统中的淋巴细胞,在扫描抵御外来病原体时,似乎也是采取类似的算法规律。另外,蚂蚁在群体运动中的导航系统也可以帮助无人机和无人驾驶车辆避免交通事故,可以说,蚂蚁算法在未来的智能时代其前景一定是具有生命力的。

结束语

蚁群算法通过模拟真实蚁群之间相互作用的行为而随机搜索,它与目前其他的比如遗传算法、粒子群算法、模拟退火算法、禁忌算法等启发式算法一样是用来求解组合优化问题时一般考虑的具有启发特性的搜索算法。群体智能领域,蚁群算法是其研究热点之一。这种机制和网络技术中的路由选择很类似,因而我们把这种机制运用到网络的路由选择算法当中。然后用可视化技术模拟,使之很形象的表现出来,通过可视化技术,不仅增强了科研展示的更好的效果,而且增加了趣味性。

本文说明了蚂蚁算法的原理,研究现状,网络路由的原理和技术,模拟平台的设计,模拟的结果分析,以及最后的对这一研究领域的未来展望。

通过老师的指导,基本完成了模拟平台的设计,设计了一套可以使用的蚂蚁算法路由选择模拟的平台。但是里面还是有很多的问题,有很多的不足,因为蚂蚁算法是人工智能,机器学习的一些知识,由于知识水平还不够,一些更加细节的方面有待进一步深入的研究。

另外,可视化技术和理念和技术都是发生着巨大的变化,Java小程序虽然具有很好的展示效,但是目前而言显然已经过时,本文之所以用小程序主要原因就是作为本科生练习Java语言的驾驭能力,之后我还会进行版本的更新,用最新的可视化技术进行更好的模拟,以求得更好的界面效果和体验。

参考文献

[1] Dorigo M,Gambardella L M.Ant colony system: A cooperative learning approach to the traveling salesman problem,IEEE Trans[J]. Evolutionary Computation,1997,1(1):53-66.

[2] Minjie Zhang,Jianmin Xu,Yanguang Cai. Heuristic Ant Algorithm for Road Network Traffic Coordination Control[J]. Journal of Intelligent Systems,2013,21(4).

[3] Mohammad H. Afshar,Miguel A. Marino. Application of an ant algorithm for layout optimization of tree networks[J]. Engineering Optimization,2006,38(3).

[4] Li Xiong,Jiang Wen. Method for generating multiple risky barcodes of complex diseases using ant colony algorithm.[J]. Theoretical biology & medical modelling,2017,14(1).

[5] Viktor Danchuk,Olena Bakulich,Vitaliy Svatko. An Improvement in ant Algorithm Method for Optimizing a Transport Route with Regard to Traffic Flow[J]. Procedia Engineering,2017,187.

[6] S. Madadgar,A. Afshar. An Improved Continuous Ant Algorithm for Optimization of Water Resources Problems[J]. Water Resources Management,2009,23(10).

[7] Guan-Chun Luh,Chun-Yi Lin. Optimal design of truss structures using ant algorithm[J]. Structural and Multidisciplinary Optimization,2008,36(4).

[8] Yuanzhi Wang. Research of Multi-Depot Vehicle Routing Problem by Cellular Ant Algorithm[J]. Journal of Computers,2013,8(7).

[9]祁彪. 无线移动Ad Hoc网络蚂蚁路由算法的研究[D]. 华中科技大学. 2004.

[10]段海滨,蚂蚁算法原理及其应用[M].北京:科学出版社,2005.

[11]严伟, 潘爱民,计算机网络(第六版)[M].北京:清华大学出版社,2011.

[12]王志中.基于改进蚁群算法的移动机器人路径规划研究[J].《机械设计与制造》,2018,1期.

[13] 樊玮,朱军.软件Agent技术的研究[J].航空计算技术,1999,第29卷第4期.

[14]杨丽锦. 浅析蚁群算法的原理及应用方向[J]. 电脑知识与技术. 2009(06):185-186.

[15]贺长玲. 柔性制造系统的蚁群调度算法研究[D].西安交通大学.2010.

[16]刘正雷.基于petri网和蚁群算法的并行测试系统任务调度问题研究[D].重庆大学.2015.

[17]刘建芳. 蚁群算法的研究及其应用[D].重庆大学.2015.

[18]宋锦娟, 白艳萍. 一种改进的蚁群算法及其在TSP中的应用[J].数学的实践与认识,2012.(18).

[19]王云飞. 基于蚁群算法的武警巡逻路径优化问题研究[D]. 国防科学技术大学,2014.

[20]贾文刚. 基于遗传—蚁群融合算法的聚类算法研究[D].内蒙古大学,2017.

[21]刘建芳. 蚁群算法的研究及其应用[D].重庆大学,2015.

[22]刘闻. 蚁群算法及其应用研究[D].北京邮电大学,2014.

[23]孙骏. 基于蚁群优化算法的TSP问题研究[D]. 武汉理工大学. 2005.

[24]井大军. 蚂蚁算法的Java设计与实现[J]. 电脑编程技巧与维护. 2008(08):18-19-27.

  

自2017年11月开始做毕业设计以来,时间真的很快,转眼间近半年已过。期间进行了课题的选定,开题时候的文献查阅,老师的敦促和指导。这半年在论文写作方面我学到了很多东西,即使我是计算机专业,但是在平时的学习的中对通信方面的东西也有所接触。我们学过计算机网络,但对通信方面一些专业的知识并不是很熟悉,所以在刚开始的时候,我所遇到的问题与其他人相比可能就多一点,但是在导师的不倦教诲之下,我还是按时完成了设计要求,在此要感谢袁永娜老师,本课题从调研、开题到方案的设计和实现始终是在袁老师的细心指导下进行的,她在繁重的科研和教学中抽出时间总是监督我,指导我,给出很多有价值的建议。她认真严格的科研态度,使我在学习生活上都取得了很多收益,使我学会了分析和解决问题的基本思路。另外,我感谢父母,是他们在一直默默的付出辛勤的汗水,支持我,鼓励我。

最后,我感谢兰州大学信息学院的各个老师和同学们,和你们在一起的四年时光我会永远记得。在离开母校之际,祝母校全体老师、同学身体健康,事业有成!祝母校的一流大学之路,越来越精彩!

论文(设计)成绩


导师评语

 

 

 

 

 

 

 

 

建议成绩                   指导教师(签字)           


答辩小组意见

 

 

 

答辩委员会负责人(签字)                 


 

 

 

成绩                     学院(盖章)                

                                        

    年   月    日

原文地址:https://www.cnblogs.com/niu3/p/9356349.html

时间: 2024-11-11 08:08:41

《本科毕业论文》的相关文章

CI框架源码阅读笔记3 全局函数Common.php

从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap引导文件都会最先引入全局函数,以便于之后的处理工作). 打开Common.php中,第一行代码就非常诡异: if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 上一篇(CI框架源码阅读笔记2 一切的入口 index

IOS测试框架之:athrun的InstrumentDriver源码阅读笔记

athrun的InstrumentDriver源码阅读笔记 作者:唯一 athrun是淘宝的开源测试项目,InstrumentDriver是ios端的实现,之前在公司项目中用过这个框架,没有深入了解,现在回来记录下. 官方介绍:http://code.taobao.org/p/athrun/wiki/instrumentDriver/ 优点:这个框架是对UIAutomation的java实现,在代码提示.用例维护方面比UIAutomation强多了,借junit4的光,我们可以通过junit4的

Yii源码阅读笔记 - 日志组件

?使用 Yii框架为开发者提供两个静态方法进行日志记录: Yii::log($message, $level, $category);Yii::trace($message, $category); 两者的区别在于后者依赖于应用开启调试模式,即定义常量YII_DEBUG: defined('YII_DEBUG') or define('YII_DEBUG', true); Yii::log方法的调用需要指定message的level和category.category是格式为“xxx.yyy.z

源码阅读笔记 - 1 MSVC2015中的std::sort

大约寒假开始的时候我就已经把std::sort的源码阅读完毕并理解其中的做法了,到了寒假结尾,姑且把它写出来 这是我的第一篇源码阅读笔记,以后会发更多的,包括算法和库实现,源码会按照我自己的代码风格格式化,去掉或者展开用于条件编译或者debug检查的宏,依重要程度重新排序函数,但是不会改变命名方式(虽然MSVC的STL命名实在是我不能接受的那种),对于代码块的解释会在代码块前(上面)用注释标明. template<class _RanIt, class _Diff, class _Pr> in

CI框架源码阅读笔记5 基准测试 BenchMark.php

上一篇博客(CI框架源码阅读笔记4 引导文件CodeIgniter.php)中,我们已经看到:CI中核心流程的核心功能都是由不同的组件来完成的.这些组件类似于一个一个单独的模块,不同的模块完成不同的功能,各模块之间可以相互调用,共同构成了CI的核心骨架. 从本篇开始,将进一步去分析各组件的实现细节,深入CI核心的黑盒内部(研究之后,其实就应该是白盒了,仅仅对于应用来说,它应该算是黑盒),从而更好的去认识.把握这个框架. 按照惯例,在开始之前,我们贴上CI中不完全的核心组件图: 由于BenchMa

CI框架源码阅读笔记2 一切的入口 index.php

上一节(CI框架源码阅读笔记1 - 环境准备.基本术语和框架流程)中,我们提到了CI框架的基本流程,这里这次贴出流程图,以备参考: 作为CI框架的入口文件,源码阅读,自然由此开始.在源码阅读的过程中,我们并不会逐行进行解释,而只解释核心的功能和实现. 1.       设置应用程序环境 define('ENVIRONMENT', 'development'); 这里的development可以是任何你喜欢的环境名称(比如dev,再如test),相对应的,你要在下面的switch case代码块中

Apache Storm源码阅读笔记

欢迎转载,转载请注明出处. 楔子 自从建了Spark交流的QQ群之后,热情加入的同学不少,大家不仅对Spark很热衷对于Storm也是充满好奇.大家都提到一个问题就是有关storm内部实现机理的资料比较少,理解起来非常费劲. 尽管自己也陆续对storm的源码走读发表了一些博文,当时写的时候比较匆忙,有时候衔接的不是太好,此番做了一些整理,主要是针对TridentTopology部分,修改过的内容采用pdf格式发布,方便打印. 文章中有些内容的理解得益于徐明明和fxjwind两位的指点,非常感谢.

CI框架源码阅读笔记4 引导文件CodeIgniter.php

到了这里,终于进入CI框架的核心了.既然是"引导"文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http://you.host.com/usr/reg 经过引导文件,实际上会交给Application中的UsrController控制器的reg方法去处理. 这之中,CodeIgniter.php做了哪些工作?我们一步步来看. 1.    导入预定义常量.框架环境初始化 之前的一篇博客(CI框架源码阅读笔记2 一切的入

jdk源码阅读笔记之java集合框架(二)(ArrayList)

关于ArrayList的分析,会从且仅从其添加(add)与删除(remove)方法入手. ArrayList类定义: p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Monaco } span.s1 { color: #931a68 } public class ArrayList<E> extends AbstractList<E> implements List<E> ArrayList基本属性: /** *

dubbo源码阅读笔记--服务调用时序

上接dubbo源码阅读笔记--暴露服务时序,继续梳理服务调用时序,下图右面红线流程. 整理了调用时序图 分为3步,connect,decode,invoke. 连接 AllChannelHandler.connected(Channel) line: 38 HeartbeatHandler.connected(Channel) line: 47 MultiMessageHandler(AbstractChannelHandlerDelegate).connected(Channel) line: