leach.alive文件分析仿真

2010-11-24 wcdj

 

在leach协议装好后,可以开始对wireless.alive文件进行分析。wireless.alive的结构如下:
第一列表示:运行时间,第二列表示:节点ID,第三列表示:节点状态(如果是1,表示该节点还存活;如果是0,则表示节点死亡)。
用awk编写脚本提取自己需要的信息。

下面是leach协议剩余节点和时间关系的awk脚本:(可参考如下)


[1] leach_alive1.awk

[2] leach_alive2.awk

 

把awk文件放在~/ns-allinone-2.27/ns-2.27/mit/leach_sims目录下:
cd ~/ns-allinone-2.27/ns-2.27/mit/leach_sims
[1] awk   -f   leach_alive1.awk   leach.alive   >   leach_alive.txt
[2] gwak   –v   outfile=leach_alive.txt   –f   leach_alive2.awk   leach.alive
然后会生成一个leach_alive.txt文件,里面是提取的数据。下一步就是用gnuplot画图了,具体操作见下图所示。
PS: Cygwin运行时一般只是进入字符操作界面,这时由于X-server没有启动,因此与图形界面相关的程序无法显示,只要先执行startx或者xinit后再运行gnuplot即可。在gnuplot运行后,可以通过set terminal命令查看此工具支持的图片格式。

 

pic

 

退出gnuplot之后,就会在~/ns-allinone-2.27/ns-2.27/mit/leach_sims目录下生成一个leach_alive.gif文件。
pic

 

从leach_alive.gif结果中,可以看出在每轮中还存活的节点数目。

PS:在leach中,可以从leach.out文件分析可知,一轮20秒,即每20秒选举一次簇首节点。上述图中横坐标注释为time更为合适。基站的位置为(50,175),注意基站的位置对仿真的影响比较大,可以测试不同的位置进行对比。

 

更多可参考:Jerry

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用[1]和引用,可以通过对不同场景下的LEACH协议进行仿真实验,来评估其性能表现。具体来说,可以通过以下步骤对经典的LEACH路由协议进行仿真: 1.确定仿真场景,包括网络规模、节点分布、基站位置等因素。 2.根据仿真场景,设置仿真参数,包括网络协议、节点能量、传输功率等。 3.运行仿真程序,记录仿真结果,包括簇建立情况、网络剩余能量、网络存活节点/死亡节点数量、网络生命周期等方面的数据。 4.根据仿真结果,分析LEACH协议的性能表现,优化簇头选择机制、设计合理的能量管理策略以及采用高效的通信协议等方式来提高其性能表现。 以下是一个Python实现的LEACH协议仿真程序的示例: ```python import random # 定义节点类 class Node: def __init__(self, id, energy): self.id = id self.energy = energy self.cluster_head = False self.cluster_id = -1 def __str__(self): return "Node(id={}, energy={}, cluster_head={}, cluster_id={})".format(self.id, self.energy, self.cluster_head, self.cluster_id) # 定义仿真函数 def simulate(num_nodes, network_size, base_station_pos, p, rounds): # 初始化节点 nodes = [] for i in range(num_nodes): x = random.uniform(0, network_size) y = random.uniform(0, network_size) energy = random.uniform(0.5, 1) nodes.append(Node(i, energy)) # 初始化基站 bs_x, bs_y = base_station_pos # 开始仿真 for r in range(rounds): # 簇头选举 for node in nodes: if node.energy > 0: if node.cluster_head: node.cluster_head = False else: if random.random() < p: node.cluster_head = True # 簇建立 clusters = {} for node in nodes: if node.cluster_head: node.cluster_id = node.id clusters[node.id] = [node] else: min_distance = float("inf") closest_cluster_head = None for cluster_head in clusters.keys(): distance = ((nodes[cluster_head].x - node.x) ** 2 + (nodes[cluster_head].y - node.y) ** 2) ** 0.5 if distance < min_distance: min_distance = distance closest_cluster_head = cluster_head if closest_cluster_head is not None: clusters[closest_cluster_head].append(node) node.cluster_id = closest_cluster_head # 数据传输 for cluster_head in clusters.keys(): for node in clusters[cluster_head]: if node.energy > 0: node.energy -= 0.01 if node.cluster_head: node.energy -= 0.05 distance = ((bs_x - node.x) ** 2 + (bs_y - node.y) ** 2) ** 0.5 if distance < 0.1: node.energy -= 0.1 elif distance < 1: node.energy -= 0.01 # 统计仿真结果 num_alive_nodes = 0 total_energy = 0 for node in nodes: if node.energy > 0: num_alive_nodes += 1 total_energy += node.energy print("Round {}: {} alive nodes, total energy = {}".format(r, num_alive_nodes, total_energy)) # 运行仿真程序 simulate(num_nodes=100, network_size=10, base_station_pos=(5, 5), p=0.1, rounds=10) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值