xxxx18一60岁hd中国/日韩女同互慰一区二区/西西人体扒开双腿无遮挡/日韩欧美黄色一级片 - 色护士精品影院www

  • 大小: 6KB
    文件類型: .py
    金幣: 1
    下載: 2 次
    發布日期: 2021-06-18
  • 語言: Python
  • 標簽: WSN??

資源簡介

實驗要求描述: 1、給定場景,給定WSN的節點數目,節點隨機分布,能按照LEACH的介紹,實現(每一輪)對WSN的分簇。請記錄前k輪(eg.k=10)/ 繪制第k輪時,網絡的分簇情況,即每個節點的角色(簇頭or簇成員)及其關系,如是簇成員,標記其所屬的簇頭 2.Note要求: ????節點數目不宜過小;每輪只完成分簇,不考慮通信過程;每輪可以以定時器確定,也可以以完成當輪分簇為準;簇成員在尋找簇頭時,以距離作為接收信號強弱的判斷依據;當選為簇頭的節點將,以后幾輪的分簇中將,不再成為簇頭,這個約束條件,在仿真中應能體現。

資源截圖

代碼片段和文件信息

#coding=gbk
import?numpy?as?np
import?matplotlib.pyplot?as?plt
?
?
def?dist(v_A?v_B):
????“““
????判斷兩個節點之間的一維距離
????:param?v_A:?A?二維向量
????:param?v_B:?B?二維向量
????:return:?一維距離
????“““
????return?np.sqrt(np.power((v_A[0]?-?v_B[0])?2)?+?np.power((v_A[1]?-?v_B[1])?2))
?
?
def?node_factory(N?energy=5000):
????“““
????生成N個節點的集合
????:param?N:?節點的數目
????:param?selected_flag:?標志:是否被選擇為簇首-->初始化為0
????:param?energy:?能量
????:return:?節點集合nodes=[[xye][xye]...]
????“““
????nodes?=?[]
????selected_flag?=?[]
????for?_?in?range(N):
????????#?在1*1矩陣生成[xye]坐標
????????node?=?[np.random.random()?np.random.random()?energy]
????????nodes.append(node)
????????#?print(“生成的節點為:“?node)
????????#?對應的選擇標志初始化為0
????????selected_flag.append(0)
?
????#?print(“生成:“?len(nodes)?“個節點“)
????#?print(“初始化標志列表為“?selected_flag)
????return?nodesselected_flag
?
?
def?sel_heads(rnodes?flags):
????“““
????根據閾值選取簇頭節點
????:param?r:?輪數
????:param?nodes:?節點列表
????:param?flags:?選擇標志
????:param?P:?比例因子
????:return:?簇首列表heads簇成員列表members
????“““
????#?閾值函數?Tn?使用leach計算
????P?=?0.05?*?(100?/?len(nodes))
????Tn?=?P?/?(1?-?P?*?(r?%?(1?/?P)))
????#?print(“閾值為:“?Tn)
????#?簇首列表
????heads?=?[]
????#?簇成員列表
????members?=?[]
????#?本輪簇首數
????n_head?=?0
????#?對每個節點生成對應的隨機數
????rands?=?[np.random.random()?for?_?in?range(len(nodes))]
????#?print(“隨機數為:“?rands)
?
????#?遍歷隨機數列表,選取簇首
????for?i?in?range(len(nodes)):
????????#?隨機數低于閾值-->選為簇首
????????if?rands[i]?<=?Tn:
????????????flags[i]?=?1
????????????heads.append(nodes[i])
????????????n_head?+=?1
????????????#?被選為簇頭,E-1
????????????nodes[i][2]?-=?1
????????????#?print(“第“?n_head?“個簇首當前能量:“?nodes[i][2])
????????#?隨機數高于閾值
????????else:
????????????members.append(nodes[i])
?
????#?print(“簇首為:“?len(heads)?“個-->“?heads)
????#?print(“簇成員為:“?len(members)?“個-->“?members)
????return?heads?members
?
?
def?classify(nodesflag?mode=1?k=20):
????“““
????進行簇分類
????:param?nodes:?節點列表
????:param?flag:?節點標記
????:param?mode:?0-->顯示圖片(死亡節點不顯示)??1-->顯示結束輪數
????:param?k:?輪數
????:return:?簇分類結果列表?classes[[類1..][類2...]......]??[類1...簇首...簇成員]
????“““
????#?k輪的有效集合:?無死亡節點
????iter_classes?=?[]
????#?是否已有節點能量為0
????e_is_empty?=?0
?
????#?迭代r輪
????for?r?in?range(k):
????????#?mode1:?若無死亡節點?繼續迭代
????????if?e_is_empty?==?0:
????????????#?獲取簇首列表,簇成員列表
????????????heads?members?=?sel_heads(rnodesflag)
????????????#?建立簇類的列表
????????????classes?=?[[]?for?_?in?range(len(heads))]
?
????????????#?將簇首作為首節點添加到聚類列表中
????????????for?i?in?range(len(heads)):
????????????????#?print(“第“?i?+?1?“個簇首為“?heads[i])
????????????????classes[i].append(heads[i])
?
????????????#?print(“簇首集合:“?classes)
?
????????????#?簇分類:遍歷節點node
????????????for?member?in?members:
?
????????????????#?選取距離最小的節點
????????????????dist_min?=?1
?
????????????????#?判斷和每個簇首的距離
????????????????fo

評論

共有 條評論

相關資源