平面路由协议仿真——SPIN算法
仿真软件——MATLAB

1、定位算法的实现
1.1 基本原理
SPIN协议是一种以数据为中心的自适应通信路由协议,假设所有传感器节点都可能是希望获得数据的汇聚节点,每个传感器节点都知道自己是否需要数据。为了避免防洪法出现的信息爆炸问题和部分重叠现象,传感器节点在传送数据之前彼此使用元数据进行协商,协商机制可确保传输有用数据。元数据的定义格式是与具体应用相关的,SPIN协议没有给出它的具体定义格式。SPIN协议的有点是采用协商机制,避免了资源的盲目使用,但在某种情况下,他会出现数据不可传递性的问题。
SPIN协议有3 种类型的消息,即ADV、REQ和DATA
1)ADV——用于新数据广播。当一个节点有数据需要传输时,它可以用ADV数据包对外广播;
2)REQ——用于请求发送数据。当一个节点希望接收DATA数据包时,发送REQ数据包;
3)DATA——数据包。包含了附上元数据头的传感器采集的数据的数据包。

1.2 代码实现
1.2.1 prepare.m

n=100;
spread=0.2;
X=rand(n, 1);
Y=rand(n, 1);
start_index=randi(n);
end_index=randi(n);
hold on
plot(X, Y, '.', 'markersize', 20);
plot(X(start_index), Y(start_index), 'm.', 'markersize', 20);
plot(X(end_index), Y(end_index), 'm.', 'markersize', 20);save X;
save Y;
save spread;
save start_index;
save end_index;

1.2.2 spin.m

end_index=load('end_index.mat');
X=end_index.X;
Y=end_index.Y;
spread=end_index.spread;
start_index=end_index.start_index;
end_index=end_index.end_index;
n=length(X);
times=zeros(n, 1);
found=zeros(n, 1);
for i=1:nfor j=1:ndmat(i,j)=sqrt((X(i)-X(j))^2+(Y(i)-Y(j))^2);end
end
queue=zeros(n*100, 1);
queue(1)=start_index;
found(start_index)=1;
front=2;
rear=1;
hold on;
plot(X, Y, 'o');
while found(end_index)==0 && rear<frontfor i=1:nif i~=queue(rear) && dmat(queue(rear), i)<=spread && found(i)==0line([X(queue(rear)),X(i)], [Y(queue(rear)),Y(i)]);queue(front)=i;found(i)=1;times(i)=times(i)+1;front=front+1;endendrear=rear+1;
end
for i=1:nif times(i)<=5plot(X(i), Y(i), '.', 'markersize', 20);elseif times(i)<=10plot(X(i), Y(i), 'g.', 'markersize', 20);elseif times(i)<=20plot(X(i), Y(i), 'c.', 'markersize', 20);elseif times(i)<=50plot(X(i), Y(i), 'y.', 'markersize', 20);elseif times(i)<=100plot(X(i), Y(i), 'k.', 'markersize', 20);elseplot(X(i), Y(i), 'r.', 'markersize', 20);end
end
plot(X(start_index), Y(start_index), 'm.', 'markersize', 20);
plot(X(end_index), Y(end_index), 'm.', 'markersize', 20);
disp(sum(times));

2、仿真结果和分析
2.1 仿真结果

2.2 结果分析
虽然SPIN协议解决了Flooding协议的“内爆”和“重叠”问题,采用协商机制有效的避免了资源的盲目使用。但是SPIN协议还是存在“盲目转发”、“数据不可达”等问题。“盲目转发”问题缩短了网络生命周期,降低了网络的性能,而“数据不可达”问题会导致网络信息无法收集,使无线传感器网络失去应用的意义。

2.3 结论
SPIN协议较适用于大型的网络拓扑,而在小型网络中Flooding的优势更为明
显,这是因为小型网络中存在的数据重叠或内爆现象的概率都较低,而且小网络的数据传输本来就小,这时候SPIN所带来的数据元,及邻居节点的回应信息都不可忽略,这就必然消耗额外的能量,而且没有必然消耗额外的时间去发送信息元及回应信息。
SPIN算法的健壮性较高, 如果有节点退出了网络,则该节点的邻点在发送ADV命令时,就不会收到该节点的REQ回应,此时该数据会被其他正常的节点所接收;SPIN算法节能性较高,其快速性较洪泛算法提高很多。SPIN路由协议具有很高的可用性,能够解决传统协议具有的内爆、重叠等问题。但它是针对理想网络设计的。

