91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

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

資源簡(jiǎn)介

實(shí)驗(yàn)要求描述: 1、給定場(chǎng)景,給定WSN的節(jié)點(diǎn)數(shù)目,節(jié)點(diǎn)隨機(jī)分布,能按照LEACH的介紹,實(shí)現(xiàn)(每一輪)對(duì)WSN的分簇。請(qǐng)記錄前k輪(eg.k=10)/ 繪制第k輪時(shí),網(wǎng)絡(luò)的分簇情況,即每個(gè)節(jié)點(diǎn)的角色(簇頭or簇成員)及其關(guān)系,如是簇成員,標(biāo)記其所屬的簇頭 2.Note要求: ????節(jié)點(diǎn)數(shù)目不宜過(guò)小;每輪只完成分簇,不考慮通信過(guò)程;每輪可以以定時(shí)器確定,也可以以完成當(dāng)輪分簇為準(zhǔn);簇成員在尋找簇頭時(shí),以距離作為接收信號(hào)強(qiáng)弱的判斷依據(jù);當(dāng)選為簇頭的節(jié)點(diǎn)將,以后幾輪的分簇中將,不再成為簇頭,這個(gè)約束條件,在仿真中應(yīng)能體現(xiàn)。

資源截圖

代碼片段和文件信息

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

評(píng)論

共有 條評(píng)論

相關(guān)資源