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 步的时候就宣布离开了组主,但为了尽量降低硬切换导致的断开对整个网络性能的极
                 大影响,组员实际上还是留在组中进行数据交换,当前的声明只是为了给其他想切换的组员提供切换的空间.当
   162   163   164   165   166   167   168   169   170   171   172