Page 167 - 《软件学报》2021年第8期
P. 167
郭镇北 等:一种基于功率调控的 WiFi Direct 节能优化机制 2449
9. GONode.SetPower(finalPower);
10. return 0;
END
在算法 2 中,使用 SetNewPower 作为算法 2 的函数名,它有两个参数:GONode 和 nodeArray.GONode 是一个
组主节点,而 nodeArray 是该组主节点的组员集合.它们用来计算当前的组主与组员的距离,并设置相应的发射
功率.函数 CalculateDistance 用来计算两个节点的距离,然后,CalculatePower 根据 CalculateDistance 的结果计算
相应的发射功率,其计算公式使用的是式(7).在算法开始时,初始化 3 个变量:tempPower,finalPower 和 distance.
依次计算 nodeArray 的每个组员与组主的距离,结果为 distance.并计算相应的发射功率,计算出的发射功率为
tempPower,赋予对应的组员,使用 SetPower 函数.此时,将 tempPower 与 finalPower 比较:如果 tempPower 较大,
则将 tempPower 的值赋予给 finalPower.当所有组员的功率设置完毕以后,此时 finalPower 是组员中最大的发射
功率,将 finalPower 赋予给组主节点.
第 3 种算法,控制组员节点切换,如算法 3 所示.
算法 3. 控制组员节点切换.
输入:GONode;GMNode.
初始化:distance←0;
Switching←False;
TempGONodeArray←new Node[⋅].
BEGIN
1. distance←CalculateDistance(GONode,GMNode);
2. Switching←JudgeSwitch(distance);
3. if Switching=True then
4. current GMNode quit the group size;
5. update the GMNodeSet and group size;
6. for any switchable group for current GMNode do
7. TempGONodeArray←candidate GO node;
8. end for
9. Choosing the nearest GO from GONodeArray;
10. update the GMNodeSet and group size;
11. end if
12. return 0;
END
在算法 3 中,使用 NodeSwitch 作为算法 3 的函数名.他拥有两个参数:GONode 和 GMNode.GONode 是一个
组主节点,GMNode 是一个它的组员节点.他们被算法 1 和算法 4 调度.算法 3 是用来控制组员节点是否切换到
其他更近的可用网络,属于组员切换.在算法开始时,初始化 3 个变量:距离 distance 初始化为 0,切换标志
Switching 设置初始化为 False,初始化临时的组主数组 TempGONodeArray.首先,通过函数 CalculateDistance 计
算组主和组员的距离,将结果赋予 distance;然后,将 distance 带入 JudgeSwitch,该函数是用来判断节点是否进行
切换,其计算公式是式(10).函数 JudegeSwitch 的结果赋给切换变量 Switching,如果 Switching 的值是 True,则代
表当前的组员节点需要进行切换,离开当前组,并且更新当前组主的组员节点数组以及当前的组大小.需要注意
的是,每个组的组大小也是作为一个全局变量.随后离开的节点搜索任何可以切换的组主,并将其加入到
TempGONodeArray 中,随后选择一个最近的组主加入.在切换完成以后,随即更新整个 GMNodeSet 和每个组的
组大小.虽然组员在第 4 步的时候就宣布离开了组主,但为了尽量降低硬切换导致的断开对整个网络性能的极
大影响,组员实际上还是留在组中进行数据交换,当前的声明只是为了给其他想切换的组员提供切换的空间.当