SPIN Routing Algorithm相关推荐

  1. An Energy-Efficient Ant-Based Routing Algorithm for Wireless Sensor Networks (无线传感网中基于蚁群算法的能量有效路由)2

    牙说:接着上一篇继续写. 论文标题:An Energy-Efficient Ant-Based Routing Algorithm forWireless Sensor Networks 作者:Tia ...

  2. An Energy-Efficient Ant-Based Routing Algorithm for Wireless Sensor Networks (无线传感网中一种基于蚁群算法的能量有效路由)

    牙说:这篇论文是研究蚁群算法在能量有效路由协议的过程中必读的一篇文章,原是全英文,在这里按照自己的理解大致翻译成中文,好好学习,与君共勉. 论文题目:An Energy-Efficient Ant-B ...

  3. RFC8402 Segment Routing Architecture 翻译

     黑色为原文 紫色为翻译 红色为校注 Internet Engineering Task Force (IETF)                                            ...

  4. Capsule:Dynamic Routing Between Capsules

    Capsule介绍 Hinton在<Dynamic Routing Between Capsules>中提出了capsule,以神经元向量代替了从前的单个神经元节点,以dynamic ro ...

  5. Mininet FAQ

    2019独角兽企业重金招聘Python工程师标准>>> FAQ lantz edited this page on 20 Oct · 324 revisions Pages 65 M ...

  6. RabbitMQ 快速入门

    1.简介 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue protocol)的开源实现.AMQP高级消息队列,说白了就是一个开源的消息中间件.它能解决 ...

  7. 用Latex写IEEE论文

    如果在搞科研,想在IEEE上发表文章,那么就不得不用IEEE的论文模板,分为doc版本和Tex版本.Tex是高德纳·纳什所写,大牛级的任务,写过<计算机程序设计艺术>,曾经是美国最年轻的科 ...

  8. 计算机网络总结:第四章 网络层

    第四章 网络层 4.1 概述 4.1.1 转发和路由选择 转发(forwarding):当一个分组到达路由器的一条输入链路时,路由器必须将该分组移动到适当的输出链路 路由选择(routing):当分组 ...

  9. Feedback about (Blockchain OR ML) AND (logistics)

    Feedback about (Blockchain OR ML) AND (logistics) 文章目录 Feedback about (Blockchain OR ML) AND (logist ...

最新文章

  1. python网络信息提取_python网络爬虫与信息提取I
  2. setFilters使用方法
  3. tableView的单选问题
  4. UOJ - #117. 欧拉回路(模板)
  5. LeetCode 659. 分割数组为连续子序列(哈希)
  6. java8新特性(6)— 日期与时间
  7. 日志组件logback的介绍及配置使用方法(一)
  8. mysql三高讲解(三)3.1 如何提高where效率
  9. 裁员的沃森健康,问题重重的IBM人工智能业务
  10. matlab子函数中使用全局变量的使用方法
  11. 怎么将拍的照片免费转成PDF文件呢
  12. 企业微信登录本地调试
  13. win10打开计算机出现马赛克,传授win10系统在线播放视频出现马赛克的技巧
  14. 数据库服务的启动和停止
  15. IOS唤起键盘,移动端页面放大
  16. 微信小程序iconfont不显示解决
  17. 使用Matlab把图片集合生成视频流文件
  18. Windows8.1设置默认输入法为英文
  19. 深度学习从入门到精通——图像分割之DeepLab系列算法
  20. 宝塔免费ssl证书是什么

热门文章

  1. DNS故障分析【转】
  2. 简述锂离子电池的分类及结构
  3. likely()与unlikely()函数的作用
  4. DSO Framer 使用介绍(ZZ)
  5. 联想笔记本更换固态硬盘和重装系统
  6. 解决win10一开机内存(8G)就占用70%多,查看任务管理器并没有占用内存很高的进程的问题
  7. Go-directed and habitual learning
  8. ntpd、ntpdate的区别
  9. python中使用opencv的HSV颜色空间提取物体
  10. (初学者视角)二极管和三极管的工作原理