当前位置:文档之家› 移动网络节点算法

移动网络节点算法

项目总结文档1 问题定义移动网络环境中,有n个同构的移动端点,每个端点的能量为X,每发送一条消息则会损耗能量Y。

现在,有一条消息要从端点s传送到t节点,已知这些节点在网络环境中随机游走,每个端点处都存储有该点与终点t的相遇次数,当两个节点相遇时可以进行消息传送,不相遇时消息携带者存储消息,问如何设计路由策略,从而使得该消息能够以最小能耗传送到目的节点t。

(如果不能保证是最小能耗,那么次小能耗也可以)2 相关资料的调研和总结2.1 所搜集的资料路由选择算法.pdf网络规划师案例论文-M_ANET网络中节约能量的组播路由协议.pdf移动自组织网络路由选择算法研究进展.pdf多媒体传感器网络中跨层优化的实时路由协议.pdf最短路径算法.doc2.2 对资料的总结通过对资料的研究,我们了解了什么是移动自有网络。

移动自有组织网络,又称Mobile Ad Hoc网络,是不依赖于任何固定基础设施的移动节点联合体。

通过对题目的初步了解和思考,搜集了关于移动网络环境、路由器、路由算法策略及最短路径的资料。

首先查阅了移动网络环境的相关资料达到对其的初步了解,主要包括《移动网络环境的信息存储与处理》。

移动通信与IP技术的融合产生了基于移动通信的IP数据业务技术。

通过无线数据网络,便携式终端用户可以随时随地进行网络信息浏览、收发电子邮件、查阅文献资料、更新企业数据。

因此,无线网络环境的信息处理与存储,为移动办公与信息处理提供了技术保障。

路由器是连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号的设备。

路由器的一个作用是连通不同的网络,另一个作用是选择信息传送的线路。

选择通畅快捷的近路,能大大提高通信速度,减轻网络系统通信负荷,节约网络系统资源,提高网络系统畅通率,从而让网络系统发挥出更大的效益来。

路由算法运用了最短路径的思想,传统的最短路径算法包括迪杰斯特拉算法、链路状态算法、距离向量算法、F-W算法等。

与算法结合考虑,可以借用最短路径算法的基本思想,做一些改进和扩充,完成题目要求。

3 对问题的思考和分析3.1 对原始问题的分析本题是需要以最小能耗将消息从s节点发送到t节点,已知每次在节点间存在消息的传递时,将会有Y能量的消耗,那么要是总耗能最小即消息传送是经过的中间结点最少。

那么,如何判定经历的中间结点最少呢?一个想法是,因为每个结点都记录了与t结点的相遇次数,而这些结点是在网络中随机游走的,可分析得知结点与结点之间存在着一定的相遇概率,那么,如果s结点与t结点的相遇次数不为零,可以想到,在未来s结点肯定还会再次与t结点相遇。

那么,最节约能耗的消息传递方式就是s结点保留该消息直到再次遇到t结点时将消息传递给它,如此,则所耗能最低且为Y.可以想象,算法若如此做的确是保证了最低的能耗,但却会浪费大量的时间,这在以效率为重的今天,这个缺陷是不可原谅的,为此,我们需要对题目重新进行定义。

3.2 新的问题的定义在网络中有n个自由移动的路由结点,它们在网络中随机的游走,当两个结点相遇时,就可以在两个结点之间进行消息的传递,任意两个结点相遇的概率是确定的,但概率值是未知的且不同结点之间相遇的概率不一定相同。

在此网络中,每个结点都携带有一定的能量X,每次在两个结点之间进行消息的传递时会有能量的耗费,耗费为Y.现在要在两个结点间进行消息的传递,假设源节点为s,目的结点为t.那么消息在s和t之间传递可能会经历任意多的结点。

每个结点都存储有与t结点的相遇次数。

设计算法要求以最小的能耗且最小的传递时间使消息最终从s结点传递到t 结点。

能耗与时间的平衡点为,其中,Y表示传递一次信息的能耗,T代表消息携带结点与其他结点的相遇平均时间间隔,h代表系数,它可以用来控制时间与能量耗费的平衡,h越大则更多的考虑时间的浪费,越小则更多的考虑能量的耗费。

3.3 对问题的分析因为每个结点都记录了与t结点相遇的次数,所以次数在一定程度上就反应了该节点与t结点相遇的概率。

但由于每个结点的相遇时间间隔不一定相同,也就是说每个结点与其它结点相遇的总次数不一定相同,所以次数高的并不一定代表与t结点的相遇概率就一定高。

因此,每个结点除了要记录与t结点的相遇次数tCount外还得记录该结点与其它结点总的相遇次数allCount.那么就代表了该结点与t结点的相遇概率。

可以知道与t结点相遇概率更高的结点再未来越容易再次遇到t结点,那么当消息携带结点遇到概率更高的结点时就应该把消息传递给它,因为它能跟快的将消息传给t结点。

可是由于传递能量时有能量的耗费这一原因,我们还需要考虑到让能量耗费尽可能的低,则应该有这样的判断公式其中a为当前消息携带结点,b为相遇结点,当此公式值为true时进行消息传递。

但是由于现实中还存在着另外一种情况,用此方式的话并不能得到最快的传递路径。

假设网络中有7个结点是s(源节点),a,b,e,f,g,t(目标结点).其中s,a,b分别于t结点相遇的次数及与总的相遇次数的比值分别为0.3,0.2,0.8.那么当消息携带结点s遇到a结点时,根据判断公式就不应该将消息传递给它(暂时设=0.2)。

