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
   161   162   163   164   165   166   167   168   169   170   171