一種基于主動(dòng)門限設(shè)置的自適應(yīng)分簇方法
【專利摘要】本發(fā)明一種基于主動(dòng)門限設(shè)置的自適應(yīng)分簇方法,屬于通信領(lǐng)域。具體步驟為:首先,為無線網(wǎng)絡(luò)中的每個(gè)節(jié)點(diǎn)尋找鄰居節(jié)點(diǎn),并按歐式距離從小到大排列;每個(gè)節(jié)點(diǎn)計(jì)算自身權(quán)值,并發(fā)送給鄰居節(jié)點(diǎn);然后,每個(gè)節(jié)點(diǎn)判斷自身權(quán)值是否大于所有鄰居節(jié)點(diǎn)的權(quán)值,如果是,設(shè)定并根據(jù)鄰居節(jié)點(diǎn)的數(shù)量門限,發(fā)送“簇頭存在”消息或“已分簇”消息,同時(shí)對(duì)節(jié)點(diǎn)進(jìn)行標(biāo)記;否則,根據(jù)鄰居節(jié)點(diǎn)發(fā)送的“簇頭存在”消息或“已分簇”消息分別對(duì)節(jié)點(diǎn)進(jìn)行標(biāo)記;最后,判斷標(biāo)記后的節(jié)點(diǎn)是否為簇頭節(jié)點(diǎn),如果是執(zhí)行簇頭節(jié)點(diǎn)入簇;否則執(zhí)行成員節(jié)點(diǎn)入簇;優(yōu)點(diǎn)在于:門限機(jī)制預(yù)設(shè)的不是具體值,更為全面和可調(diào),在負(fù)載均衡性上有顯著提高。
【專利說明】
一種基于主動(dòng)門限設(shè)置的自適應(yīng)分簇方法
技術(shù)領(lǐng)域
[0001 ]本發(fā)明屬于通信領(lǐng)域,涉及一種基于主動(dòng)門限設(shè)置的自適應(yīng)分簇方法。
【背景技術(shù)】
[0002] 通信領(lǐng)域的分簇算法最早出現(xiàn)在無線傳感器網(wǎng)絡(luò)中,后又引入到無定形扁平化自 組織無線網(wǎng)絡(luò)中,無定形扁平化自組織無線網(wǎng)絡(luò)希望將終端、基站和核心網(wǎng)扁平化為單一 的網(wǎng)絡(luò)節(jié)點(diǎn),所有節(jié)點(diǎn)的地位平等,并具有自組織的能力。
[0003] 現(xiàn)有的分簇算法有最小ID法、最高連接度法、門限法和加權(quán)法等。
[0004] 門限法指:設(shè)置分裂和合并門限,簇內(nèi)節(jié)點(diǎn)數(shù)量大于分裂門限則執(zhí)行簇分裂,小于 合并門限則執(zhí)行簇合并。加權(quán)法指:綜合考慮節(jié)點(diǎn)連接度、節(jié)點(diǎn)剩余能量等多個(gè)因數(shù),對(duì)每 一個(gè)節(jié)點(diǎn)進(jìn)行歸一化并加權(quán)以得到分簇權(quán)值,以權(quán)值為基礎(chǔ)進(jìn)行分簇。相似算法為自適應(yīng) 按需加權(quán)(A0W,Adaptive On-demand Weighting)分簇算法,同樣是針對(duì)同質(zhì)節(jié)點(diǎn)組成的無 線網(wǎng)絡(luò)的自適應(yīng)加權(quán)算法。
[0005] 在現(xiàn)有的門限法中,設(shè)置的是單一的節(jié)點(diǎn)數(shù)量的門限。而每一個(gè)節(jié)點(diǎn)在一段時(shí)間 以后,由于剩余能量等其他因素的不同,所能承受的負(fù)載并非都是一樣的。因此設(shè)置單一的 門限標(biāo)準(zhǔn)不利于網(wǎng)絡(luò)的自適應(yīng)。
[0006] 在非交疊簇模式下,每個(gè)成員節(jié)點(diǎn)只屬于一個(gè)簇,而在扁平化自組織的前提下,一 個(gè)成員節(jié)點(diǎn)可能會(huì)收到兩個(gè)甚至多個(gè)簇頭發(fā)出的分簇消息。針對(duì)這種情況,現(xiàn)有通常采用 先到先得的方式選擇入簇,即簇成員在收到第一個(gè)符合條件的分簇消息后便入簇。這樣會(huì) 與事先的分簇思想沖突:一些簇頭未能聚集預(yù)期數(shù)量的成員,而一些簇頭聚集了過多數(shù)量 的成員。
【發(fā)明內(nèi)容】
[0007] 本發(fā)明結(jié)合現(xiàn)有算法的特點(diǎn),加入以簇的成員節(jié)點(diǎn)主動(dòng)選簇頭的新模式,在不明 顯增加通信消耗的前提下顯著提高分簇結(jié)構(gòu)的負(fù)載均衡性,提出了一種基于主動(dòng)門限設(shè)置 的自適應(yīng)分簇方法。
[0008] 具體步驟如下:
[0009] 步驟一、將無線網(wǎng)絡(luò)中的每個(gè)終端作為一個(gè)節(jié)點(diǎn),對(duì)每個(gè)節(jié)點(diǎn)尋找鄰居節(jié)點(diǎn),并按 歐式距離從小到大排列;
[0010]步驟二、每個(gè)節(jié)點(diǎn)通過加權(quán)法計(jì)算自身權(quán)值,并將自身權(quán)值發(fā)送給鄰居節(jié)點(diǎn);
[0011]步驟三、每個(gè)節(jié)點(diǎn)判斷自身權(quán)值是否大于所有鄰居節(jié)點(diǎn)的權(quán)值,如果是,進(jìn)入步驟 五,否則進(jìn)入步驟四;
[0012]步驟四、針對(duì)某個(gè)節(jié)點(diǎn)i,根據(jù)鄰居節(jié)點(diǎn)發(fā)送的"簇頭存在"消息或"已分簇"消息分 別對(duì)節(jié)點(diǎn)i進(jìn)行標(biāo)記;
[0013] 具體步驟如下:
[0014]步驟401、針對(duì)節(jié)點(diǎn)i,判斷是否有鄰居節(jié)點(diǎn)發(fā)送"簇頭存在"消息,如果是,進(jìn)入步 驟402;否則,進(jìn)入步驟403;
[0015]步驟402、節(jié)點(diǎn)i向所有鄰居節(jié)點(diǎn)發(fā)送"已分簇"消息,并將節(jié)點(diǎn)i標(biāo)為成員節(jié)點(diǎn);進(jìn) 入步驟六;
[0016] 步驟403、判斷是否權(quán)值大于自身的全部鄰居節(jié)點(diǎn)均發(fā)送"已分簇"消息,如果是, 進(jìn)入步驟五,否則,返回步驟401;
[0017] 步驟五、針對(duì)節(jié)點(diǎn)i,設(shè)定并根據(jù)鄰居節(jié)點(diǎn)的數(shù)量門限,發(fā)送"簇頭存在"消息或"已 分簇"消息,同時(shí)對(duì)節(jié)點(diǎn)i進(jìn)行標(biāo)記;
[0018] 具體步驟如下:
[0019] 步驟501、各個(gè)節(jié)點(diǎn)自適應(yīng)生成三個(gè)門限:最小規(guī)模門限minn、最佳規(guī)模門限pren 和最大規(guī)模門限maxn。
[0020] 步驟502、判斷節(jié)點(diǎn)i的鄰居數(shù)量η超出minn,貝lj進(jìn)入步驟503,否則超出maxn進(jìn)入步 驟504;
[0021]步驟503、判斷節(jié)點(diǎn)i的鄰居數(shù)量η是否小于minn,如果是,向鄰居節(jié)點(diǎn)發(fā)送"已分 簇"消息,并將節(jié)點(diǎn)i標(biāo)為成員節(jié)點(diǎn);否則將節(jié)點(diǎn)i標(biāo)為簇頭節(jié)點(diǎn);
[0022]步驟504判斷節(jié)點(diǎn)i的鄰居數(shù)量η是否大于maxn,如果是,根據(jù)最佳規(guī)模門限pren數(shù) 量,向歐式距離最近的pren個(gè)鄰居節(jié)點(diǎn)發(fā)送"簇頭存在"消息,向其余節(jié)點(diǎn)發(fā)送"已分簇"消 息,將節(jié)點(diǎn)i標(biāo)為簇頭節(jié)點(diǎn);否則,向所有鄰居節(jié)點(diǎn)發(fā)送"簇頭存在"消息,將節(jié)點(diǎn)i標(biāo)為簇頭 節(jié)點(diǎn)。
[0023]步驟六、判斷標(biāo)記后的節(jié)點(diǎn)i是否為簇頭節(jié)點(diǎn),如果是進(jìn)入步驟七,否則為成員節(jié) 點(diǎn)進(jìn)入步驟八;
[0024]步驟七、執(zhí)行簇頭節(jié)點(diǎn)i的入簇階段;
[0025] 具體步驟如下:
[0026]步驟701、設(shè)置簇頭節(jié)點(diǎn)i的狀態(tài)81為0,已入簇的鄰居節(jié)點(diǎn)數(shù)量m為0,統(tǒng)計(jì)鄰居節(jié) 點(diǎn)中未入簇的成員節(jié)點(diǎn),數(shù)量為d1;
[0027]步驟702、判斷節(jié)點(diǎn)i未入簇成員節(jié)點(diǎn)數(shù)量cU是否為0或簇頭狀態(tài)Sl是否為3,如果 是,簇頭節(jié)點(diǎn)i的入簇階段結(jié)束;否則進(jìn)入步驟703;
[0028]步驟703、判斷節(jié)點(diǎn)i已入簇節(jié)點(diǎn)數(shù)量m是否大于等于當(dāng)前簇頭狀態(tài)Sl所對(duì)應(yīng)的門 限數(shù)量;如果是,則當(dāng)前簇頭狀態(tài)81加1,并向所有鄰居節(jié)點(diǎn)發(fā)送包含當(dāng)前簇頭狀態(tài)信息的 "狀態(tài)改變"消息;返回步驟702;否則,進(jìn)入步驟704;
[0029] 當(dāng)前簇頭狀態(tài)si的值分別為0,1,2和3;簇頭狀態(tài)0對(duì)應(yīng)的門限數(shù)量為小于最小規(guī) 模門限minn值;簇頭狀態(tài)1對(duì)應(yīng)的門限數(shù)量為大于等于最小規(guī)模門限minn值到小于最佳規(guī) 模門限pren值;簇頭狀態(tài)2對(duì)應(yīng)的門限數(shù)量為大于等于最佳規(guī)模門限pren值到小于最大規(guī) 模門限maxn值;簇頭狀態(tài)3對(duì)應(yīng)的門限數(shù)量為大于等于最大規(guī)模門限maxn值;
[0030] 步驟704、判斷是否收到簇頭節(jié)點(diǎn)i的鄰居節(jié)點(diǎn)j發(fā)送的"已入簇"消息,如果是,則 未入簇成員節(jié)點(diǎn)個(gè)數(shù)cU減1,返回步驟702,否則進(jìn)入步驟705;
[0031] 步驟705、判斷是否收到簇頭節(jié)點(diǎn)i的鄰居節(jié)點(diǎn)j發(fā)送的"請(qǐng)求入簇"消息,如果是, 貝1J已入簇的鄰居節(jié)點(diǎn)數(shù)量m加1,并向鄰居節(jié)點(diǎn)j發(fā)送"允許入簇"消息,返回步驟702;否則 返回步驟704;
[0032]步驟八、執(zhí)行成員節(jié)點(diǎn)i的入簇階段;
[0033] 具體步驟如下:
[0034]步驟801、針對(duì)成員節(jié)點(diǎn)i,統(tǒng)計(jì)簇頭狀態(tài)si不為3的簇頭節(jié)點(diǎn)數(shù)量為Di;
[0035]根據(jù)收到的"簇頭存在"消息統(tǒng)計(jì)鄰居節(jié)點(diǎn)中的簇頭節(jié)點(diǎn)數(shù)量;
[0036]步驟802、針對(duì)節(jié)點(diǎn)i,判斷簇頭節(jié)點(diǎn)數(shù)量01是否等于0,如果是,則將節(jié)點(diǎn)i標(biāo)記為 "懸空節(jié)點(diǎn)",節(jié)點(diǎn)i完成入簇階段;否則進(jìn)入步驟803;
[0037]步驟803、針對(duì)某個(gè)節(jié)點(diǎn)i,根據(jù)收到的"狀態(tài)改變"消息更新鄰居節(jié)點(diǎn)的狀態(tài)表,從 中找出鄰居節(jié)點(diǎn)中簇頭狀態(tài)最小的"簇頭節(jié)點(diǎn)"中歐式距離最近的節(jié)點(diǎn)j,向節(jié)點(diǎn)j發(fā)送"請(qǐng) 求入簇"消息;
[0038]步驟804、針對(duì)某個(gè)節(jié)點(diǎn)i,判斷是否收到節(jié)點(diǎn)j返回的"允許入簇"消息,如果是,向 所有其它鄰居發(fā)送"已入簇"消息,節(jié)點(diǎn)i完成入簇階段;否則進(jìn)入步驟805;
[0039]步驟805、針對(duì)某個(gè)節(jié)點(diǎn)i,判斷是否收到節(jié)點(diǎn)j返回的"狀態(tài)改變"消息,如果是,進(jìn) 入步驟806,否則回到步驟804;
[0040] 步驟806、針對(duì)某個(gè)節(jié)點(diǎn)i,判斷是否收到鄰居節(jié)點(diǎn)發(fā)送的簇頭狀態(tài)更新為3的"狀 態(tài)改變"消息,如果是,簇頭狀態(tài)不為3的"簇頭節(jié)點(diǎn)"個(gè)數(shù)0 1減1,返回步驟802,否直接回到 步驟802;
[0041] 本發(fā)明的優(yōu)點(diǎn)在于:
[0042] 1、一種基于主動(dòng)門限設(shè)置的自適應(yīng)分簇方法,更切合自適應(yīng)的要求:門限機(jī)制預(yù) 設(shè)的不是具體值,在選舉階段和門限機(jī)制中綜合考慮到剩余能量等其他因素,更為全面和 可調(diào)。
[0043] 2、一種基于主動(dòng)門限設(shè)置的自適應(yīng)分簇方法,相對(duì)于A0W算法,在負(fù)載均衡性上有 顯者提尚。
【附圖說明】
[0044] 圖1為本發(fā)明基于主動(dòng)門限設(shè)置的自適應(yīng)分簇方法流程圖;
[0045] 圖2為本發(fā)明中根據(jù)鄰居節(jié)點(diǎn)的發(fā)送消息對(duì)節(jié)點(diǎn)進(jìn)行標(biāo)記的流程圖;
[0046] 圖3為本發(fā)明中根據(jù)鄰居節(jié)點(diǎn)的數(shù)量門限,發(fā)送消息并對(duì)節(jié)點(diǎn)進(jìn)行標(biāo)記的流程圖;
[0047] 圖4為本發(fā)明執(zhí)行簇頭節(jié)點(diǎn)的入簇方法流程圖;
[0048] 圖5為本發(fā)明執(zhí)行成員節(jié)點(diǎn)的入簇方法流程圖;
[0049]圖6為本發(fā)明本發(fā)明算法與傳統(tǒng)A0W算法的負(fù)載平衡因子隨通訊距離的變化情況 圖。
【具體實(shí)施方式】
[0050]下面將結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說明。
[005?] 為了保證網(wǎng)絡(luò)的可擴(kuò)展性和服務(wù)質(zhì)量(QoS,Quality of Service),無線移動(dòng)網(wǎng)絡(luò) 通常采用分級(jí)結(jié)構(gòu)。在無定形扁平化自組織無線網(wǎng)絡(luò)中,分級(jí)結(jié)構(gòu)通常采用分簇的方式來 構(gòu)造,而分簇算法的好壞將直接影響著無線移動(dòng)網(wǎng)絡(luò)的性能。
[0052] 一種基于主動(dòng)門限設(shè)置的自適應(yīng)分簇方法,簡(jiǎn)稱ALB算法;通過節(jié)點(diǎn)成員在被選舉 為簇頭后,根據(jù)預(yù)先設(shè)置的算法自適應(yīng)地生成該節(jié)點(diǎn)的門限標(biāo)準(zhǔn),簇成員在獲得所有鄰居 簇頭發(fā)送的信息后,主動(dòng)判斷應(yīng)該加入哪一個(gè)簇;以及從而提高網(wǎng)絡(luò)的負(fù)載均衡性。
[0053] 如圖1所示,具體步驟如下:
[0054]步驟一、將無線網(wǎng)絡(luò)中的每個(gè)終端作為一個(gè)節(jié)點(diǎn),對(duì)每個(gè)節(jié)點(diǎn)尋找自身的鄰居節(jié) 點(diǎn),并計(jì)算自身節(jié)點(diǎn)與鄰居節(jié)點(diǎn)之間的歐氏距離,將歐式距離按從小到大排列;
[0055] 每個(gè)節(jié)點(diǎn)周期性地廣播"Hello"消息,"Hello"消息包括了自身編號(hào)和發(fā)送時(shí)間; 當(dāng)節(jié)點(diǎn)i收到節(jié)點(diǎn)j發(fā)送的"He 11 〇"消息后,節(jié)點(diǎn)i將節(jié)點(diǎn)j標(biāo)記為自身的鄰居節(jié)點(diǎn),并計(jì)算節(jié) 點(diǎn)i與節(jié)點(diǎn)j之間的歐式距離,計(jì)算完歐式距離后,將歐式距離按從小到大排列;
[0056] 本實(shí)施例中選用15個(gè)節(jié)點(diǎn),分別為節(jié)點(diǎn)1到節(jié)點(diǎn)15;每個(gè)節(jié)點(diǎn)的鄰居節(jié)點(diǎn)按歐式距 離從小到大排序后,如表1所示;
[0057] 表 1
[0058]
[0059] 步驟二、每個(gè)節(jié)點(diǎn)通過加權(quán)法計(jì)算自身權(quán)值,并將自身權(quán)值發(fā)送給鄰居節(jié)點(diǎn);
[0060] 加權(quán)法在本實(shí)施例中采用連通度與節(jié)點(diǎn)編號(hào)結(jié)合的方式計(jì)算,每個(gè)節(jié)點(diǎn)的自身權(quán) 值如表2所示;
[0061] 表 2
[0062]
[0063] 步驟三、每個(gè)節(jié)點(diǎn)判斷自身權(quán)值是否大于所有鄰居節(jié)點(diǎn)的權(quán)值,如果是,進(jìn)入步驟 五,否則進(jìn)入步驟四;
[0064] 步驟四、針對(duì)某個(gè)節(jié)點(diǎn)i,根據(jù)鄰居節(jié)點(diǎn)發(fā)送的"簇頭存在"消息或"已分簇"消息分 別對(duì)節(jié)點(diǎn)i進(jìn)行標(biāo)記;
[0065] 如圖2所示,具體步驟如下:
[0066]步驟401、針對(duì)節(jié)點(diǎn)i,判斷是否有鄰居節(jié)點(diǎn)發(fā)送"簇頭存在"消息,如果是,進(jìn)入步 驟402;否則,進(jìn)入步驟403;
[0067]步驟402、節(jié)點(diǎn)i向所有鄰居節(jié)點(diǎn)發(fā)送"已分簇"消息,并將節(jié)點(diǎn)i標(biāo)為成員節(jié)點(diǎn);進(jìn) 入步驟六;
[0068]步驟403、判斷是否權(quán)值大于自身的全部鄰居節(jié)點(diǎn)均發(fā)送"已分簇"消息,如果是, 進(jìn)入步驟五,否則,返回步驟401;
[0069]步驟五、針對(duì)節(jié)點(diǎn)i,設(shè)定并根據(jù)鄰居節(jié)點(diǎn)的數(shù)量門限,發(fā)送"簇頭存在"消息或"已 分簇"消息,同時(shí)對(duì)節(jié)點(diǎn)i進(jìn)行標(biāo)記;
[0070]如圖3所示,具體步驟如下:
[0071 ] 步驟501、各個(gè)節(jié)點(diǎn)自適應(yīng)生成三個(gè)門限:最小規(guī)模門限minn、最佳規(guī)模門限pren 和最大規(guī)模門限maxn。
[0072] 步驟502、根據(jù)節(jié)點(diǎn)i的鄰居數(shù)量η進(jìn)行劃分,判斷關(guān)于minn的范圍則進(jìn)入步驟503, 否則關(guān)于maxn的范圍進(jìn)入步驟504
[0073]步驟503、判斷節(jié)點(diǎn)i的鄰居數(shù)量η是否小于minn,如果是,向鄰居節(jié)點(diǎn)發(fā)送"已分 簇"消息,并將節(jié)點(diǎn)i標(biāo)為成員節(jié)點(diǎn);否則將節(jié)點(diǎn)i標(biāo)為簇頭節(jié)點(diǎn);
[0074]步驟504判斷節(jié)點(diǎn)i的鄰居數(shù)量η是否大于maxn,如果是,根據(jù)最佳規(guī)模門限pren數(shù) 量,向歐式距離最近的pren個(gè)鄰居節(jié)點(diǎn)發(fā)送"簇頭存在"消息,向其余節(jié)點(diǎn)發(fā)送"已分簇"消 息,將節(jié)點(diǎn)i標(biāo)為簇頭節(jié)點(diǎn);否則,向所有鄰居節(jié)點(diǎn)發(fā)送"簇頭存在"消息,將節(jié)點(diǎn)i標(biāo)為簇頭 節(jié)點(diǎn)。
[0075]針對(duì)節(jié)點(diǎn)1到節(jié)點(diǎn)15,通過分別比較自身權(quán)值與自身鄰居節(jié)點(diǎn)的權(quán)值,可知,節(jié)點(diǎn)4 的自身權(quán)值大于節(jié)點(diǎn)4的所有鄰居節(jié)點(diǎn);節(jié)點(diǎn)9的自身權(quán)值大于節(jié)點(diǎn)9的所有鄰居節(jié)點(diǎn);節(jié)點(diǎn) 4和節(jié)點(diǎn)9分別執(zhí)行步驟五。
[0076] 本實(shí)施例為了方便說明,每個(gè)節(jié)點(diǎn)生成的門限均設(shè)置為:minn = 2、pren = 3、maxn =4;
[0077]首先,針對(duì)節(jié)點(diǎn)4,鄰居數(shù)量為6大于maxn,向歐式距離最近的3個(gè)鄰居節(jié)點(diǎn)發(fā)送"簇 頭存在"消息,即向節(jié)點(diǎn)10、節(jié)點(diǎn)8和節(jié)點(diǎn)1分別發(fā)送"簇頭存在"消息;向節(jié)點(diǎn)13、節(jié)點(diǎn)14和節(jié) 點(diǎn)2分別發(fā)送"已分簇"消息。同時(shí)節(jié)點(diǎn)4標(biāo)記為簇頭節(jié)點(diǎn)。
[0078]同理,針對(duì)節(jié)點(diǎn)9,鄰居數(shù)量為3,選擇向所有鄰居節(jié)點(diǎn),節(jié)點(diǎn)6,節(jié)點(diǎn)7和節(jié)點(diǎn)1發(fā)送 "簇頭存在"消息,將節(jié)點(diǎn)9標(biāo)為簇頭節(jié)點(diǎn)。
[0079] 下一步,針對(duì)節(jié)點(diǎn)1,收到"簇頭存在"消息,則節(jié)點(diǎn)1向所有鄰居節(jié)點(diǎn)(節(jié)點(diǎn)10,節(jié)點(diǎn) 4和節(jié)點(diǎn)9)發(fā)送"已分簇"消息,并將節(jié)點(diǎn)1標(biāo)為成員節(jié)點(diǎn);
[0080] 針對(duì)節(jié)點(diǎn)6和節(jié)點(diǎn)7,分別收到節(jié)點(diǎn)9發(fā)送的"簇頭存在"消息,則向所有鄰居節(jié)點(diǎn) (均為節(jié)點(diǎn)9)發(fā)送"已分簇"消息,并將節(jié)點(diǎn)6和節(jié)點(diǎn)7分別標(biāo)為成員節(jié)點(diǎn);
[0081 ]針對(duì)節(jié)點(diǎn)2,收到節(jié)點(diǎn)4發(fā)送的"已分簇"消息,但是因?yàn)槲词盏剿袡?quán)值大于節(jié)點(diǎn)2 的權(quán)值的鄰居節(jié)點(diǎn)發(fā)送的"已分簇"消息(節(jié)點(diǎn)13的權(quán)值大于節(jié)點(diǎn)2的權(quán)值),所以繼續(xù)等待;
[0082] 針對(duì)節(jié)點(diǎn)8,收到節(jié)點(diǎn)4發(fā)送的"簇頭存在"消息,則節(jié)點(diǎn)8向所有鄰居節(jié)點(diǎn)(節(jié)點(diǎn)4和 節(jié)點(diǎn)14)發(fā)送"已分簇"消息,并將節(jié)點(diǎn)8標(biāo)為成員節(jié)點(diǎn);
[0083] 針對(duì)節(jié)點(diǎn)10,收到節(jié)點(diǎn)4發(fā)送的"簇頭存在"消息,則節(jié)點(diǎn)10向所有鄰居節(jié)點(diǎn)(節(jié)點(diǎn) 4,節(jié)點(diǎn)13和節(jié)點(diǎn)1)發(fā)送"已分簇"消息,并將節(jié)點(diǎn)10標(biāo)為成員節(jié)點(diǎn);
[0084]針對(duì)節(jié)點(diǎn)13,收到節(jié)點(diǎn)4發(fā)送的"已分簇"消息,權(quán)值大于節(jié)點(diǎn)13的鄰居節(jié)點(diǎn)只有節(jié) 點(diǎn)4,已收到所有權(quán)值大于自身權(quán)值的鄰居節(jié)點(diǎn)發(fā)送的"已分簇"消息,繼續(xù)判斷節(jié)點(diǎn)13的鄰 居數(shù)量5大于maxn,向歐式距離最近的3個(gè)鄰居節(jié)點(diǎn)發(fā)送"簇頭存在"消息,即向節(jié)點(diǎn)15、節(jié)點(diǎn) 10和節(jié)點(diǎn)4分別發(fā)送"簇頭存在"消息;向節(jié)點(diǎn)3和節(jié)點(diǎn)2分別發(fā)送"已分簇"消息。同時(shí)節(jié)點(diǎn)13 標(biāo)記為簇頭節(jié)點(diǎn)。
[0085]針對(duì)節(jié)點(diǎn)14,收到節(jié)點(diǎn)4發(fā)送的"已分簇"消息,節(jié)點(diǎn)2的權(quán)值也大于節(jié)點(diǎn)14的權(quán)值, 但是未收到節(jié)點(diǎn)2發(fā)送的"已分簇"消息,所以繼續(xù)等待;
[0086]針對(duì)節(jié)點(diǎn)2,收到節(jié)點(diǎn)13發(fā)送的"已分簇"消息,之前收到節(jié)點(diǎn)4發(fā)送的"已分簇"消 息,已收到所有權(quán)值大于自身權(quán)值的鄰居節(jié)點(diǎn)發(fā)送的"已分簇"消息,繼續(xù)判斷節(jié)點(diǎn)2的鄰居 數(shù)量5大于maxn,向歐式距離最近的3個(gè)鄰居節(jié)點(diǎn)發(fā)送"簇頭存在"消息,即向節(jié)點(diǎn)14、節(jié)點(diǎn)13 和節(jié)點(diǎn)12分別發(fā)送"簇頭存在"消息;向節(jié)點(diǎn)4和節(jié)點(diǎn)11分別發(fā)送"已分簇"消息。同時(shí)節(jié)點(diǎn)2 標(biāo)記為簇頭節(jié)點(diǎn)。
[0087]針對(duì)節(jié)點(diǎn)3,收到節(jié)點(diǎn)13發(fā)出的"已分簇"消息,節(jié)點(diǎn)11的權(quán)值也大于節(jié)點(diǎn)3的權(quán)值, 但是未收到節(jié)點(diǎn)11發(fā)送的"已分簇"消息,所以繼續(xù)等待;
[0088]針對(duì)節(jié)點(diǎn)14,收到節(jié)點(diǎn)8發(fā)送的"已分簇"消息,未收到節(jié)點(diǎn)2發(fā)送的"已分簇"消息, 卻收到節(jié)點(diǎn)2發(fā)送的"簇頭存在"消息;則向所有鄰居節(jié)點(diǎn)(節(jié)點(diǎn)2,節(jié)點(diǎn)8和節(jié)點(diǎn)4)發(fā)送"已分 簇"消息,并將節(jié)點(diǎn)14標(biāo)為成員節(jié)點(diǎn)。
[0089] 針對(duì)節(jié)點(diǎn)15,收到節(jié)點(diǎn)13發(fā)出的"簇頭存在"消息;則向所有鄰居節(jié)點(diǎn)(節(jié)點(diǎn)3和節(jié) 點(diǎn)13)發(fā)送"已分簇"消息,并將節(jié)點(diǎn)15標(biāo)為成員節(jié)點(diǎn);
[0090] 針對(duì)節(jié)點(diǎn)3,收到節(jié)點(diǎn)15發(fā)出的"已分簇"消息,但是未收到節(jié)點(diǎn)11發(fā)送的"已分簇" 消息,所以繼續(xù)等待;
[0091] 針對(duì)節(jié)點(diǎn)11,收到節(jié)點(diǎn)2發(fā)出的"已分簇"消息,已收到所有權(quán)值大于節(jié)點(diǎn)11權(quán)值的 鄰居節(jié)點(diǎn)發(fā)送的"已分簇"消息,繼續(xù)判斷節(jié)點(diǎn)11的鄰居數(shù)量4不大于maxn,向所有鄰居節(jié)點(diǎn) 節(jié)點(diǎn)12、節(jié)點(diǎn)2和節(jié)點(diǎn)3和節(jié)點(diǎn)5分別發(fā)送"簇頭存在"消息;同時(shí)節(jié)點(diǎn)11標(biāo)記為簇頭節(jié)點(diǎn)。
[0092] 針對(duì)節(jié)點(diǎn)12,收到節(jié)點(diǎn)2或節(jié)點(diǎn)11發(fā)送的"簇頭存在"消息;則向所有鄰居節(jié)點(diǎn)(節(jié) 點(diǎn)11和節(jié)點(diǎn)2)發(fā)送"已分簇"消息,并將節(jié)點(diǎn)12標(biāo)為成員節(jié)點(diǎn);
[0093] 針對(duì)節(jié)點(diǎn)3,收到節(jié)點(diǎn)11發(fā)出的"簇頭存在"消息;則向所有鄰居節(jié)點(diǎn)(節(jié)點(diǎn)15,節(jié)點(diǎn) 13和節(jié)點(diǎn)11)發(fā)送"已分簇"消息,并將節(jié)點(diǎn)3標(biāo)為成員節(jié)點(diǎn)。
[0094] 針對(duì)節(jié)點(diǎn)5,收到節(jié)點(diǎn)11的"簇頭存在"消息;向鄰居節(jié)點(diǎn)11發(fā)送"已分簇"消息,并 將節(jié)點(diǎn)5標(biāo)為成員節(jié)點(diǎn);
[0095] 步驟六、判斷標(biāo)記后的節(jié)點(diǎn)i是否為簇頭節(jié)點(diǎn),如果是進(jìn)入步驟七,否則為成員節(jié) 點(diǎn)進(jìn)入步驟八;
[0096] 本實(shí)施中,節(jié)點(diǎn)2,節(jié)點(diǎn)4,節(jié)點(diǎn)9,節(jié)點(diǎn)11和節(jié)點(diǎn)13為簇頭節(jié)點(diǎn);其余均為成員節(jié)點(diǎn); 節(jié)點(diǎn)在自身和所有鄰居節(jié)點(diǎn)均完成選舉階段后開始進(jìn)入入簇階段。
[0097]步驟七、執(zhí)行簇頭節(jié)點(diǎn)i的入簇階段;
[0098]通過選舉階段已收集到自身和鄰居節(jié)點(diǎn)的信息,設(shè)未入簇鄰居節(jié)點(diǎn)的數(shù)量為d個(gè), 簇頭初始狀態(tài)s為0,已入本簇的成員節(jié)點(diǎn)數(shù)量為η;開始接收消息,若收到已入簇消息則d - 1;若收到請(qǐng)求入簇消息則n+1,且回復(fù)允許入簇消息。直到η值達(dá)到新的門限值,則s+1,且向 所有未入簇鄰居節(jié)點(diǎn)發(fā)送狀態(tài)改變消息;當(dāng)d = 0或s = 3時(shí),即所有鄰居成員節(jié)點(diǎn)完成入簇 或自身負(fù)載飽和時(shí),該簇頭完成入簇階段。
[0099] 如圖4所示,具體步驟如下:
[0100] 步驟701、設(shè)置簇頭節(jié)點(diǎn)i的狀態(tài)81為0,已入簇的鄰居節(jié)點(diǎn)數(shù)量m為0,統(tǒng)計(jì)鄰居節(jié) 點(diǎn)中未入簇的成員節(jié)點(diǎn),數(shù)量為d 1;
[0101] 步驟702、判斷節(jié)點(diǎn)i未入簇成員節(jié)點(diǎn)數(shù)量cU是否為0或簇頭狀態(tài)Sl是否為3,如果 是,簇頭節(jié)點(diǎn)i的入簇階段結(jié)束;否則進(jìn)入步驟703;
[0102] 步驟703、判斷節(jié)點(diǎn)i已入簇節(jié)點(diǎn)數(shù)量m是否大于等于當(dāng)前簇頭狀態(tài)Sl所對(duì)應(yīng)的門 限數(shù)量;如果是,則當(dāng)前簇頭狀態(tài) 81加1,并向所有鄰居節(jié)點(diǎn)發(fā)送包含當(dāng)前簇頭狀態(tài)信息的 "狀態(tài)改變"消息;返回步驟702;否則,進(jìn)入步驟704;
[0103] 當(dāng)前簇頭狀態(tài)Si的值分別為0,1,2和3;簇頭狀態(tài)0對(duì)應(yīng)的門限數(shù)量為小于最小規(guī) 模門限minn值;簇頭狀態(tài)1對(duì)應(yīng)的門限數(shù)量為大于等于最小規(guī)模門限minn值到小于最佳規(guī) 模門限pren值;簇頭狀態(tài)2對(duì)應(yīng)的門限數(shù)量為大于等于最佳規(guī)模門限pren值到小于最大規(guī) 模門限maxn值;簇頭狀態(tài)3對(duì)應(yīng)的門限數(shù)量為大于等于最大規(guī)模門限maxn值;
[0104]步驟704、判斷是否收到簇頭節(jié)點(diǎn)i的鄰居節(jié)點(diǎn)j發(fā)送的"已入簇"消息,如果是,則 未入簇成員節(jié)點(diǎn)個(gè)數(shù)cU減1,返回步驟702,否則進(jìn)入步驟705;
[0105]步驟705、判斷是否收到簇頭節(jié)點(diǎn)i的鄰居節(jié)點(diǎn)j發(fā)送的"請(qǐng)求入簇"消息,如果是, 貝1J已入簇的鄰居節(jié)點(diǎn)數(shù)量m加1,并向鄰居節(jié)點(diǎn)j發(fā)送"允許入簇"消息,返回步驟702;否則 返回步驟704;
[0106]步驟八、執(zhí)行成員節(jié)點(diǎn)i的入簇階段;
[0107]通過選舉階段已收集到自身和鄰居節(jié)點(diǎn)的信息,共有D個(gè)負(fù)載未飽和的簇頭;SPs〈 3;若D = 0,即不存在負(fù)載未飽和的簇頭,成員節(jié)點(diǎn)懸空;若D= 1,則直接發(fā)送入簇請(qǐng)求,否則 向s最小的鄰居簇頭中歐式距離最近的一個(gè)發(fā)送入簇請(qǐng)求;若收到回復(fù)的允許入簇信息,則 向其余鄰居簇頭發(fā)送已入簇信息,完成入簇;否則若收到狀態(tài)改變信息則更新D再次判斷。
[0108]如圖5所示,具體步驟如下:
[0109]步驟801、針對(duì)成員節(jié)點(diǎn)i,統(tǒng)計(jì)簇頭狀態(tài)Si不為3的簇頭節(jié)點(diǎn)數(shù)量為Di;
[0110]根據(jù)收到的"簇頭存在"消息統(tǒng)計(jì)鄰居節(jié)點(diǎn)中的簇頭節(jié)點(diǎn)數(shù)量;
[0111]步驟802、針對(duì)節(jié)點(diǎn)i,判斷簇頭節(jié)點(diǎn)數(shù)量01是否等于0,如果是,則將節(jié)點(diǎn)i標(biāo)記為 "懸空節(jié)點(diǎn)",節(jié)點(diǎn)i完成入簇階段;否則進(jìn)入步驟803;
[0112]步驟803、針對(duì)某個(gè)節(jié)點(diǎn)i,根據(jù)收到的"狀態(tài)改變"消息更新鄰居節(jié)點(diǎn)的狀態(tài)表,從 中找出鄰居節(jié)點(diǎn)中簇頭狀態(tài)最小的"簇頭節(jié)點(diǎn)"中歐式距離最近的節(jié)點(diǎn)j,向節(jié)點(diǎn)j發(fā)送"請(qǐng) 求入簇"消息;
[0113]步驟804、針對(duì)某個(gè)節(jié)點(diǎn)i,判斷是否收到節(jié)點(diǎn)j返回的"允許入簇"消息,如果是,向 所有其它鄰居發(fā)送"已入簇"消息,節(jié)點(diǎn)i完成入簇階段;否則進(jìn)入步驟805;
[0114] 步驟805、針對(duì)某個(gè)節(jié)點(diǎn)i,判斷是否收到節(jié)點(diǎn)j返回的"狀態(tài)改變"消息,如果是,進(jìn) 入步驟806,否則回到步驟804;
[0115] 步驟806、針對(duì)某個(gè)節(jié)點(diǎn)i,判斷是否收到鄰居節(jié)點(diǎn)發(fā)送的簇頭狀態(tài)更新為3的"狀 態(tài)改變"消息,如果是,簇頭狀態(tài)不為3的"簇頭節(jié)點(diǎn)"個(gè)數(shù)0 1減1,返回步驟802,否直接回到 步驟802;
[0116] 針對(duì)某個(gè)未入簇的成員節(jié)點(diǎn)m有鄰居簇頭節(jié)點(diǎn)η,當(dāng)節(jié)點(diǎn)η的已入簇節(jié)點(diǎn)數(shù)量sn達(dá) 到最大規(guī)模門限maxn值時(shí),節(jié)點(diǎn)η的簇頭狀態(tài)將變?yōu)?,即節(jié)點(diǎn)η所在簇達(dá)到飽和,不再接收 其它節(jié)點(diǎn)的"請(qǐng)求入簇"消息,同時(shí)向節(jié)點(diǎn)m發(fā)送簇頭狀態(tài)更新為3的"狀態(tài)改變"消息,節(jié)點(diǎn)m 收到此消息后將簇頭狀態(tài)不為3的"簇頭節(jié)點(diǎn)"個(gè)數(shù)0?減1,即不再考慮加入節(jié)點(diǎn)η所在簇。該 情況在本實(shí)例中未出現(xiàn)。在實(shí)際情況中,因節(jié)點(diǎn)間關(guān)系的變化和門限值的設(shè)定的不確定,有 可能出現(xiàn)該情況。
[0117] 按照節(jié)點(diǎn)自身和所有鄰居節(jié)點(diǎn)完成選舉階段的時(shí)間順序,成員節(jié)點(diǎn)1、節(jié)點(diǎn)6、節(jié)點(diǎn) 7、節(jié)點(diǎn)10最先同時(shí)申請(qǐng)入簇,簇頭節(jié)點(diǎn)9最先允許入簇;然后成員節(jié)點(diǎn)8、節(jié)點(diǎn)12和節(jié)點(diǎn)14同 時(shí)申請(qǐng)入簇,簇頭節(jié)點(diǎn)2和節(jié)點(diǎn)4允許入簇;最后成員節(jié)點(diǎn)3、節(jié)點(diǎn)5和節(jié)點(diǎn)15同時(shí)申請(qǐng)入簇, 簇頭節(jié)點(diǎn)11和節(jié)點(diǎn)13允許入簇。
[0118] 具體過程如下:
[0119] 針對(duì)節(jié)點(diǎn)1,統(tǒng)計(jì)它的簇頭節(jié)點(diǎn)數(shù)量0:為2,分別為節(jié)點(diǎn)4和節(jié)點(diǎn)9;根據(jù)節(jié)點(diǎn)4和節(jié) 點(diǎn)9簇頭狀態(tài)相同,選擇歐式距離最近的節(jié)點(diǎn)4發(fā)送"請(qǐng)求入簇"消息;節(jié)點(diǎn)4未回應(yīng),節(jié)點(diǎn)1等 待;
[0120] 針對(duì)節(jié)點(diǎn)6的簇頭節(jié)點(diǎn)數(shù)量D6為1,只有節(jié)點(diǎn)9,發(fā)送"請(qǐng)求入簇"消息;
[0121] 針對(duì)節(jié)點(diǎn)7的簇頭節(jié)點(diǎn)數(shù)量D7為1,只有節(jié)點(diǎn)9,發(fā)送"請(qǐng)求入簇"消息;
[0122] 針對(duì)節(jié)點(diǎn)10,統(tǒng)計(jì)簇頭節(jié)點(diǎn)數(shù)量D1Q為2,分別為節(jié)點(diǎn)4和節(jié)點(diǎn)13;根據(jù)節(jié)點(diǎn)4和節(jié)點(diǎn) 13簇頭狀態(tài)相同,選擇歐式距離最近的節(jié)點(diǎn)4發(fā)送"請(qǐng)求入簇"消息;節(jié)點(diǎn)4未回應(yīng),節(jié)點(diǎn)10等 待;
[0123] 節(jié)點(diǎn)9初始簇頭狀態(tài)S9為0,已入該簇的鄰居節(jié)點(diǎn)數(shù)量n9為0,鄰居節(jié)點(diǎn)中未入簇的 成員節(jié)點(diǎn)d9為3,分別為節(jié)點(diǎn)6,節(jié)點(diǎn)7和節(jié)點(diǎn)1;當(dāng)前簇頭狀態(tài)S9所對(duì)應(yīng)的門限值為2,進(jìn)入步 驟705,收到節(jié)點(diǎn)6發(fā)送的"請(qǐng)求入簇"消息,將鄰居節(jié)點(diǎn)數(shù)量n 9加1,并向鄰居節(jié)點(diǎn)6發(fā)送"允 許入簇"消息;節(jié)點(diǎn)6發(fā)送"已入簇"消息給所有鄰居節(jié)點(diǎn),d9減1,為2;節(jié)點(diǎn)6入簇階段完成; 節(jié)點(diǎn)9繼續(xù)等待下一個(gè)請(qǐng)求入簇的節(jié)點(diǎn);
[0124] 節(jié)點(diǎn)9簇頭狀態(tài)S9為0,已入該簇的鄰居節(jié)點(diǎn)數(shù)量n9為1,鄰居節(jié)點(diǎn)中未入簇的成員 節(jié)點(diǎn)d 9為2,分別為節(jié)點(diǎn)7和節(jié)點(diǎn)1;當(dāng)前簇頭狀態(tài)S9所對(duì)應(yīng)的門限數(shù)量為2,進(jìn)入步驟705,收 到節(jié)點(diǎn)7發(fā)送的"請(qǐng)求入簇"消息,將鄰居節(jié)點(diǎn)數(shù)量n 9加1,變?yōu)?;并向鄰居節(jié)點(diǎn)7發(fā)送"允許 入簇"消息;節(jié)點(diǎn)7發(fā)送"已入簇"消息給所有鄰居節(jié)點(diǎn),d9減1,為1;節(jié)點(diǎn)7入簇階段完成; [0 125]節(jié)點(diǎn)9返回步驟702繼續(xù),目前節(jié)點(diǎn)9已入簇節(jié)點(diǎn)數(shù)量Π 9等于當(dāng)前簇頭狀態(tài)S9所對(duì)應(yīng) 的門限值2;則當(dāng)前簇頭狀態(tài)S9加1,并向所有鄰居節(jié)點(diǎn)(節(jié)點(diǎn)6,節(jié)點(diǎn)7和節(jié)點(diǎn)1)發(fā)送包含當(dāng) 前簇頭狀態(tài)信息的"狀態(tài)改變"消息;再次返回步驟702,此時(shí) S9加1后變?yōu)?,目前的n9(2)小 于當(dāng)前簇頭狀態(tài)S9所對(duì)應(yīng)的門限值3;節(jié)點(diǎn)9繼續(xù)等待下一個(gè)請(qǐng)求入簇的節(jié)點(diǎn);
[0126] 然后成員節(jié)點(diǎn)8、節(jié)點(diǎn)12和節(jié)點(diǎn)14同時(shí)申請(qǐng)入簇,簇頭節(jié)點(diǎn)2和節(jié)點(diǎn)4允許入簇;
[0127] 針對(duì)節(jié)點(diǎn)8,統(tǒng)計(jì)簇頭節(jié)點(diǎn)數(shù)量D8為1,只有節(jié)點(diǎn)4,發(fā)送"請(qǐng)求入簇"消息;節(jié)點(diǎn)4未 回應(yīng),節(jié)點(diǎn)8等待;
[0128] 針對(duì)節(jié)點(diǎn)12,統(tǒng)計(jì)簇頭節(jié)點(diǎn)數(shù)量D12為2,分別為節(jié)點(diǎn)2和節(jié)點(diǎn)11;根據(jù)節(jié)點(diǎn)2和節(jié)點(diǎn) 11簇頭狀態(tài)相同,選擇歐式距離最近的節(jié)點(diǎn)11發(fā)送"請(qǐng)求入簇"消息;
[0129 ]針對(duì)節(jié)點(diǎn)14,統(tǒng)計(jì)簇頭節(jié)點(diǎn)數(shù)量D14為2,分別為節(jié)點(diǎn)2和節(jié)點(diǎn)4;根據(jù)節(jié)點(diǎn)2和節(jié)點(diǎn)4 簇頭狀態(tài)相同,選擇歐式距離最近的節(jié)點(diǎn)2發(fā)送"請(qǐng)求入簇"消息;
[0130]節(jié)點(diǎn)2初始簇頭狀態(tài)82為0,已入該簇的鄰居節(jié)點(diǎn)數(shù)量112為0,鄰居節(jié)點(diǎn)中未入簇的 成員節(jié)點(diǎn)如為2,分別為節(jié)點(diǎn)14和節(jié)點(diǎn)12;當(dāng)前簇頭狀態(tài)s2所對(duì)應(yīng)的門限值為2,進(jìn)入步驟 705,收到節(jié)點(diǎn)14發(fā)送的"請(qǐng)求入簇"消息,將鄰居節(jié)點(diǎn)數(shù)量1! 2加1,并向節(jié)點(diǎn)14發(fā)送"允許入 簇"消息給所有鄰居節(jié)點(diǎn);節(jié)點(diǎn)14發(fā)送"已入簇"消息,辦減1,為1;節(jié)點(diǎn)14入簇階段完成;節(jié) 點(diǎn)2繼續(xù)等待下一個(gè)請(qǐng)求入簇的節(jié)點(diǎn);
[0131]針對(duì)節(jié)點(diǎn)4,收到節(jié)點(diǎn)14發(fā)送的"已入簇"消息,d4減1;
[0132] 節(jié)點(diǎn)4初始簇頭狀態(tài)S4為0,已入該簇的鄰居節(jié)點(diǎn)數(shù)量ru為0,鄰居節(jié)點(diǎn)中未入簇的 成員節(jié)點(diǎn)d4為3,分別為節(jié)點(diǎn)10,節(jié)點(diǎn)8和節(jié)點(diǎn)1;因?yàn)楣?jié)點(diǎn)14已經(jīng)入簇,所以未入簇的成員節(jié) 點(diǎn)就不包括節(jié)點(diǎn)14 了。當(dāng)前簇頭狀態(tài)S4所對(duì)應(yīng)的門限值為2,進(jìn)入步驟705,收到節(jié)點(diǎn)10發(fā)送 的"請(qǐng)求入簇"消息,將鄰居節(jié)點(diǎn)數(shù)量n4加1,并向鄰居節(jié)點(diǎn)10發(fā)送"允許入簇"消息;節(jié)點(diǎn)10 發(fā)送"已入簇"消息給所有鄰居節(jié)點(diǎn),d 4減1,為2;節(jié)點(diǎn)10入簇階段完成;節(jié)點(diǎn)4繼續(xù)等待下一 個(gè)請(qǐng)求入簇的節(jié)點(diǎn);
[0133] 針對(duì)節(jié)點(diǎn)13,收到節(jié)點(diǎn)10發(fā)送的"已入簇"消息,d13減1;
[0134] 節(jié)點(diǎn)4簇頭狀態(tài)S4為0,已入該簇的鄰居節(jié)點(diǎn)數(shù)量n4為1,鄰居節(jié)點(diǎn)中未入簇的成員 節(jié)點(diǎn)d 4為2,分別為節(jié)點(diǎn)8和節(jié)點(diǎn)1;當(dāng)前簇頭狀態(tài)S4所對(duì)應(yīng)的門限數(shù)量為2,進(jìn)入步驟705,收 到節(jié)點(diǎn)8發(fā)送的"請(qǐng)求入簇"消息,將鄰居節(jié)點(diǎn)數(shù)量n 4加1,變?yōu)?;并向鄰居節(jié)點(diǎn)8發(fā)送"允許 入簇"消息;節(jié)點(diǎn)8發(fā)送"已入簇"消息給所有鄰居節(jié)點(diǎn),d4減1,為1;節(jié)點(diǎn)8入簇階段完成;節(jié) 點(diǎn)4繼續(xù)返回步驟702,目前節(jié)點(diǎn)4已入簇節(jié)點(diǎn)數(shù)量n 4等于當(dāng)前簇頭狀態(tài)S4所對(duì)應(yīng)的門限值2; 則當(dāng)前簇頭狀態(tài)S4加1,并向所有鄰居節(jié)點(diǎn)(節(jié)點(diǎn)10,節(jié)點(diǎn)8、節(jié)點(diǎn)1、節(jié)點(diǎn)13、節(jié)點(diǎn)14、節(jié)點(diǎn)2) 發(fā)送包含當(dāng)前簇頭狀態(tài)信息的"狀態(tài)改變"消息;再次返回步驟702,此時(shí) S4加1后ru(2)小于 當(dāng)前簇頭狀態(tài)S4所對(duì)應(yīng)的門限值3;節(jié)點(diǎn)4繼續(xù)等待下一個(gè)請(qǐng)求入簇的節(jié)點(diǎn);
[0135] 針對(duì)節(jié)點(diǎn)1,均收到節(jié)點(diǎn)4和節(jié)點(diǎn)9發(fā)送的"狀態(tài)改變"消息;鄰居節(jié)點(diǎn)的簇頭狀態(tài)相 同(均為1 ),選擇向歐式距離較近的節(jié)點(diǎn)4發(fā)送"請(qǐng)求入簇"消息;
[0136] 節(jié)點(diǎn)4簇頭狀態(tài)S4為1,已入該簇的鄰居節(jié)點(diǎn)數(shù)量ru為2,分別為節(jié)點(diǎn)8和節(jié)點(diǎn)10,鄰 居節(jié)點(diǎn)中未入簇的成員節(jié)點(diǎn)d4為1,為節(jié)點(diǎn)1;當(dāng)前簇頭狀態(tài)S4所對(duì)應(yīng)的門限數(shù)量為3,進(jìn)入步 驟705,收到節(jié)點(diǎn)1發(fā)送的"請(qǐng)求入簇"消息,將鄰居節(jié)點(diǎn)數(shù)量n 4加1,變?yōu)?;并向鄰居節(jié)點(diǎn)1發(fā) 送"允許入簇"消息;節(jié)點(diǎn)1發(fā)送"已入簇"消息給所有鄰居節(jié)點(diǎn),d4減1,為0,完成入簇階段;
[0137] 針對(duì)節(jié)點(diǎn)9,收到節(jié)點(diǎn)1發(fā)送的"已入簇"消息,d9減1,變?yōu)?,完成入簇階段;
[0138] 最后成員節(jié)點(diǎn)3、節(jié)點(diǎn)5和節(jié)點(diǎn)15同時(shí)申請(qǐng)入簇,簇頭節(jié)點(diǎn)11和節(jié)點(diǎn)13允許入簇。
[0139] 針對(duì)節(jié)點(diǎn)3,統(tǒng)計(jì)簇頭節(jié)點(diǎn)數(shù)量D3為2,分別為節(jié)點(diǎn)11和節(jié)點(diǎn)13;根據(jù)節(jié)點(diǎn)11和節(jié)點(diǎn) 13簇頭狀態(tài)相同,選擇歐式距離最近的節(jié)點(diǎn)13發(fā)送"請(qǐng)求入簇"消息;
[0140] 針對(duì)節(jié)點(diǎn)5的簇頭節(jié)點(diǎn)數(shù)量他為1,只有節(jié)點(diǎn)11,發(fā)送"請(qǐng)求入簇"消息;
[0141] 針對(duì)節(jié)點(diǎn)15的簇頭節(jié)點(diǎn)數(shù)量D15為1,只有節(jié)點(diǎn)13,發(fā)送"請(qǐng)求入簇"消息;
[0142] 節(jié)點(diǎn)11初始簇頭狀態(tài)sn為0,已入該簇的鄰居節(jié)點(diǎn)數(shù)量nn為0,鄰居節(jié)點(diǎn)中未入簇 的成員節(jié)點(diǎn)dn為3,分別為節(jié)點(diǎn)12,節(jié)點(diǎn)3和節(jié)點(diǎn)5;當(dāng)前簇頭狀態(tài)sn所對(duì)應(yīng)的門限值為2,進(jìn) 入步驟705,收到節(jié)點(diǎn)12發(fā)送的"請(qǐng)求入簇"消息,將鄰居節(jié)點(diǎn)數(shù)量nn加1,并向鄰居節(jié)點(diǎn)12發(fā) 送"允許入簇"消息;節(jié)點(diǎn)12發(fā)送"已入簇"消息給所有鄰居節(jié)點(diǎn),dn減1,為2;節(jié)點(diǎn)12入簇階 段完成;節(jié)點(diǎn)11繼續(xù)等待下一個(gè)請(qǐng)求入簇的節(jié)點(diǎn);
[0143] 針對(duì)節(jié)點(diǎn)2,收到節(jié)點(diǎn)12發(fā)送的"已入簇"消息,山減1,變?yōu)?,完成入簇階段;
[0144] 節(jié)點(diǎn)11簇頭狀態(tài)S11為0,已入該簇的鄰居節(jié)點(diǎn)數(shù)量nn為1,鄰居節(jié)點(diǎn)中未入簇的成 員節(jié)點(diǎn)dn為2,分別為節(jié)點(diǎn)3和節(jié)點(diǎn)5;當(dāng)前簇頭狀態(tài)sn所對(duì)應(yīng)的門限數(shù)量為2,進(jìn)入步驟 705,收到節(jié)點(diǎn)5發(fā)送的"請(qǐng)求入簇"消息,將鄰居節(jié)點(diǎn)數(shù)量nn加1,變?yōu)?;并向鄰居節(jié)點(diǎn)5發(fā)送 "允許入簇"消息;節(jié)點(diǎn)5發(fā)送"已入簇"消息給所有鄰居節(jié)點(diǎn),dn減1,為1;節(jié)點(diǎn)5入簇階段完 成;節(jié)點(diǎn)11繼續(xù)返回步驟702,目前節(jié)點(diǎn)11已入簇節(jié)點(diǎn)數(shù)量nil等于當(dāng)前簇頭狀態(tài)S11所對(duì)應(yīng) 的門限值2;則當(dāng)前簇頭狀態(tài)sn加1,并向所有鄰居節(jié)點(diǎn)發(fā)送包含當(dāng)前簇頭狀態(tài)信息的"狀態(tài) 改變"消息;再次返回步驟702,此時(shí)sn加1后nn(2)小于當(dāng)前簇頭狀態(tài)sn所對(duì)應(yīng)的門限值3; 繼續(xù)等待下一個(gè)請(qǐng)求入簇的節(jié)點(diǎn);
[0145] 節(jié)點(diǎn)13初始簇頭狀態(tài)s13為0,已入該簇的鄰居節(jié)點(diǎn)數(shù)量n13為0,鄰居節(jié)點(diǎn)中未入簇 的成員節(jié)點(diǎn)d 13為2,分別為節(jié)點(diǎn)3和節(jié)點(diǎn)15;因?yàn)楣?jié)點(diǎn)10已經(jīng)入簇,故節(jié)點(diǎn)13的未入簇鄰居不 包括節(jié)點(diǎn)10;當(dāng)前簇頭狀態(tài)s 13所對(duì)應(yīng)的門限值為2,進(jìn)入步驟705,收到節(jié)點(diǎn)3發(fā)送的"請(qǐng)求入 簇"消息,將鄰居節(jié)點(diǎn)數(shù)量m3加1,并向鄰居節(jié)點(diǎn)3發(fā)送"允許入簇"消息,節(jié)點(diǎn)3發(fā)送"已入簇" 消息給所有鄰居節(jié)點(diǎn),di3減1,為1;節(jié)點(diǎn)3入簇階段完成;節(jié)點(diǎn)13繼續(xù)等待下一個(gè)請(qǐng)求入簇的 節(jié)點(diǎn);
[0146] 針對(duì)節(jié)點(diǎn)11,收到節(jié)點(diǎn)3發(fā)送的"已入簇"消息,dn減1,變?yōu)?,完成入簇階段;
[0147] 節(jié)點(diǎn)13簇頭狀態(tài)s13為0,已入該簇的鄰居節(jié)點(diǎn)數(shù)量n13為1,鄰居節(jié)點(diǎn)中未入簇的成 員節(jié)點(diǎn)d 13為1,為節(jié)點(diǎn)15;當(dāng)前簇頭狀態(tài)s13所對(duì)應(yīng)的門限數(shù)量為2,進(jìn)入步驟705,收到節(jié)點(diǎn) 15發(fā)送的"請(qǐng)求入簇"消息,將鄰居節(jié)點(diǎn)數(shù)量n 13加1,變?yōu)?;并向鄰居節(jié)點(diǎn)15發(fā)送"允許入簇" 消息;節(jié)點(diǎn)15發(fā)送"已入簇"消息給所有鄰居節(jié)點(diǎn),d13減1,為0,完成入簇階段。
[0148] 最終形成的簇如下:
[0149] 簇頭2的成員為節(jié)點(diǎn)14;簇頭4的成員為節(jié)點(diǎn)10,節(jié)點(diǎn)1和節(jié)點(diǎn)8;簇頭9的成員為節(jié) 點(diǎn)6和節(jié)點(diǎn)7;簇頭11的成員為節(jié)點(diǎn)5和節(jié)點(diǎn)12;簇頭13的成員為節(jié)點(diǎn)3和節(jié)點(diǎn)15。
[0150] 本發(fā)明中的門限不是預(yù)設(shè)值,而是預(yù)設(shè)規(guī)則,具體門限值由每個(gè)簇頭根據(jù)規(guī)則自 適應(yīng)生成。成員節(jié)點(diǎn)入簇不是看分簇信息達(dá)到先后,而是根據(jù)所有鄰居簇頭所處狀態(tài)(門限 階段)來選擇。
[0151] 本發(fā)明在門限法和加權(quán)法的基礎(chǔ)上提出,針對(duì)無定形扁平化自組織無線網(wǎng)絡(luò)中的 同質(zhì)節(jié)點(diǎn)組成的網(wǎng)絡(luò)結(jié)構(gòu)。如圖6所示,為本發(fā)明ALB算法與A0W算法的負(fù)載平衡因子(LBF, Load Balancing Factor)隨通訊距離的變化情況。實(shí)驗(yàn)環(huán)境為:假設(shè)網(wǎng)絡(luò)中的100個(gè)節(jié)點(diǎn)均 勻分布在一個(gè)10002單位距離的區(qū)域中,通訊距離從200變化至500,既要保證節(jié)點(diǎn)之間全聯(lián) 通,又要使節(jié)點(diǎn)之間不完全一一互為鄰居節(jié)點(diǎn)。因?yàn)長(zhǎng)BF值僅反應(yīng)簇頭對(duì)成員數(shù)量的負(fù)載情 況,所以實(shí)驗(yàn)中設(shè)置為節(jié)點(diǎn)初始狀態(tài)相同。
[0152] 從圖中可見,兩個(gè)算法的LBF都隨著節(jié)點(diǎn)個(gè)數(shù)的增多、通訊距離的增大而呈下降趨 勢(shì)。這是因?yàn)楣?jié)點(diǎn)個(gè)數(shù)會(huì)使簇的數(shù)量增加,而通訊距離的增大雖然會(huì)減小簇的數(shù)量,但也會(huì) 使各個(gè)簇的成員數(shù)差距增大,故而LBF會(huì)減小。而ALB算法在各個(gè)階段的LBF值都要高于A0W 算法,即負(fù)載均衡性高于A0W算法。
【主權(quán)項(xiàng)】
1. 一種基于主動(dòng)門限設(shè)置的自適應(yīng)分簇方法,其特征在于,具體步驟如下: 步驟一、將無線網(wǎng)絡(luò)中的每個(gè)終端作為一個(gè)節(jié)點(diǎn),對(duì)每個(gè)節(jié)點(diǎn)尋找鄰居節(jié)點(diǎn),并按歐式 距離從小到大排列; 步驟二、每個(gè)節(jié)點(diǎn)通過加權(quán)法計(jì)算自身權(quán)值,并將自身權(quán)值發(fā)送給鄰居節(jié)點(diǎn); 步驟三、每個(gè)節(jié)點(diǎn)判斷自身權(quán)值是否大于所有鄰居節(jié)點(diǎn)的權(quán)值,如果是,進(jìn)入步驟五, 否則進(jìn)入步驟四; 步驟四、針對(duì)某個(gè)節(jié)點(diǎn)i,根據(jù)鄰居節(jié)點(diǎn)發(fā)送的"簇頭存在"消息或"已分簇"消息分別對(duì) 節(jié)點(diǎn)i進(jìn)行標(biāo)記; 步驟五、針對(duì)節(jié)點(diǎn)i,設(shè)定并根據(jù)鄰居節(jié)點(diǎn)的數(shù)量門限,發(fā)送"簇頭存在"消息或"已分 簇"消息,同時(shí)對(duì)節(jié)點(diǎn)i進(jìn)行標(biāo)記; 步驟六、判斷標(biāo)記后的節(jié)點(diǎn)i是否為簇頭節(jié)點(diǎn),如果是進(jìn)入步驟七,否則為成員節(jié)點(diǎn)進(jìn) 入步驟八; 步驟七、執(zhí)行簇頭節(jié)點(diǎn)的入簇階段; 步驟八、執(zhí)行成員節(jié)點(diǎn)的入簇階段。2. 如權(quán)利要求1所述的一種基于主動(dòng)門限設(shè)置的自適應(yīng)分簇方法,其特征在于,所述的 步驟四具體為: 步驟401、針對(duì)節(jié)點(diǎn)i,判斷是否有鄰居節(jié)點(diǎn)發(fā)送"簇頭存在"消息,如果是,進(jìn)入步驟 402;否則,進(jìn)入步驟403; 步驟402、節(jié)點(diǎn)i向所有鄰居節(jié)點(diǎn)發(fā)送"已分簇"消息,并將節(jié)點(diǎn)i標(biāo)為成員節(jié)點(diǎn);進(jìn)入步 驟六; 步驟403、判斷是否權(quán)值大于自身的全部鄰居節(jié)點(diǎn)均發(fā)送"已分簇"消息,如果是,進(jìn)入 步驟五,否則,返回步驟401。3. 如權(quán)利要求1所述的一種基于主動(dòng)門限設(shè)置的自適應(yīng)分簇方法,其特征在于,所述的 步驟五具體為: 步驟501、各個(gè)節(jié)點(diǎn)自適應(yīng)生成三個(gè)門限:最小規(guī)模門限minn、最佳規(guī)模門限pren和最 大規(guī)模門限maxn; 步驟502、判斷節(jié)點(diǎn)i的鄰居數(shù)量η是否超出minn或者超出maxn,如果超出minn進(jìn)入步驟 503,否則超出maxn進(jìn)入步驟504; 步驟503、判斷節(jié)點(diǎn)i的鄰居數(shù)量η是否小于minn,如果是,向鄰居節(jié)點(diǎn)發(fā)送"已分簇"消 息,并將節(jié)點(diǎn)i標(biāo)為成員節(jié)點(diǎn);否則將節(jié)點(diǎn)i標(biāo)為簇頭節(jié)點(diǎn); 步驟504判斷節(jié)點(diǎn)i的鄰居數(shù)量η是否大于maxn,如果是,根據(jù)最佳規(guī)模門限pren數(shù)量, 向歐式距離最近的pren個(gè)鄰居節(jié)點(diǎn)發(fā)送"簇頭存在"消息,向其余節(jié)點(diǎn)發(fā)送"已分簇"消息, 將節(jié)點(diǎn)i標(biāo)為簇頭節(jié)點(diǎn);否則,向所有鄰居節(jié)點(diǎn)發(fā)送"簇頭存在"消息,將節(jié)點(diǎn)i標(biāo)為簇頭節(jié) 點(diǎn)。4. 如權(quán)利要求1所述的一種基于主動(dòng)門限設(shè)置的自適應(yīng)分簇方法,其特征在于,所述的 步驟七具體為: 步驟701、設(shè)置簇頭節(jié)點(diǎn)i的狀態(tài)81為0,已入簇的鄰居節(jié)點(diǎn)數(shù)量m為0,統(tǒng)計(jì)鄰居節(jié)點(diǎn)中 未入簇的成員節(jié)點(diǎn),數(shù)量為CU; 步驟702、判斷節(jié)點(diǎn)i未入簇成員節(jié)點(diǎn)數(shù)量Cl1是否為0或簇頭狀態(tài)S1是否為3,如果是,簇 頭節(jié)點(diǎn)i的入簇階段結(jié)束;否則進(jìn)入步驟703; 步驟703、判斷節(jié)點(diǎn)i已入簇節(jié)點(diǎn)數(shù)量m是否大于等于當(dāng)前簇頭狀態(tài)Si所對(duì)應(yīng)的門限數(shù) 量;如果是,則當(dāng)前簇頭狀態(tài)81加 1,并向所有鄰居節(jié)點(diǎn)發(fā)送包含當(dāng)前簇頭狀態(tài)信息的"狀態(tài) 改變"消息;返回步驟702;否則,進(jìn)入步驟704; 步驟704、判斷是否收到簇頭節(jié)點(diǎn)i的鄰居節(jié)點(diǎn)j發(fā)送的"已入簇"消息,如果是,則未入 簇成員節(jié)點(diǎn)個(gè)數(shù)cU減1,返回步驟702,否則進(jìn)入步驟705; 步驟705、判斷是否收到簇頭節(jié)點(diǎn)i的鄰居節(jié)點(diǎn)j發(fā)送的"請(qǐng)求入簇"消息,如果是,則已 入簇的鄰居節(jié)點(diǎn)數(shù)量m加1,并向鄰居節(jié)點(diǎn)j發(fā)送"允許入簇"消息,返回步驟702;否則返回 步驟704。5. 如權(quán)利要求4所述的一種基于主動(dòng)門限設(shè)置的自適應(yīng)分簇方法,其特征在于,所述的 簇頭狀態(tài)si的值分別為0,1,2和3;簇頭狀態(tài)0對(duì)應(yīng)的門限數(shù)量為小于最小規(guī)模門限minn值; 簇頭狀態(tài)1對(duì)應(yīng)的門限數(shù)量為大于等于最小規(guī)模門限minn值到小于最佳規(guī)模門限pren值; 簇頭狀態(tài)2對(duì)應(yīng)的門限數(shù)量為大于等于最佳規(guī)模門限pren值到小于最大規(guī)模門限maxn值; 簇頭狀態(tài)3對(duì)應(yīng)的門限數(shù)量為大于等于最大規(guī)模門限maxn值。6. 如權(quán)利要求1所述的一種基于主動(dòng)門限設(shè)置的自適應(yīng)分簇方法,其特征在于,所述的 步驟八具體為: 步驟801、針對(duì)成員節(jié)點(diǎn)i,統(tǒng)計(jì)簇頭狀態(tài)si不為3的簇頭節(jié)點(diǎn)數(shù)量為Di; 步驟802、針對(duì)節(jié)點(diǎn)i,判斷簇頭節(jié)點(diǎn)數(shù)量01是否等于0,如果是,則將節(jié)點(diǎn)i標(biāo)記為"懸空 節(jié)點(diǎn)",節(jié)點(diǎn)i完成入簇階段;否則進(jìn)入步驟803; 步驟803、針對(duì)某個(gè)節(jié)點(diǎn)i,根據(jù)收到的"狀態(tài)改變"消息更新鄰居節(jié)點(diǎn)的狀態(tài)表,從中找 出鄰居節(jié)點(diǎn)中簇頭狀態(tài)最小的"簇頭節(jié)點(diǎn)"中歐式距離最近的節(jié)點(diǎn)j,向節(jié)點(diǎn)j發(fā)送"請(qǐng)求入 簇"消息; 步驟804、針對(duì)某個(gè)節(jié)點(diǎn)i,判斷是否收到節(jié)點(diǎn)j返回的"允許入簇"消息,如果是,向所有 其它鄰居發(fā)送"已入簇"消息,節(jié)點(diǎn)i完成入簇階段;否則進(jìn)入步驟805; 步驟805、針對(duì)某個(gè)節(jié)點(diǎn)i,判斷是否收到節(jié)點(diǎn)j返回的"狀態(tài)改變"消息,如果是,進(jìn)入步 驟806,否則回到步驟804; 步驟806、針對(duì)某個(gè)節(jié)點(diǎn)i,判斷是否收到鄰居節(jié)點(diǎn)發(fā)送的簇頭狀態(tài)更新為3的"狀態(tài)改 變"消息,如果是,簇頭狀態(tài)不為3的"簇頭節(jié)點(diǎn)"個(gè)數(shù)01減1,返回步驟802,否直接回到步驟 802〇
【文檔編號(hào)】H04L12/721GK105898821SQ201610325841
【公開日】2016年8月24日
【申請(qǐng)日】2016年5月17日
【發(fā)明人】余建國(guó), 丁雅博, 趙倫, 陳雷, 汪鈥柱, 王鵬培
【申請(qǐng)人】北京郵電大學(xué)