但是,假若a结点的与b结点的相遇概率相当高,而从题设可以看出b结点与t结点具有很高的相遇概率,那么把消息传递给a,实际上就有很大的可能传递给b,从而再很快传递给t。

因而在这种情况下,单纯的看某一个结点与t结点的相遇概率而进行判断就不太合适了,并且这种情况还具有递归的性质。

即假若b结点和t结点也没有很高的相遇概率,但与b有很高相遇概率的c结点与t结点有高的相遇概率的话,那么a结点也应该被考虑传递消息,可以看出这种情况可以无限递归下去,当然随着递归层次的增加,它的影响将越来越小,因为中间结点太多也会大大耗费能量。

所以,为了解决这个问题,我们修改这些同构结点的存储结构,每个结点需要记录两个值,一个仍然是该结点与其它结点总的相遇次数allCount,另一个则是反映该结点与t结点联系紧密程度的值cd值. 不仅反映了这个结点本身与t结点相遇的概率,同时也反映了与该结点相遇的其它结点的值的情况,也即对cd值的计算是一个递归定义的过程。

那么,新的判断公式修改为:该cd值的提出是受了google的pagerank算法的影响,因此对每个结点的cd 值的计算也类似于pagerank算法中pr值的计算,是一个递归的过程,其详细计算方式将在算法中阐明。

4 算法的数学模型对该算法的进行数学模型的构建,实际上重点在于对cd值的计算的数学模型构建首先,假设网络中的自由结点数为n,利用(i=1,2,3……n)表示每一个结点,并设为目标结点t。

各个结点的cd值初始化为0,allCount值为0,t结点的cd值初始化为1,allCount值也为1。

又有时间能量关系系数,则假设为结点与结点相遇的次数(1<=I,j<=n),则有:其中就可表示该结点与t结点的关联程度5 算法的策略算法的策略主要有分治策略、贪心策略、动态规划策略以及回溯策略。

我们的算法策略不属于这四种策略中的任意一种,采用的是类pagerank的递归迭代计算策略,该算法主要分做两个模块,初始化关联值模块和路径查询模块。

5.1 初始化关联模块本模块采用迭代的形式对结点数组进行遍历,刷新它们的cd值以及allCount 值,当它们的比值趋于稳定时停止迭代,本模块结束。

算法伪码:While tureFlag=0;For i=1 to n-1 step 1j=crash(i);//返回i结点本次相遇的下一结点下标A[i].cd += A[j].cd/A[j].allCount;//A为结点数组A[i].allCount++;If j==t Thencontinue;End If;A[j].cd += A[i].cd/A[i].allCount;A[j].allCount++;If A[i].cd/A[i].allCount 稳定ThenFlag++;End IfEnd ForIf flag==n-1 Then//如果所有结点的比值都已稳定,则结束迭代过程。

Break;End IfEnd While5.2 路径查询模块让用户指定消息发送结点,然后本模块计算并输出消息传递路径算法伪码:m = input();//用户输入消息发送结点While truei = crash(m);//返回m结点本次相遇的下一结点下标If i==t ThenPrint(t);break;//消息已传到目标结点,跳出循环End ifIf m和i结点的判定公式为真ThenPrint(i);m = i;End IfEnd While6 对算法复杂度的分析6.1 算法的空间复杂度分析本算法的空间存储主要在于对cd值与allCount值的存储,在本算法中使用了一个数组存储这n个结点的信息,每个结点都存储这二个值,也就是说它使用的空间存储量为2n,可得其空间复杂度为:O(2n) = O(n)(注:在程序中会发现还存在着一个n*n的概率矩阵的空间占用,但由于该矩阵是用于模拟网络环境下n个自由结点的相遇过程的,在真实的网络环境下则不需要这样一个概率矩阵,也即这只是一个用于测试时的空间占用,不应包含在算法内,所以不予考虑。

)6.2 算法的时间复杂度分析本算法主要包含初始化关联值模块和路径查询模块这两个模块,算法一开始必须执行一次初始化关联模块,其后则可无限次的执行路径查询模块,所以这应是两个相对独立的模块,对于算法复杂度也应分开考虑。

对于初始化关联模块:本模块是对个结点的关联度进行迭代刷新的过程,所以时间的耗费在于迭代的时间耗费,对于每一次迭代过程时间复杂度就是问题规模n的一阶关系,分析整个模块复杂度的关键就是要找出其迭代次数与n的关系。

已知迭代的停止条件是所有结点的比值都已稳定下来。

那么,怎么样才算稳定呢?由于数据存储具有一定的精度,所以当数据的精度已经无法表示其变化时,就可认为其值已稳定。

对此,我们算法的数据精度为小数点后7位.算法中每一次相遇是通过crash(m)函数来决定相遇结点的,crash函数实际上就是模拟的现实网络环境中结点的相遇情况,所以对于每一个结点的cd值的一次迭代实际上就可等效成:其中表示的相遇结点是的概率,且有虽然每一次结点更新的是该节点的cd值与allCount值,但实际上我们迭代的真正对象却是比值,那么我们设(i=1,2,,n-1),,则有:于是有迭代公式,其中x为解向量,B为迭代概率矩阵,且有:我们可知迭代矩阵B的行范数:所以该迭代公式收敛,又有:而根据算法精度有故而根据误差估计式则可得迭代次数为一个常数,故本算法的最终时间复杂度为k*O(n)=O(n).对于路径查询模块:对于本模块的时间复杂度,就可以看作是消息携带结点与其它结点的相遇次数。

相关主题