NS2之移动节点能量模型
ns2_节点元素简介
t_(i,j)
代码片断(1)
set ns_ [new Simulator] set mhops_ [lindex $argv 0]
set nc_(0) [$ns_ node] set nd_ [$ns_ node] $ns_ duplex-link $nc_(0) $nd_ 100Mb 5ms DropTail
Packet
Packet Application Agent Node Link Node
...
Link
1.1 Node(结点) 创建
• • PA Create
Create %set n [$ns node] _o11 %$n id 0 %$n set id_ 0
PA %set ns [new Simulator] _o4 %delete $ns %set $ns can’t read “_o4”, no such variable
•
•
2.4 Link 配置
• • • • • SimpleLink instproc bw {} SimpleLink instproc delay {} SimpleLink instproc qsize {} Simulator instproc delay <n1> <n2> <delay> Simulator instproc bandwidth <n1> <n2> <bandwidth> Simulator instproc queue-limit <n1> <n2> <limit>
NS2拓扑元素
对象类概要
内容
• • • • • • 结点 (Node) 链路 (Link) 代理 (Agent) 应用 (Application) 分组 (Packet) 调度器 (Scheduler)
NS2实用教程
随机方向移动模型
路径选择机制
当目的点设定以后,节点需要选择一条从当前位置移动到目的点 位置的移动路径。目前大多数移动模型(例如随机路点移动模型等) 中的节点是选择直线运动到目的点。这些模型的路径选择机制是基于 节点处在一个无障碍的区域中。现实环境的地形复杂多变,经常有建 筑物、街道、障碍物等,由于它们的限制,节点通常不能沿直线直接 移动到目的点。因此,模型需要根据地理环境合理设计节点的移动路 径。设计移动路径会采用运动规划思想,较常见的两种方式是设计选 择最短路径和选择当前最短路径。
暂停时间
节点到达目的地之后,会先停留一段时间,然后选择新的目标点并 向其移动,停留的这段时间就是节点的暂停时间。不同移动模型,节点 的暂停时间设置不同。模型应根据节点所处的地理位置,以及节点之间 的相互关系,应该给不同的节点选择合理的暂停时间。在障碍物(建筑 )模型中,处于建筑物内、建筑物外的节点暂停时间不同。大部分移动 模型的节点的暂停时间均服从[Tpause_min,Tpause_max]均匀分布。
移动模型设计原则
一般来说,设计出来的移动模型应满足以下基本要求: 1、真实合理 移动模型能否真实合理反映现实场景中节点的运动特征对仿真结果 的可靠性产生非常重要的影响。实际场景中,移动设备通常是由人 携带或由人控制,所以移动模型中节点的运动应该符合人的运动特 征。 2、实现简单 移动模型作为一种辅助分析工具,应当实现简单,方便操作。简单 有效的模型更具针对性,更受用户的青睐。 3、参数可调 实际场景变化多端,好的移动模型可以通过调节参数以适应不同的 现实场景。
移动模型的构成
一般来说,设计出来的移动模型的构成包括下面几个方面: 1、目的选择机制 2、路径选择机制 3、暂停时间 4、仿真场景
目的选择机制
目的选择机制包含节点的起始点以及目的点的选择方式。现有移 动模型中有多种目的选择机制。一种较简单的目的地选择方式是在仿 真区域中随机选择一个位置作为节点目的地,如随机方向移动模型等 。一些空间相关性的移动模型节点目的点有区域限制,可知目的点选 择机制对节点的空间分布有直接的影响。考虑到现实场景中的节点相 互之间有一定的关系,以及周围环境对节点存在一定的影响,一些基 于社会性的移动模型不是随机选择目的点,而是设定节点移动函数, 以此来确定节点的目的点位置。
无线传感器网络中的节点能耗分析方法
无线传感器网络中的节点能耗分析方法无线传感器网络(Wireless Sensor Network,WSN)是一种由大量分布在监测区域内的无线传感器节点组成的网络系统。
这些节点通过无线通信协作工作,收集和传输环境信息。
然而,由于节点的能源有限,如何有效地分析和管理节点的能耗成为了WSN研究的重要课题之一。
本文将介绍一些常用的节点能耗分析方法。
一、能耗模型能耗模型是分析节点能耗的基础。
常用的能耗模型有能量消耗模型和电池模型。
能量消耗模型通常基于节点的功能和通信行为,用于估计节点在不同操作模式下的能耗。
电池模型则用于描述电池的能量消耗特性,包括电池的容量、电流和电压等参数。
二、能耗分析方法1. 基于仿真的方法基于仿真的方法通过构建节点能耗模型,模拟节点在不同场景下的能耗情况。
这种方法可以通过调整仿真参数来探索不同的能耗策略和算法。
常用的仿真工具有NS-2、NS-3等。
2. 基于理论分析的方法基于理论分析的方法通过数学建模和分析,推导出节点的能耗方程。
这种方法通常需要对网络的拓扑结构、通信协议和节点行为进行详细的分析。
例如,可以通过分析节点在不同状态下的能耗和传输距离的关系,来评估节点的能耗。
3. 基于实测数据的方法基于实测数据的方法通过实际部署节点并收集能耗数据,来分析节点的能耗情况。
这种方法可以更真实地反映节点在实际环境中的能耗特性。
通过收集和分析大量的实测数据,可以得到节点能耗的统计特性和规律。
三、能耗优化策略在分析节点能耗的基础上,可以采取一些优化策略来延长节点的寿命和提高网络性能。
常用的能耗优化策略有以下几种:1. 路由优化通过优化路由算法和协议,减少节点之间的通信距离和传输功耗。
例如,可以采用多跳路由、集群化等方法来减少节点的传输功耗。
2. 能量调度通过调度节点的工作模式和任务分配,合理分配节点的能量消耗。
例如,可以根据节点的能量剩余情况,动态调整节点的工作模式和任务负载,以达到能耗均衡和寿命延长的目的。
能量模型说明
计算能量模型分析报告程序中的计算能量消耗的模型有以下几种:一、发送一个数据包消耗的能量的模型:发送一个数据包消耗的能量dEng为:发送功率P_tx 与发送时间txtime的乘积,公式为:dEng = P_tx * txtime现有能量energy_为:原节点处的能量energy_与消耗的能量dEng 之差,公式为:energy_ = energy_ - dEng总的发送数据包消耗的能量et_为:原先消耗的et_与现在消耗能量dEng之和,公式为:et_=et_+dEng二、接收一个数据包消耗的能量模型:接收一个数据包消耗的能量dEng为:接收功率P_rcv与接收时间rcvtime的乘积,公式为:dEng = P_rcv * rcvtime现有能量energy_为:原节点处的能量energy_与消耗的能量dEng 之差公式为:energy_ = energy_ - dEng总的接收数据包消耗的能量er_为:原先消耗的er_与现在消耗能量dEng之和,公式为:er_=er_+dEng三、空闲状态的能量消耗模型:空闲状态消耗的能量dEng为:空闲状态功率P_idle与空闲时间idletime的乘积公式为:dEng = P_idle * idletime现有能量energy_为:原节点处的能量energy_与消耗的能量dEng 之差公式为:energy_ = energy_ - dEng空闲状态消耗的能量ei_为:原先消耗的ei_与现在消耗能量dEng之和,公式为:ei_=ei_+dEng四、睡眠状态的能量消耗模型:睡眠状态消耗的能量dEng为:睡眠状态功率P_sleep与睡眠时间sleeptime的乘积公式为:dEng = P_sleep * sleeptime现有能量energy_为:原有的能量energy_与消耗的能量dEng 之差公式为:energy_ = energy_ - dEng睡眠状态消耗的能量es_为:原先消耗的es_与现在消耗能量dEng之和,公式为:es_=es_+dEng五、传输能量模型:传输消耗的能量dEng为:睡眠状态功率P_transition与睡眠时间transitiontime的乘积公式为:dEng = P_transition * transitiontime现有能量energy_为:原有的能量energy_与消耗的能量dEng 之差公式为:energy_ = energy_ - dEng。
基于状态转移的感知节点能耗模型研究与设计
mo e b e n n la o r lt n a n h d l so o e n e se e r l b l ya d u eun s f h smo e d l y d f ig a c e r c reai mo gt e mo u e fan d ,a d t n t t d t ei i t n s f l e so i d l i o h e h a i t i h P T n t e O NE .T e smu ain r s l h w t i e e g — o s mp in mo e a rvd h o ei a u d n e frc mp n n e h i lto e ut s o s n r c n u t d l n p o i e te r t lg i a c o o e t — s h y o c c o s
一种减少移动自组织网络能量消耗的新方法
一种减少移动自组织网络能量消耗的新方法苏赛语;王小平;林秦颖;王路通【摘要】Route establishment between source and destination is a difficult process in mobile ad hoc networks.Many approaches have been developed to find a route from source to destination without considering the stability of the nodes and it's link life time.It affect the network performance such as packet delivery ratio,delay,energy consumption and so on.In order to improve the performance of MANETs,both network lifetime and energy consumption associate with intermediate nodes should be jointly take into account for devising routing schemes in MANETs.This would improve the packet delivery ratio and reduce the end to end delay.In this paper,lifetime of node is measured based on the residual energy and energy consumption rate of the node.And then we use it to devise a new routing scheme called energy optimization routing based on the variable transmission power technique and to minimize the over utilization of nodes.Via NS2 simulation,comparing with AODV and LER,we demonstrate that our proposed algorithm results in improved in network lifetime,packet delivery ratio,and reduce the energy consumption,end to end delay and control the amount of the RREQ packet number.%移动自组织网络中,建立从源端到目的端路径的过程比较困难.提出了许多方法用来寻找从源端到目的端的路径,但都没有考虑节点稳定性和它的链路生存时间.这就会对网络数据传输效率、延时、能量消耗等方面的性能造成影响.为了提高移动自组织网路的性能,设计移动自组织网络路由协议时,应当把网络生存时间、能量消耗、以及中间节点同时考虑进来.这将会提高数据传输效率,减少端到端延时.根据节点的剩余能量和节点能量消耗速率,测量了节点的生存时间.根据节点的生存时间,结合可变功率传输技术,为了减少节点的过度利用,设计了一种新的能量优化路由机制.通过NS2仿真,与AODV和LER相比,证实了提出的算法提高了网络生存时间和数据传输效率.并且降低了能量消耗和端到端延时,另外也控制了RREQ包的数量.【期刊名称】《火力与指挥控制》【年(卷),期】2018(043)003【总页数】6页(P63-68)【关键词】移动自组织网络;路由协议;网络生存时间;能量消耗;NS2【作者】苏赛语;王小平;林秦颖;王路通【作者单位】空军工程大学航空航天工程学院,西安710038;空军工程大学航空航天工程学院,西安710038;西安交通大学电信学院,西安710045;空军工程大学航空航天工程学院,西安710038;西安交通大学电信学院,西安710045;空军工程大学航空航天工程学院,西安710038【正文语种】中文【中图分类】TP3930 引言移动自组织网络(Mobile Ad Hoc Networks,MANETs)是由一群移动节点,通过无线连接组成的临时网络,并不需要任何基础设施[1]。
NS2之移动节点邻居节点发现
分类:NS22011-12-10 19:54 738人阅读评论(0) 收藏举报listmobilemethodsaccessobject移动节点的邻居节点的发现函数实现如下:[cpp]view plaincopy1.//You can use the following methods to discover neighbors:2.//1. Use Hello Packets for *neighbor* discovery.3.//2. Use Communication range for neighbour discovery.4.//3. Use Nodes Positions for *neighbor* discovery.5.6.void Node::addNeighbor(Node * neighbor) {7.8.int flag=0;9.neighbor_list_node* my_neighbor_list;10.my_neighbor_list=neighbor_11.list_;12.//cout <<"MMMMM"<<my_neighbor_list->13.nodeid<<endl;14.//return;15.16.while(my_neighbor_list)17. {18.if(my_neighbor_list->nodeid == neighbor->nodeid())19. {20. flag = 1;21.break;22. }23.else24. {25. my_neighbor_list=my_neighbor_list->next;26. }27. }28.29.30.//cout<<"MMM "<<my_neighbor_list->nodeid<<endl;31.if(flag == 1)32. {33.//neighbour already exist do nothing34. }35.else36. {37. neighbor_list_node* nlistItem = (neighbor_list_node38.*)malloc(sizeof(neighbor_list_node));39. nlistItem->nodeid = neighbor->nodeid();40. nlistItem->next = neighbor_list_;41. neighbor_list_=nlistItem;42. }43.44.45.46.}47.48.49.//After that you can easily get access to any node's neighbor list by creating50.//its object and calling its neighbor list.51.52.Node* m_node = Node::get_node_by_address(this->addr());53.neighbor_list_node* my_mobile_neighbor_list;54.my_mobile_neighbor_list = m_node->neighbor_list_;55.56.while(my_mobile_neighbor_list)57. {58. cout<<"## Mubashir Neighbor ID:"<<my_mobile_neighbor_list->nodeid<<endl;59. my_mobile_neighbor_list=my_mobile_neighbor_list->next;60. }61.62.cout<<"node id : " <<put here node id<<" Mubashir Neighbor list contains ID:"<<my_mobile_neighbor_list-> nodeid<<endl;。
Sensor Relocation in Mobile Sensor Networks
移动传感器网络的传感器搬迁摘要:最近有大量的研究一直在使用移动传感器网络中节点的初始部署协助。
移动传感器是在这样的环境中非常有用,因为他们可以移动到的位置,以满足覆盖要求。
本文探讨了运动能力搬迁传感器处理传感器故障或应对新的事件。
我们定义传感器搬迁的问题,并提出一个两阶段的传感器搬迁解决方案:首先确定冗余传感器,然后搬迁到目标位置。
我们提出了一个网格法定人数消息复杂度低最接近的冗余传感器解决方案,能够快速定位,并提出,使用级联运动搬迁冗余传感器在及时,高效和平衡的方式。
仿真结果验证了所提出的方案优于其他方面的搬迁时间,总的能源消耗,最小剩余能量。
引言由于许多吸引人的特点,如体积小,成本低,传感器网络的传感器节点[10],[13],[15],[17],[1]已经成为了许多军事和民用领域,包括军事侦察,智能家居[18],远程环境监控,和厂内的机械手控制和指导。
为了正确地感知现象,必须适当地部署传感器节点发出的遥感任务的圆满完成以达到足够的覆盖水平[5],[14]。
在许多潜在的工作环境,如远程苛刻的领域或灾区传感器部署,不能进行手动或精确。
此外,一旦部署中,传感器节点可能会失败,需要被移动的节点创建的故障的传感器克服了覆盖孔。
在这些情况下,有必要使用移动传感器[20],[21],它可以移动,以提供所需的覆盖范围。
的一个例子移动传感器Robomote的的[16]。
这些传感器是小于0.000047立方米的成本低于150美元。
在本文中,我们解决传感器搬迁的问题,即,将先前部署的传感器克服了其他节点故障,或发生的事件,需要移动其位置传感器响应。
该传感器搬迁是不同于现有的工作集中部署传感器的移动传感器,运动传感器提供一定的初始覆盖[11],[12],[20],[21],[24]。
搬迁传感器与传感器部署相比,有许多特殊的困难。
首先,传感器搬迁可能有严格的响应时间要求。
例如,如果传感器监测安全敏感区域去世,另一个传感器应该尽快移动到更换。
【国家自然科学基金】_按需距离矢量路由协议_基金支持热词逐年推荐_【万方软件创新助手】_20140801
2011年 序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
2011年
2012年 科研热词 推荐指数 序号 路由协议 2 1 无线网状网 2 2 ns2仿真 2 3 高能量节点驱动 1 4 链路稳定性 1 5 路由开销 1 6 距离矢量路由 1 7 节点不相交路径 1 8 自适应网关 1 9 网络生命期 1 10 网络仿真 1 11 网关切换 1 网关公告 1 组播 1 移动自组网路由子层 1 移动自组网络控制系统 1 移动自组织网 1 流网络 1 无线自组网按需距离矢量(adov)路由协议 1 无线自组网按需平面距离矢量路由协议(aodv) 1 无线自组织网络 1 无线传感网络 1 接收信号强度指示 1 按需距离矢量路由协议 1 按需距离矢量的组播路由协议(maodv) 1 微移动 1 安全 1 多路径路由协议 1 多接口多信道 1 可信路由 1 功率控制 1 信誉模型 1 主观逻辑 1 qos路由 1 hoc按需距离矢量路由协议 1 aodv改进 1 adhoc网络 1 ad 1
2009年 序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14
科研热词 预测 路由维护 路由协议 移动ad hoc网络 混合无线mesh网络 无线网络 无线网状网 多径路由协议 动态源路由协议 丢包率 opnet hwmp aodv ad hoc按需距离矢量路由协议
推荐指数 1 1 1 1 1 1 1 1 1 1 1 1 1 1
2008年 序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
第3讲 NS2语法及结果分析
用NS执行模拟后,显示如下:
(1)网络原始图
(2)网络运行仿真图(节点1至节点2)
(3)网络运行仿真图(节点至节点1至节点2)
结果分析
End-to-End Delay、Jitter、Packet Loss、和Throughput
Nam、awk、xgragh、gnuplot等
模拟拓扑
链路
链路(Link)是网络拓扑的第二部分,是NS2复合网
络组件的另一个大类。 创建简单链路:
set ns [new Simulator] $ns simplex-link [node0] [node1] [bandwidth] [delay] [queue_type] 这个命令建立了一条从node0到node1的链路,改link的带宽为 bandwidth,延迟为delay,队列类型为queue_type。 双向链路的创建也相似。 例如:创建一条从n0到n2的链路,队列类型为DropTail $ns duplex-link $n0 $n2 15Mb 10ms DropTail
简单的NS2例题
创建一个如下图拓扑结构,加入一个利用UDP作为传 送协议的CBR信息源,并将所有信息记录到一个trace文件 中。
n0
3Mbps 1ms
n1
5Mbps 15ms
n2
代码如下:
set ns [new Simulator] #Enabling tracing of all events of the simulation set f [open ex.nam w] $ns namtrace-all $f
代理(Agent)
Agent代表了网络层分组的起点和终点,并被用于实
现如TCP和UDP等网络协议。 Agent类是由C++和Otcl共同实现的。 Agent可以实现网络层、运输层等多个层次的协议, 对于一些运输层的协议(比如UDP),分组的大小和 发送时间通常是由代表应用层的独立的对象来控制的, 这些控制是通过Agent为应用程序开放的应用程序接 口(API)来进行的。对于低层使用的Agent( 比如 路由Agent),分组的大小和发送时间通常由Agent自 己控制。
NS-2随机路点模型在松散网络中节点分布研究
方式 , 以一 种 完 全 不 可 预 测 的 方 式 运 动 , 中 节 点 其
1 N- S2与移动模 型
N一 S2是一 种面 向对象 的 离散 事 件模 拟 器 , 即所 有 的仿真 由离 散事 件 驱 动 。 目前 N 一 以用 于仿 s2可 真各种 不 同的 I P网 , 已经 实 现 的 一些 仿 真有 : 络 网 传 输协 议 , T P和 U P 业 务 源 流 量 产 生 器 , 如 C D ; 如
究 方 向 : dhe网 络路 由协 议 。 A o
69 16
科
学
技
术
与
工
程
1 1卷
随机路 点模 型 中 , 点 在 随 机 位 置 上 , 定 一 节 选 随机 目的地 , 以给 定 速 率 ( 围 ) 范 向该 点 移 动 , 达 到
备份 。备份 多路 径 协议 中 , 路 径通 常 是 节 点独 立 各
@
2 1 Si eh E gg 0 c T c . nr 1 . .
N . 机 路 点 模 型在 松 散 网络 S2随 中 节 点 分布 研 究
叶 亮 , 李 文 昊 陈德 应。 沙 学 军
( 哈尔滨工业大学通信技术研究所 电子科学与技术 系 , , 哈尔滨 10 8 ) 50 0
路点 ( a d m Wap i ) 型 、 哈 顿 ( n a a ) R no yo t 模 n 曼 Mah t n t 模 型等 。 随机行走 模 型也 可 称 为 “ 朗 运 动 ” 的 移 动 布 式
作为 网络仿 真工 具 , S( ewr iua r ) N 一 N tokSm lo一 t 2
方 向 以给 定 速 率 运 动 到 场 景 边 界 , 留 一 段 时 间 停 后 , 以该 点 为 起 点 , 再 向随 机 方 向运 动 到 另 一 边 界 点 , 此往 复 。有 学者 研 究 了该 模 型在 二 维 空 间 如
湿热地区室外动态热环境中二节点模型的验证及修正
湿热地区室外动态热环境中二节点模型的验证及修正湿热地区是指气候炎热湿润的地区,如南方沿海地区。
在这种环境下,人体容易感到闷热,并且容易出现脱水和中暑等热应激问题。
研究湿热地区室外动态热环境对于人们的生活和工作非常重要。
二节点模型是一种简化的人体热代谢模型,根据人体热平衡原理,将人体分为核心区和皮肤区,并考虑了人体代谢产生的热量输送和换热过程。
本文将对湿热地区室外动态热环境中二节点模型进行验证和修正。
需要对湿热地区室外动态热环境进行数据采集和分析。
可以使用气象站等设备采集环境温湿度、辐射强度等数据,并根据这些数据计算人体周围空气的温度、湿度和辐射量。
还可以通过测量人体皮肤表面的温度和湿度,来获取人体的热感受参数。
这些数据可以用于验证和修正二节点模型。
需要对二节点模型进行验证。
将采集到的环境参数和人体热感受参数代入二节点模型中,计算得到人体的热感受指数,如温度满意度和湿度满意度。
然后,与实际的人体热感受数据进行对比分析,评估二节点模型的准确性和适用性。
如果模型的预测结果与实际数据基本吻合,则说明模型可以较好地用于湿热地区室外动态热环境的分析。
根据对二节点模型的验证结果,进行修正和改进。
根据实际数据和模型预测结果之间的差异,可以调整模型中的参数和公式,使模型更加符合湿热地区室外动态热环境的特点。
可以调整模型中的热生产率和热散失率等参数,以提高模型的准确性和精度。
湿热地区室外动态热环境中二节点模型的验证和修正是一个重要的研究课题,对于改进人体热舒适性评价和热环境设计具有重要意义。
未来的研究可以进一步深入探讨二节点模型的准确性和适用性,并探索更加精细化的热舒适性评价方法。
无线传感器网络中的能量优化技术
无线传感器网络中的能量优化技术一、引言随着信息技术和通信技术的发展,无线传感器网络已经广泛应用于各个领域,如农业、工业、环境监测和智能家居等。
但是,传感器节点的能量是有限的,如何对其进行有效的能量管理和优化已经成为当前研究的重点问题之一。
二、无线传感器网络的能量管理无线传感器网络中的节点是由能量有限的电池供电的,而且电池的更换十分不方便和消耗资源,因此需要对节点的能量进行有效的管理。
1. 能量模型能量模型是无线传感器网络中进行能量管理的基础,可以用于计算节点的剩余能量,预测其寿命等。
目前,比较常用的能量模型有Voltage Source Model(VSM),Energy Consumption Model (ECM),以及Battery Model(BM)等。
2. 能量优化策略能量优化策略是指通过合理的应用技术来降低网络节点的功率消耗从而延长整个网络的寿命。
常用的能量优化策略有以下几种:(1)数据压缩传感器网络中的数据通信量是非常大的,因此对数据进行压缩可以有效地减少节点的能量消耗。
(2)协作通信节点之间可以进行协作通信,从而避免过多的数据传输和重复采集,从而减少功耗。
(3)能量平衡对于网络中的节点,通过研究能量平衡与能量转移方法,可以使得不同节点之间能量的利用更加平衡,延长整个网络的寿命。
三、无线传感器网络的能量优化技术针对目前无线传感器网络中能量的有限性和节点寿命短的问题,部分学者提出了各种能量优化技术,以下将对部分常见的技术进行介绍。
1. 路径优化技术路径优化技术通常使用具有高效能耗比的节点作为中继节点,而非真正的“最短路径”。
利用数学模型和优化算法,进一步优化则可以有效减少环境对端到端数据传输的辐射和干扰,从而最大限度地减少传输能源的消耗。
2. 数据蒸馏技术数据蒸馏技术是指通过将同等价值或相似特征的数据一起处理来减少网络中的数据重复度和消耗。
经过数据蒸馏的数据集具有较好的可压缩性和不同内容的可区分性,并且可以通过自适应生成来自动更新数据集,调整故障处理算法等。
基于NS2的能量模型的研究
《工业控制计算机》2013年第26卷第1期在介绍了免费网络仿真平台NS2[1]构成及其原理、仿真过程的基础上,对NS2上无线网络能量模型的仿真结果进行分析,为今后进一步研究无线网络的功率问题奠定基础。
1网络仿真平台NS2目前知名的网络仿真软件主要有OPNET 、Insane 、REAL 、NS 等。
NS2是一种针对网络技术的源代码公开的、免费的软件模拟平台。
NS2以它对有线和无线网络、局域网和广域网、网络分层模型各协议的丰富支持、强大的二次开发能力以及开放的体系结构、可扩展、易配置和可编程的离散时间驱动等特性,在网络性能研究领域得到了广泛的应用[2]。
NS2支持众多的协议,并提供了丰富的测试脚本,可以用于仿真各种不同的IP 网,已经实现的一些仿真有:网络传输协议,比如TCP 和UDP ;业务源流量产生器,比如FTP 、Telnet 、Web CBR 和VBR ;路由队列管理机制,比如Droptail ,RED 和CBQ ;路由算法,比如Dijkstra 等[3]。
1.1NS2的基本组成NS2包含Tcl /Tk 、OTcl 、NS 、Tclcl ,如图1,其中Tcl 是一种开放性的脚本语言,用来对NS2进行编程;Tk 是Tcl 的图形界面开发工具,帮助用户在图形环境下开发图形界面;OTcl 是基于Tcl /Tk 的面向对象扩展,有自己的类层次结构;NS2为本软件包的核心,是面向对象的仿真器,用C++编写,以OTcl 解释器作为前端;Tclcl 则提供NS2和OTcl 的接口,使对象和变量出现在两种语言中[4]。
1.2NS2的核心NS2(Network Simulator ,version 2)是一种面向对象的网络仿真器,由UC Berkeley 开发而成,其核心部分是一个离散事件模拟器[5]。
NS2本质上是一个离散事件模拟器,其本身有一个虚拟时钟,所有仿真都由离散事件驱动[6]。
其包含的事件调度器负责记录当前时间,调度网络事件队列中的事件,并提供函数产生新事件,指定事件发生的时间。
随机方向移动模型
移动模型设计原则
一般来说,设计出来的移动模型应满足以下基本要求: 1、真实合理 移动模型能否真实合理反映现实场景中节点的运动特征对仿真结果 的可靠性产生非常重要的影响。实际场景中,移动设备通常是由人 携带或由人控制,所以移动模型中节点的运动应该符合人的运动特 征。 2、实现简单 移动模型作为一种辅助分析工具,应当实现简单,方便操作。简单 有效的模型更具针对性,更受用户的青睐。 3、参数可调 实际场景变化多端,好的移动模型可以通过调节参数以适应不同的 现实场景。
路径选择机制
当目的点设定以后,节点需要选择一条从当前位置移动到目的点 位置的移动路径。目前大多数移动模型(例如随机路点移动模型等) 中的节点是选择直线运动到目的点。这些模型的路径选择机制是基于 节点处在一个无障碍的区域中。现实环境的地形复杂多变,经常有建 筑物、街道、障碍物等,由于它们的限制,节点通常不能沿直线直接 移动到目的点。因此,模型需要根据地理环境合理设计节点的移动路 径。设计移动路径会采用运动规划思想,较常见的两种方式是设计选 择最短路径和选择当前最短路径。
移动模型的构成
一般来说,设计出来的移动模型的构成包括下面几个方面: 1、目的选择机制 2、路径选择机制 3、暂停时间 4、仿真场景
目的选择机制
目的选择机制包含节点的起始点以及目的点的选择方式。现有移 动模型中有多种目的选择机制。一种较简单的目的地选择方式是在仿 真区域中随机选择一个位置作为节点目的地,如随机方向移动模型等 。一些空间相关性的移动模型节点目的点有区域限制,可知目的点选 择机制对节点的空间分布有直接的影响。考虑到现实场景中的节点相 互之间有一定的关系,以及周围环境对节点存在一定的影响,一些基 于社会性的移动模型不是随机选择目的点,而是设定节点移动函数, 以此来确定节点的目的点位置。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
分类:NS22011-12-10 19:59 1024人阅读评论(0) 收藏举报tclrandomdelaylistfloatclass移动节点能量函数分析代码:[cpp]view plaincopy1.#include <stdarg.h>2.#include <float.h>3.4.#include "random.h"5.#include "energy-model.h"6.#include "mobilenode.h"7.#include "god.h"8.9.static class EnergyModelClass : public TclClass10.{11.public:12. EnergyModelClass ():TclClass ("EnergyModel") {}13. TclObject *create (int argc, const char *const *argv) {14.if (argc == 8) {15. MobileNode *n=(MobileNode*)TclObject::lookup(argv[4]);16.return (new EnergyModel(n, atof(argv[5]),17. atof(argv[6]), atof(argv[7])));18. } else {19. Tcl::instance().add_error("Wrong arguments to ErrorModel");20.return 0;21. }22. }23.} class_energy_model;24.25.void EnergyModel::DecrTxEnergy(double txtime, double P_tx)26.{27.double dEng = P_tx * txtime;28.if (energy_ <= dEng)29. energy_ = 0.0;30.else31. energy_ = energy_ - dEng;32.if (energy_ <= 0.0)33. God::instance()->ComputeRoute();34.}35.36.37.void EnergyModel::DecrRcvEnergy(double rcvtime, double P_rcv)38.{39.double dEng = P_rcv * rcvtime;40.if (energy_ <= dEng)41. energy_ = 0.0;42.else43. energy_ = energy_ - dEng;44.if (energy_ <= 0.0)45. God::instance()->ComputeRoute();46.}47.48.void EnergyModel::DecrIdleEnergy(double idletime, double P_idle)49.{50.double dEng = P_idle * idletime;51.if (energy_ <= dEng)52. energy_ = 0.0;53.else54. energy_ = energy_ - dEng;55.if (energy_ <= 0.0)56. God::instance()->ComputeRoute();57.}58.59.// XXX Moved from . These wireless stuff should NOT stay in the60.// base node.61.void EnergyModel::start_powersaving()62.{63. snh_ = new SoftNeighborHandler(this);64. snh_->start();65.66. afe_ = new AdaptiveFidelityEntity(this);67. afe_->start();68.69. state_ = EnergyModel::POWERSAVING;70. state_start_time_ = Scheduler::instance().clock();71.}72.73.void EnergyModel::set_node_sleep(int status)74.{75. Tcl& tcl=Tcl::instance();76.//static float last_time_gosleep;77.// status = 1 to set node into sleep mode78.// status = 0 to put node back to idle mode.79.// time in the sleep mode should be used as credit to idle80.// time energy consumption81.if (status) {82. last_time_gosleep = Scheduler::instance().clock();83.//printf("id=%d : put node into sleep at %f\n",84.// address_,last_time_gosleep);85. sleep_mode_ = status;86.if (node_->exist_namchan())87. tcl.evalf("%s add-mark m1 blue hexagon",node_->name());88. } else {89. sleep_mode_ = status;90.if (node_->exist_namchan())91. tcl.evalf("%s delete-mark m1", node_->name());92.//printf("id= %d last_time_sleep = %f\n",93.// address_, last_time_gosleep);94.if (last_time_gosleep) {95. total_sleeptime_ += Scheduler::instance().clock() -96. last_time_gosleep;97. last_time_gosleep = 0;98. }99. }100.}101.102.void EnergyModel::set_node_state(int state)103.{104.switch (state_) {105.case POWERSAVING:106.case WAITING:107. state_ = state;108. state_start_time_ = Scheduler::instance().clock();109.break;110.case INROUTE:111.if (state == POWERSAVING) {112. state_ = state;113. } else if (state == INROUTE) {114.// a data packet is forwarded, needs to reset 115.// state_start_time_116. state_start_time_= Scheduler::instance().clock(); 117. }118.break;119.default:120. printf("Wrong state, quit...\n");121. abort();122. }123.}124.125.void EnergyModel::add_neighbor(u_int32_t nodeid)126.{127. neighbor_list_item *np;128. np = neighbor_list.head;129.for (; np; np = np->next) {130.if (np->id == nodeid) {131. np->ttl = maxttl_;132.break;133. }134. }135.if (!np) { // insert this new entry136. np = new neighbor_list_item;137. np->id = nodeid;138. np->ttl = maxttl_;139. np->next = neighbor_list.head;140. neighbor_list.head = np;141. neighbor_list.neighbor_cnt_++;142. }143.}144.145.void EnergyModel::scan_neighbor()146.{147. neighbor_list_item *np, *lp;148.if (neighbor_list.neighbor_cnt_ > 0) {149. lp = neighbor_list.head;150. np = lp->next;151.for (; np; np = np->next) {152. np->ttl--;153.if (np->ttl <= 0){154. lp->next = np->next;155.delete np;156. np = lp;157. neighbor_list.neighbor_cnt_--; 158. }159. lp = np;160. }161.// process the first element162. np = neighbor_list.head;163. np->ttl--;164.if (np->ttl <= 0) {165. neighbor_list.head = np->next; 166.delete np;167. neighbor_list.neighbor_cnt_--; 168. }169. }170.}171.172.173.void SoftNeighborHandler::start()174.{175. Scheduler::instance().schedule(this, &intr, CHECKFREQ); 176.}177.178.void SoftNeighborHandler::handle(Event *)179.{180. Scheduler &s = Scheduler::instance();181. nid_->scan_neighbor();182. s.schedule(this, &intr, CHECKFREQ);183.}184.185.void AdaptiveFidelityEntity::start()186.{187. sleep_time_ = 2;188. sleep_seed_ = 2;189. idle_time_ = 10;190. nid_->set_node_sleep(0);191. Scheduler::instance().schedule(this, &intr,192. Random::uniform(0, idle_time_)); 193.}194.195.void AdaptiveFidelityEntity::handle(Event *)196.{197. Scheduler &s = Scheduler::instance();198.int node_state = nid_->state();199.switch (node_state) {200.case EnergyModel::POWERSAVING:201.if (nid_->sleep()) {202.// node is in sleep mode, wake it up203. nid_->set_node_sleep(0);204. adapt_it();205. s.schedule(this, &intr, idle_time_);206. } else {207.// node is in idle mode, put it into sleep208. nid_->set_node_sleep(1);209. adapt_it();210. s.schedule(this, &intr, sleep_time_);211. }212.break;213.case EnergyModel::INROUTE:214.// 100s is the maximum INROUTE time.215.if (s.clock()-(nid_->state_start_time()) <216. nid_->max_inroute_time()) {217. s.schedule(this, &intr, idle_time_);218. } else {219. nid_->set_node_state(EnergyModel::POWERSAVING);220. adapt_it();221. nid_->set_node_sleep(1);222. s.schedule(this, &intr, sleep_time_);223. }224.break;225.case EnergyModel::WAITING:226.// 10s is the maximum WAITING time227.if (s.clock()-(nid_->state_start_time()) < MAX_WAITING_TIME) { 228. s.schedule(this, &intr, idle_time_);229. } else {230. nid_->set_node_state(EnergyModel::POWERSAVING);231. adapt_it();232. nid_->set_node_sleep(1);233. s.schedule(this, &intr, sleep_time_);234. }235.break;236.default:237. fprintf(stderr, "Illegal Node State!");238. abort();239. }240.}241.242.void AdaptiveFidelityEntity::adapt_it()243.{244.float delay;245.// use adaptive fidelity246.if (nid_->adaptivefidelity()) {247.int neighbors = nid_->getneighbors();248.if (!neighbors)249. neighbors = 1;250. delay = sleep_seed_ * Random::uniform(1,neighbors); 251. set_sleeptime(delay);252. }253.}。