Page 166 - 《软件学报》2021年第8期
P. 166
2448 Journal of Software 软件学报 Vol.32, No.8, August 2021
2. NetConfiguration(GONodeSet,GMNodeset);
3. TempTime←CurrentTime;
4. else
5. for i=0 to the length of GONodeSet do
6. for j=0 to each group members in GMNode do
7. nodeArray[j]←GMNodeSet[i][j];
8. NodeSwitch(GONodeSet[i],GMNodeSet[i][j]);
9. end for
10. SetNewPower(GONodeSet[i],GMNodeSet[i][j]);
11. reset nodeArray;
12. end for
13. end if
14. Schedule(delayTime,loopInRuntime,this);
15. return 0;
END
在算法 1 中,使用 loopInRuntime 作为算法 1 的函数名.它拥有 3 个参数——GONodeSet、GMNodeSet 和
RunTime:GONodeSet 是组主节点的集合;GMNodeSet 是一个二维数组,第 1 列是组主节点,后面跟的是这些组主
节点一一对应的组员节点,这两个同样是全局变量;RunTime 代表已经运行的时间.在 NS-3 模拟器中,使用
GetSeconds(⋅)函数去获取当前的时间,并赋予给 CurrentTime 进行判断哪一部分需要去调用.在算法开始阶段,将
RunTime 的时间初始化给 TempTime.如果是第 1 次运行,那么 RunTime 的时间为 0;如果不是第 1 次,那么它会继
承上一次的 运行时间 .如果 CurrentTime 和 TempTime 的差值大于 600s(每 10min 切换一次 ),就调用
NetConfiguration(算法 4),并将 CurrentTime 的时间赋予给 TempTime 作为新时间点,用于下次调用时 RunTime 的
初始化;如果差值小于 600s,则调用每个组的组主和他们的组员节点到 NodeSwitch 中(算法 3)去决定是否进行组
员切换.nodeArray 是一个临时数组,用来存储一个组主的所有组员节点,它用来调用 SetNewPower(算法 2).
Schedule 是一个调度函数,有 3 个参数.它根据第 1 个参数的时间延迟调度第 2 个参数,第 2 个参数在本文中是
算法 1 本身.第 3 个参数 this 代表了算法 1 的 3 个参数:GONodeSet,GMNodeSet 和 TempTime.GONodeSet 和
GMNodeSet 会被更新,然后,TempTime 会在下一个 loopInRuntime 中作为 RunTime.
第 2 种算法,根据距离设置发射功率,如算法 2 所示.
算法 2. 根据距离设置发射功率.
输入:GONode;nodeArray.
初始化:tempPower←0;
finalPower←0;
distance←0.
BEGIN
1. for i=0 to the length of nodeArray do
2. distance←CalculateDistance(GONode,nodeArray[i]);
3. tempPower←CalculatePower(distance);
4. nodeArray[i].SetPower(tempPower);
5. if tempPower>finalPower then
6. finalPower←tempPower;
7. end if
8. end for