一种基于聚类算法的机会网络路由算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一种基于聚类算法的机会网络路由算法
何志立;潘达儒;宋晖
【摘要】在传统的历史路径算法的基础上,提出一种基于聚类算法的历史路径机会网络路由算法(RACA算法).该算法使用无监督学习中的k-means++算法对节点进行编码,并使用编码的方式更新历史路径算法,具有缓存空间占用低、节点搜索速度快和在拓扑结构多变的环境的适应性强等特点.实验结果表明:RACA算法在多个方面有着较好的表现,特别是在传输成功率和开销比率方面有较好的表现;出色的网络性能表现使得RACA算法能够在资源有限的场景和网络环境变化较大的场景使用,例如车载网络环境.
【期刊名称】《华南师范大学学报(自然科学版)》
【年(卷),期】2019(051)004
【总页数】9页(P120-128)
【关键词】聚类算法;无监督学习;路由算法;机会网络;时延容忍网络
【作者】何志立;潘达儒;宋晖
【作者单位】华南师范大学物理与电信工程学院,广州510006;华南师范大学物理与电信工程学院,广州510006;华南师范大学物理与电信工程学院,广州510006【正文语种】中文
【中图分类】TP393
机会网络[1]是不需要通过基站干预而进行传输的网络形式,主要通过节点间的随
机相遇来传递信息,在大多数情况下节点之间不存在完整的传输路径. 该网络利用节点移动形成的通信机会逐跳传输信息,以“存储-携带-转发”的模型实现节点间通信[2]. 由于机会网络的特殊性及优秀的灵活性,该网络在很多极端环境下或者网络资源稀缺的环境下尤为适用. 虽然机会网络有着上述的优势,但也正是此网络的传输形式导致了传输准确性的下降. 为了确保信息能准确地到达目的节点,路由算法会发出多份相同的信息的副本来探索潜在的传输路径,从而导致网络中资源的浪费. 在极端的情况下,还可能导致节点缓存的耗尽,从而更进一步降低网络的性能. 在此之前,机会网络的路由算法被分为两大分支:一是基于转发策略的路由算法,二是基于复制策略的路由算法. 基于转发策略的路由算法有Direct Delivery[3]、CAR[4]和Spray and Wait[5]等,这类路由协议规定网络中仅存在一个数据分组
副本,优点在于极大地节省了网络资源. 但是,有限的副本数也限制了网络其他性能的提高. 基于复制策略的路由算法有Epidemic[6]、PRoPHET[7]和MaxProp[8]等,这类算法允许网络中存在多个副本,使得有用的消息到达目的节点的可能性更大,有效地提高机会网络的成功传输率和降低传输延时. 但是,伴随着成功传输率的提高,网络资源的消耗也会进一步提高,严重的情况下有可能造成网络的崩溃. 为了解决上述2类传统算法的局限性,学者们提出了多种优化方法. 如:LI等[9]提出了基于多人合作博弈的机会网络算法,对多人合作博弈的纳什均衡进行求解,从而得到较优的转发策略;MAI等[10]提出了一种基于定向预测和虚拟交易的机会
网络转发策略,在机会网络中实现了流量的卸载;YOON等[11]提出了使用
inter-contact time策略寻找一个好的转发分组来转发消息,以尽可能地进行准确的消息传输,但是该算法只考虑了节点间的连接关系,并没有使用节点的其他特征;LIU等[12]提出了基于兴趣社区的机会网络路由算法,按照消息的社会属性来对消息进行转发,提高了信息的传输成功率,但需要事先定义社区的属性和信息的属性;ZHAO等[13]提出了基于SVM的路由算法,使用监督学习中的SVM算法来学习
节点的转发行为,考虑到节点更多的属性,改进了文献[11]、[12]的算法;SHARMA等[14]提出基于决策树和深度神经网络的机会网络路由算法,该算法具
有更强的拟合能力,当考虑到的节点属性维度很大时,该算法的拟合能力优于文献[13]的算法.
以上所提算法大多是基于监督学习的方法. 在对机会网络的转发行为进行学习前,基于监督学习的算法需要采集大量的先验知识,例如,已标定好的数据集. 但采集这些数据既费时又低效. 而无监督学习与监督学习的不同点在于:无监督学习不需要准备大量的先验知识就能进行学习,可免去采集先验知识的过程,而且基于k-means++算法的无监督学习模型学习的时间复杂度要低于监督学习模型.
本文首次把无监督学习和历史路径算法结合,提出一种基于聚类算法的机会网络路由算法,该算法使用k-means++算法对节点进行编码,并使用Davies-Bouldin Index(DBI)[15]指数来衡量聚类算法的聚类效果,从而根据DBI指标来确定合适的聚类点个数. 最后,使用k-means++算法对历史路径进行编码,从而增强历史路
径算法对拓扑结构多变的网络环境的适应性.
1 k-means++算法
k-means算法[16]的思想很简单:对于给定的样本集,按照样本之间的距离大小,将样本集划分为k个簇. 让簇内的点尽量紧密地聚合在一起,而让簇间的距离尽量大. 假设簇划分为{C1,C2,…,Ck},则目标是最小化平方误差E:
(1)
其中,μi是簇Ci的均值向量,也称为质心,其表达式如下:
(2)
直观来看,式(1)在一定程度上刻画了簇内样本围绕簇均值向量的紧密程度,E值
越小则簇内样本相似度越高. 但是,最小化式(1)并不容易,找到它的最优解需考察样本集D所有可能的簇划分,这是一个NP难问题[17]. 因此,k-means算法采用了启发式的策略,通过迭代优化来近似求解式(1).
k-means算法首先随机选择k个样本作为初始化的质心,然后通过迭代不断调整k个质心的位置,其具体流程见算法1.
算法1 k-means算法
Step 1. 输入样本集D={x1,x2,…,xm},聚类的簇数k,最大迭代次数N;簇划分C={C1,C2,…,Ck}.
Step 2. 从数据集D中随机选择k个样本作为初始的k个质心向量:{μ1,μ2,…,μk}. Step 3. 对于n=1,2,…,N
a) 将簇划分C初始化为Ct=∅(t=1,2,…,k);
b) 对于i=1,2,…,m
计算样本 xi和各个质心向量μj(j=1,2,…,k)的距离:并记下最小的距离dij;
c) 将样本xi标记为最小距离dij所属的类型,得到xi对应的类别i. 此时,更新
Ci=Ci∪x i;
d) 对于j=1,2,…,k
对Cj中所有的样本点重新计算新的质心
e) 如果所有的k个质心向量都没有发生变化,则转到Step 4.
Step 4. 输出簇划分C={C1,C2,…,Ck}.
k-means++算法[18]是对k-means算法的一种优化,是一种高效的无监督学习算法. k-means算法在开始阶段随机选取数据集中k个点作为聚类点,而k-means++算法改进了k-means算法启动时随机选点的策略. 改进的原理如下:(1)假设已经选取了n(0<n<k)个初始聚类中心,则在选择第n+1个聚类中心时,距离当前n个聚类中心越远的点会有更高的概率被选中为第n+1个聚类中心.
(2)在选取第1个聚类中心(n=1)时同样通过随机的方法.
k-means++算法的具体流程见算法2.
算法2 k-means++算法
Step 1. 从输入的数据点集合中随机选择1个点作为第1个聚类中心μ1.
Step 2. 对于数据集中的每一个点xi,计算它与已选择的聚类中心中最近聚类中心的距离
Step 3. 选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点. Step 4. 重复Step 2和Step 3,直到选择出k个聚类质心.
Step 5. 得到质心后,从算法1的Step 3开始执行.
2 使用k-means++算法编码的历史路径机会网络路由算法
本节首先提出一种基于DBI指数的最佳聚类点个数确定算法,该算法将有助于找到合适的聚类点个数,从而提高k-means++算法的分类准确性;然后提出一种基于k-means++聚类的历史路径算法,以提高机会网络路由算法的效率及传输准确度.
2.1 最佳聚类点个数确定算法
在使用k-means++算法前,需要确定算法聚类点的个数,聚类点的个数对聚类的效果有着直接的影响. 如果设置分类个数与节点数目相等,则该分类的结果与节点ID的意义是一样的. 因为每个类别中只有特定的一个节点,所以,可以认为聚类的效果等同于节点ID的作用. 如果把分类个数设置为1,那么分类的效果就是把所有的节点都分为一类,这样就失去了分类的意义. 使用聚类算法的目的是根据节点的各项属性将节点分为有限多个类,从而用这些类别对每个节点进行编码,通过这些编码来代替节点ID的作用. 这样做的好处在于可以使用有限的维度来表示无穷多的节点,当一个新的节点加入到机会网络中时,聚类算法可以立即给它分配一个编码(分到一类中). 从而立即知道新加入的这个节点与哪些节点是类似的,为接下来
的转发策略提供决策依据.
所以,编码的维度(类别的个数)是决定这聚类效果的很关键的因素. 下面使用一个
具体的例子来说明这个问题. 为了仿真日常的环境,把仿真环境划分为3个区域,并且假定每个节点都在自己所属区域内随机移动.
由仿真地图(图1)可以看出:节点主要分布在图中的3个椭圆形区域,并在这3个区域内随机移动. 下面使用k-means++算法来学习仿真地图(图1)的节点移动规律:选用节点的坐标属性作为k-means++算法的分类维度,从仿真开始记录每个节点每时每刻的坐标信息直到仿真结束,将得到的数据制作成k-means++算法的数据集.
图1 节点的分布区域示意图 Figure 1 The node distribution in a simulation environment注:红黄绿三区分别代表节点不同的区域分类.
对比仿真地图(图1)和k-means++算法分类结果图(图2),可以发现:使用k-means++分类后的节点所呈现的区域属性跟实际区域划分是十分相近的;如果只考虑节点的坐标属性,k-means++能够较好地对节点进行分类,而且分类效果十分显著.
为了充分刻画节点间的区别,使节点的分类更加精细,还可以加入更多的节点属性维度,例如,坐标属性、缓存大小和能量大小等. 考虑到坐标属性能够被直观展示,所以,k-means++算法的分类只考虑了节点的坐标属性. 如果把k-means++算法的分类个数设置为5,那么k-means++算法的分类效果有所下降. 可见,分类的
个数问题的设置也是一个至关重要的问题.
图2 进行节点分类后的结果 Figure 2 The results from k-means++ classification注:每种颜色表示同一类的节点.
在分类个数的评估上,本文使用 DBI来衡量分类个数是否合适. DBI由两部分组成的:第一部分是簇内距离Si;第二部分是簇间距离Mi. 簇内距离Si的定义如下:
(3)
其中,Ai是Ci类的中心点;Ti是属于第i类的样本点的个数;xj为第j个样本;p 为常数,可根据p值选择数据点之间距离的衡量方式. 而当p=2时,式(3)使用欧氏距离来衡量簇间差距,因此,本文选择p=2.
簇间距离Mi的定义为:
(4)
其中,ak,i为Ai的第k个元素.
而Ri,j衡量了第i类和第j类的分类效果:
(5)
由式(5)可知Ri,j受到簇内距离S和簇间距离M的共同影响. DBI的表达式如下:
(6)
(7)
最小的DBI值对应的分类个数即为最佳的分类个数. 由不同分类个数的DBI值(图3)可知:当分类个数为4时,分类的结果较为合理.
图3 不同分类个数下的DBI值Figure 3 The DBI values for different classification numbers
根据不同的分类个数进行聚类实验,分类效果如图4所示. 由图2和图4可知:将分类个数设定为4的确是比较合理的.
为了确保分类个数的准确性,需要每隔一段时间运行DBI评估算法以确定最佳的
分类个数.
图4 不同分类个数的分类效果 Figure 4 The results from different classification numbers注:每种颜色表示同一类的节点.
2.2 基于聚类的历史路径算法
2.2.1 聚类算法的运行对网络中的节点进行聚类需要大量的节点状态信息,由于网络的拓扑状况是时刻变化的,得到的聚类中心是有时效性的,聚类算法需要进行定期更新以增强它对整个网络的适应性. 在这种情况下,运行聚类算法的载体需要较大的缓存空间,或者需要较强的运算能力和稳定的网络状态,又或者需要较大的覆盖范围和有稳定的能源供应才能保证算法的正常更新. 因此,通常会优先考虑基站作为运行该算法的节点. 如果该区域内没有基站,那么可以指派一个能量稳定且运算能力强的节点负责运行k-means++算法. 相比于深度神经网路,k-means++算法的训练需要消耗的资源较少,算法的时间复杂度也相应较低.
选择合适的运行节点并且训练完成后,运行节点需要将训练好的新的分类中心点以广播的方式分发到各个节点. 接收到新的中心点后,各个节点就可以根据该中心点来对历史路径中的节点进行编码. 这时候,k-means++算法的另一个优点将会展现:相比于决策树或者深度神经网络,节点需要接收的新参数极少,而不会像深度神经网络动辄几千万甚至数亿的参数量. 聚类算法的参数更新后便于在网络中传播,也就是说,参数在传播时占用极少的网络资源.
2.2.2 历史路径的更新本文提出的路由算法是一种基于历史转发记录的路由算法,该算法的原理是记录每一条成功转发的路径,成功转发路径是由成功转发的消息所经过的节点组成. 算法通过判断下一跳节点是否在已有的成功转发路径记录中来做出转发决策,如果在,则转发. 每个节点需要维护这样的一张表格:表格中的每个单元记录一个目的节点的所有成功传输路径. 当进行消息的转发判断时,源节点首先提取被转发消息的目的节点,再得到与它建立连接的潜在转发节点集. 节点在表
格中检索目的节点单元,提取到目的节点单元后,遍历潜在转发节点集,检索每一个潜在转发节点是否在成功转发路径中. 如果在,则把这个潜在转发节点视为可以转发的节点,把被转发消息转发到这个转发节点中.
在提出的历史路径算法中,算法记录的是节点的编号. 如果使用节点的ID来作为节点的编号,那么算法只能根据历史的成功转发路径来进行消息的转发. 使用k-means++算法对节点进行分类编码后,每个类别代表的是一类的节点,而不是某一个特定的节点,算法的适应性将变得更强. 当有新的节点加入到网络系统时,算法也能够根据编码后的历史成功转发记录来判断是否应该把消息转发到这一个转发节点中. 另一方面,使用聚类算法对节点进行编码后,历史的成功转发记录集合将会变得更加小,占用节点的空间大小降低,检索速度也会相应提升.
由成功转发记录的更新示意图(图5)可知:每个节点需要维护这样的一个表格:表格中含有单元J和单元K,分别记录着目的节点为J和目的节点为K的成功转发记录.
下面介绍历史路径的更新过程,基于聚类的历史路径算法流程如算法3所示.
图5 成功转发记录的更新示意图 Figure 5 The update process of successful transmission records注:Ni为更新前编号为i的节点,Ci为更新后编号为i的节点.算法3 基于聚类的历史路径算法
if 聚类中心需要更新且节点是算法2的运行节点then
使用算法2更新聚类中心点,更新完成后广播聚类中心点参数
end if
if 运行节点收到一个新的成功转发记录rd then
使用聚类算法重新编码新的成功转发记录rd;检索单元中是否有相同的记录,如果无,则把编码后的记录存放到相应的单元中;如果有,则跳过
end if
if 存在建立连接的邻节点 then
for 邻节点nj, j=1,2,…,n∥邻节点nj为与源节点建立的连接的节点,n为邻接点个数
for 消息mi,i=1,2,…,k∥消息mi为源节点中的消息,k为源节点消息的条数
查询源节点的表格,检索单元为mi的目的节点中是否有邻节点nj的成功转发记录,如果有,则把消息转发到邻节点nj;如果无,则跳过
end if
k-means++算法的运行节点每隔一段时间更新聚类中心点,再把新的聚类中心点广播到整个网络. 每个节点使用这个聚类中心点来对成功转发记录进行编码. 当一条消息被成功地转发到目的节点时,目的节点会向整个网络广播这一条转发路径. 当其他节点接收到广播的新的成功转发路径时,使用聚类中心来对这条路径进行编码,并且更新到自身的表格. 当节点存在建立连接的邻节点时,节点把自身视为源节点,遍历自身所携带的消息,并且根据本地的历史记录表格判断消息能否被转发到该邻节点上.
k-means++算法、最佳聚类点确定算法和基于聚类的历史路径算法共同构成了RACA算法.
由RCAC算法的系统结构示意图(图6)可知:机会网络的系统结构由移动模型、连接模型和节点模型组成,RACA算法作用于连接模型,负责收集连接模型和节点模型的状态或信息,通过无监督学习来拟合移动模型和连接模型之间的关系,从而给出作用在连接模型上的转发策略. 该算法采用传统的历史路径算法的思路,通过记录成功的转发路径来指导接下来的转发. 为了适应拓扑多变的环境,RACA算法使用k-means++算法对传统的历史路径算法进行优化,思路是使用k-means++算法对节点进行聚类,然后使用类别来对节点进行编码,从而提高历史路径算法在拓扑多变的网络环境的适应性. 为了使得k-means++算法的聚类点个数更加合理,本
文使用基于DBI指数的聚类点确认算法来确定合适的聚类点个数;再结合本文提
出的历史路径算法提高机会网络路由算法的环境适应性,从而提高机会网络的性能. 图6 系统结构示意图Figure 6 The structure of the system models
3 仿真结果与讨论
本节将对比基于聚类的历史路径算法及基于转发策略、基于复制策略、基于有监督学习的路由算法的仿真实验结果,根据消息的成功传输率、平均延时和开销比率等多个性能指标分析各算法的优缺点.
3.1 仿真场景及评价指标
本文采用机会网络the One仿真器[19-20]对机会网络进行仿真,选用HelsinkiMedium为实验仿真地图,地图的大小为10 000 m*8 000 m. 为了尽可能地模拟真实环境中节点的移动,将实验地图分为相交的3个区域,节点分别在
这3个区域内随机移动,每个区域布置60个实验节点;设置线路连通这3个区域,线路上布置12个实验节点. 在仿真参数设置上,每条消息的生存时间(TTL)为300 min,数据包的传输速度为250 kBps,消息的大小为0.5~1 MB,消息产生的时间间隔为100 s,节点的缓存大小为1~10 MB,实验的仿真时间设为12 h.
在评价指标上,采用能够明显反映机会网络性能的指标:消息的成功传输率、平均传输延时、开销比率、平均缓存时间及路由算法的平均跳数、网络率. 这些指标的定义如下:
(1)成功传输率=Nd/Nc,其中,Nd为到达目的节点的消息总数,Nc为环境中产
生的消息总数.
(2)平均传输延时其中,Ti,d为消息i到达的时间,Ti,c为消息i被创建的时间.
(3)开销比率=(Nr-Nd)/Nd,其中,Nr为所有消息被转发的次数.
(4)平均缓存时间其中,Nm为所有在缓存中出现过的消息总数,Ti为对应的第i
个消息在缓存中的停留时间.
(5)路由算法的平均跳数指的是消息从源节点到达目的节点的平均路径长度.
(6)路由算法的网络率
3.2 性能比较
在对比实验中,本文选择Epidemic、MaxProp、Spray and Wait、PRoPHET和MLProph算法作为对比算法,其中,MaxProp算法是一种基于缓存管理的路由算法;PRoPHET算法是一种根据节点相遇概率来转发消息的路由策略;MLProph算法是一种基于深度神经网络的有监督学习路由算法,该算法使用深度神经网络来预测消息转发的概率,从而提高消息转发的精确性;基于聚类的机会网路路由算法(RACA算法)是一种高效的基于无监督学习的机会网络路由算法.
由各算法的传输成功率(图7)可知:(1)随着节点的缓存增大,各算法的传输成功率都有相应的提高. (2)Epidemic算法是一种基于泛洪的算法,但是在实验中的表现却不理想. 理论上,在缓存充裕的情况下,Epidemic算法的传输成功率应是最高的,但由于本实验环境中节点的缓存较小,从而造成节点为了接纳新的消息而删除了存储在节点缓存中时间较长的消息,而被删除的消息有可能是未来可以到达目的节点的消息. 这样的消息误删导致了Epidemic算法在缓存大小为3~6 MB时的传输成功率低于Spray and Wait算法;缓存大小为1~10 MB时,该算法的成功传输率明显低于RACA算法和MaxProp算法. (3)缓存大小为2~10 MB时,RACA 算法的成功传输率最高,其中,当缓存大小为10 MB时,该算法的成功传输率高达40.79%;而缓存大小为1 MB时,MaxProp算法的成功传输率最高.
图7 缓存大小对成功传输率的影响Figure 7 The impact of cache size on delivery ratio
由图8可知:MaxProp算法的传输延时最短,其次是RACA算法. 究其原因为:MaxProp算法是一种基于缓存管理的算法,该算法会删掉一些传输时间较长的消息,从而得到较低的传输延时,但是,这样的策略有可能导致一些原本有可能到达
的消息被误删,从而降低了消息的成功传输率.
图8 缓存大小对传输延时的影响Figure 8 The impact of cache size on delivery latency
机会网络的开销比率是机会网络的一个重要的性能指标,反映了机会网络路由算法的效率. 由各算法的开销比率(图9)可知:(1)Epidemic算法的开销比率最高. 原因
在于:Epidemic算法是一种基于泛洪的路由算法,消息的转发是不加限制的,消息的转发次数越多,开销比率也就越大. (2)Spray and Wait算法的开销比率最低. 原因在于:Spray and Wait算法是一种基于转发的机会网络路由算法,由于该算法严格限制了消息的复制次数,所以开销比率能够一直保持在一个很低的水平. (3)RACA算法的开销比率仅次于Spray and Wait算法. 这得益于RACA算法的有效的转发机制,在保证高的成功转发率的同时保证了较低的开销比率.
图9 缓存大小对开销比率的影响Figure 9 The impact of cache size on overhead ratio
平均缓存时间反映了消息逗留在节点缓存中的时间长短,也从侧面反映了算法对消息操作的频繁程度. 由各算法的平均缓存时间(图10)可知:(1)Spray and Wait算
法的缓存时间较长. 原因在于:该算法在消息的整个生命周期只对消息执行有限次数的复制,使得消息停留在节点缓存中等待转发,导致缓存时间较长. (2)Epidemic
算法的缓存时间较短. 原因在于:消息不断地被复制,但是,节点的缓存是有限的,消息占满了节点的缓存,多余的消息会被不断地删除,从而导致消息在缓存中不断地更新,每个消息在缓存中持续时间短.
平均跳数反映的是消息从源节点转发到目的节点的路径的平均长度,也是反映算法性能的指标. 由各算法的平均跳数(图11)可知:Spray and Wait算法的平均跳数
最小,这是因为该算法是一种限制消息复制次数的算法,使得消息的传输路径长度被限制为一个固定的长度;Epidemic算法在缓存较大时的平均跳数最大,这是因。