目录
一、理论基础
无线Mesh网络其也可以称为无线网状网络或者无线多跳网络,其具有动态自组织、自配置、易于维护等优点,同时还具备成本较低,系统运行稳定的优势。无线Mesh网络将移动节点和固定节点通过无线链路进行相互链接,组成一个多跳移动的自组无线网络。无线Mesh网络的构建是基于Ad Hoc无线网络之上的,因此,在其拓扑结构上和Ad Hoc无线网络具有较多的相似点。无线Mesh网络能够灵活快速的实现各种场合的组网,因此具有极其广泛的应用前景。无线Mesh网络结构的基本示意图如下图所示:
对于OLSR路由协议,通过Dijkstra算法计算无线Mesh网络G中的N个s到d的路径,主要步骤如下所示:
Dijkstra算法算是贪心思想实现的,首先把起点到所有点的距离存下来找个最短的,然后松弛一次再找出最短的,所谓的松弛操作就是,遍历一遍看通过刚刚找到的距离最短的点作为中转站会不会更近,如果更近了就更新距离,这样把所有的点找遍之后就存下了起点到其他所有点的最短距离。选择特殊路径长度最短的路径,将其连接的V-S中的顶点加入到集合S中,同时更新数组dist。一旦S包含了所有顶点,dist[]就是从源到所有其他顶点的最短路径长度。
(1)数据结构。 设置地图的带权邻接矩阵为map[][],即如果从源点u到顶点i有边,就令map[u][i]=<u,i>的权值,否则map[u][i]=∞;采用一维数组dist[i]来记录从源点到i顶点的最短路径长度:采用一维数组p[i]来记录最短路径上i顶点的前驱。
(2)初始化。令集合S={u},对于集合V-S中的所有顶点x,初始化dist[i]=map[u][i],如果源点u到顶点i有边相连,初始化p[i]=u(i的前驱是u),否则p[i]=-1
(3)找最小。在集合V-S中依照贪心策略来寻找使得dist[j]具有最小值的顶点t,即dist[t]=min,则顶点t就是集合V-S中距离源点u最近的顶点。
(4)加入S战队。将顶点t加入集合S,同时更新V-S
(5)判结束。如果集合V-S为空,算法结束,否则转6
(6)在(3)中已近找到了源点到t的最短路径,那么对集合V-S中所有与顶点t相邻的顶点j,都可以借助t走捷径。
二、核心程序
-
..............................................................
-
-
%节点分布范围
-
Nnode =
100;
-
SCALE =
500;
%
-
%初始节点能量
-
E0 =
1;
-
%通信半径
-
Radius=
100;
%
-
%节点最大移动速度
-
Vmax =
1;
%
-
%数据发送包速率
-
Smax =
20;
%
-
%数据发送包长度
-
SLen =
2000;
%
-
%节点通信阈值
-
LRad =
87;
-
%电路能耗系数
-
Eelec =
5e-8;
-
%信道传播模型的能耗系数
-
Efs =
1e-11;
-
%信道传播模型的能耗系数
-
Emp =
1.3e-15;
-
%压缩比
-
u =
0.5;
%
-
%初始变异概率
-
P =
0.5;
%
-
%发送率
-
Trans =
1.5;
-
-
%%
-
%构造一个多跳传输测试网络系统,OLSR协议的改进
-
-
X = rand(
1,Nnode)*SCALE;
-
Y = rand(
1,Nnode)*SCALE;
-
%定义随机带宽
-
Bw =
100*rand(Nnode,Nnode);
-
%顶级随机的丢包率
-
Db = rand(Nnode,Nnode)/
20;
-
-
%network topology
-
dmatrix0= zeros(Nnode,Nnode);
-
Fmatrix0= zeros(Nnode,Nnode);
-
Cmatrix0= zeros(Nnode,Nnode);
-
for i =
1:Nnode
-
for j =
1:Nnode
-
Dist = sqrt((X(i) - X(j))^
2 + (Y(i) - Y(j))^
2);
-
%距离因素
-
dmatrix0(i,j) = Dist;
-
end;
-
end;
-
%计算归一化值的最大值
-
for i =
1:Nnode
-
for j =
1:Nnode
-
Dist = sqrt((X(i) - X(j))^
2 + (Y(i) - Y(j))^
2);
-
%网络优先级参数
-
Fmatrix0(i,j) =((Bw(i,j)-min(min(Bw)))/min(min(Bw)) + (max(max(dmatrix0))-dmatrix0(i,j))/max(max(dmatrix0)) + (
1-Db(i,j)))/
3;
-
%视频传输能力——即节点之间的传输损耗,用简化模型替代
-
if i == j
-
Cmatrix0(i,j) =
0;
-
else
-
Cmatrix0(i,j) =
20*log10(Dist);
-
end
-
end;
-
end;
-
MAX_dmatrix = max(max(dmatrix0));
-
MAX_Fmatrix = max(max(Fmatrix0));
-
MAX_Cmatrix = max(max(Cmatrix0));
-
-
matrix = zeros(Nnode,Nnode);
-
dmatrix = zeros(Nnode,Nnode);
-
Fmatrix = zeros(Nnode,Nnode);
-
Cmatrix = zeros(Nnode,Nnode);
-
-
for i =
1:Nnode
-
for j =
1:Nnode
-
Dist = sqrt((X(i) - X(j))^
2 + (Y(i) - Y(j))^
2);
-
%a link;
-
if Dist <= Radius & Dist >
0
-
matrix(i,j) =
1;
-
%距离因素
-
dmatrix(i,j) = Dist;
-
%网络优先级参数
-
Fmatrix(i,j) = ((Bw(i,j)-min(min(Bw)))/min(min(Bw)) + (max(max(dmatrix0))-dmatrix0(i,j))/max(max(dmatrix0)) + (
1-Db(i,j)))/
3;
-
%视频传输能力——即节点之间的传输损耗,用简化模型替代
-
Cmatrix(i,j) =
20*log10(Dist);
-
else
-
matrix(i,j) = inf;
-
%距离因素
-
dmatrix(i,j) = inf;
-
%网络优先级参数
-
Fmatrix(i,j) = inf;
-
%视频传输能力——即节点之间的传输损耗,用简化模型替代
-
Cmatrix(i,j) = inf;
-
end;
-
end;
-
end;
-
%归一化处理
-
dmatrix = dmatrix/MAX_dmatrix;
-
Fmatrix = Fmatrix/MAX_Fmatrix;
-
Cmatrix = Cmatrix/MAX_Cmatrix;
-
%路由优化算法的改进
-
Tmatrix = (dmatrix + Fmatrix + Cmatrix)/
3;
-
%定义通信起始节点和终止节点
-
tmp = randperm(Nnode);
-
for i =
1:Nnode
-
distA(i) = sqrt((X(i))^
2 + (Y(i))^
2);
-
distB(i) = sqrt((X(i)-SCALE)^
2 + (Y(i)-SCALE)^
2);
-
end
-
[Va,Ia] = max(distA);
-
[Vb,Ib] = max(distB);
-
Sn = Ia;
-
En = Ib;
-
[paths,costs] = func_dijkstra(Sn,En,Tmatrix);
-
-
%通过遗传优化算法去搜索OLSR协议的最小MRP集
-
if isempty(paths) ==
0
-
flags =
1;
-
end
-
-
end
-
-
path = func_find_best_MRPset(paths,X,Y,Tmatrix,Nnode);
-
path_distance=
0;
-
ds=
0;
-
for d=
2:length(paths)
-
path_distance= path_distance + MAX_dmatrix*dmatrix(paths(d-
1),paths(d));
-
ds(d)=MAX_dmatrix*dmatrix(paths(d-
1),paths(d));
-
end
-
%hop数量
-
path_hops = length(paths);
-
%根据OSLR协议所建立的网络路径进行视频的传输
-
...............................................
三、测试结果
A12-29
转载:https://blog.csdn.net/ccsss22/article/details/127781313