Page 165 - 《软件学报》2021年第8期
P. 165

郭镇北  等:一种基于功率调控的 WiFi Direct 节能优化机制                                             2447


                 两个意愿决策值,寻找到了 NP-Hard 的局部解来解决问题 1.
                    B.  组主切换机制
                    组员切换中,没有 10min 的限制,组员的切换是实时的.组员通过切换到一个较近的组主,更近的通信距离有
                 效地降低了组主和组员的发射功率,从而降低了功率消耗.然而,如果组员感知到更近的组主就进行切换,频繁
                 的切换会极大地影响网络性能.此外,因为每个组主所连接的设备数量有限,这种行为也会导致其他设备不得不
                 选择更远的设备,导致更高的能耗.
                    如图 7 所示,在切换之后,组员 12、组员 6 和组主 1 距离较近,加入了组主 1,从而导致组员 2 和组员 4 不得
                 不选择较远的组主.因此,在本文中提出了一个切换概率 P switch 来控制组主节点是否切换到另外一个可用的网
                 络.P switch 有 4 个参数,如式(9)所示.
                                                            d  1
                                                      P switch  =                                     (9)
                                                            dN α
                                                             0
                 其中,d 是两个节点之间的实际距离,d 0 是最大切换距离,N 是当前组的设备数量,α是指数控制因子.在本文中,所
                 有的节点分布在半径为 100m 的圆形区域内,因此将 d 0 设置为 100m.当两个节点的距离大于 100m 后,当前节点
                 应当切换选择到一个更近的可用网络,此时概率 P switch 公式如下:
                                                       ⎧ ⎪  d  1  ,≤ 100
                                                              d
                                                 P switch  = ⎨ 100 N α                               (10)
                                                       ⎪
                                                       ⎩ 1,            Otherwise
                    本文在仿真实验中采用不同的指数控制因子α,并根据能耗以及吞吐量选择最佳的指数控制因子α.


















                                                 Fig.7   Uncontrolled switching
                                                    图 7   无控制的切换
                 3.4   调度算法

                    本文中一共使用了 4 种调度算法,其中,第 1 种算法(算法 1)负责调度其他 3 种算法.第 1 种算法初始化以后,
                 循环激活提出的节能机制,如算法 1 所示.
                    算法 1.  循环激活节能机制.
                    输入:GONodeSet;GMNodeSet;Runtime.
                    初始化:TempTime←RunTime;
                           delayTime←1;
                           CurrentTime←GetSeconds(⋅);
                           nodeArray←new Node[⋅].
                    BEGIN
                    1.   IF CurrentTime−TempTime≥600 then
   160   161   162   163   164   165   166   167   168   169   170