一、理论基础
1、流向算法
流向算法(Flow Direction Algorithm, FDA)模拟了流向排水池中具有最低高度的出口点的水流方向,是一种基于物理的优化算法。
FDA算法在将降雨转化为径流后,确定流域中的流向。该算法首先在搜索空间中创建初始种群。然后,气流流向海拔较低的位置,以达到最佳答案或最低海拔出口点。
该算法基于以下假设执行:
- 每个流都有一个位置和一个高度。
- 每个流周围都有 β \beta β位置,每个位置都有一个高度或目标函数。
- 水流运动速度与坡度直接相关。
- 水流速度为 V V V,流向海拔最低的方向。
- 流域出口点是具有最优目标函数的水流位置。
该算法的初始参数包括种群数量 α \alpha α、邻域数量 β \beta β和邻域半径 Δ \Delta Δ。关于FDA算法,流的初始位置通过以下关系计算: F l o w _ X ( i ) = l b + r a n d ∗ ( u b − l b ) (1) Flow\_X(i)=lb+rand^*(ub-lb)\tag{1} Flow_X(i)=lb+rand∗(ub−lb)(1)其中, F l o w _ X ( i ) Flow\_X(i) Flow_X(i)表示第 i i i个流的位置, l b lb lb和 u b ub ub分别表示决策变量的下限和上限, r a n d rand rand表示0和1之间均匀分布的随机值。还假设每个流周围都存在 β β β邻域,其位置由以下式子产生: N e i g h b o r _ X ( j ) = F l o w _ X ( i ) + r a n d n ∗ Δ (2) Neighbor\_X(j) = Flow\_X(i)+randn^*\Delta\tag{2} Neighbor_X(j)=Flow_X(i)+randn∗Δ(2)其中, N e i g h b o r _ X ( j ) Neighbor\_X(j) Neighbor_X(j)表示第 j j j个邻居的位置; r a n d n randn randn表示标准正态分布随机数;小数值 Δ \Delta Δ在小范围内搜索,大数值 Δ \Delta Δ允许在大范围内搜索该参数。事实上,在大范围内搜索会产生更多种类的解,并增加找到接近最优解的概率(全局搜索)。当算法的解接近全局最优解时,在小范围内搜索可获得更高精度的全局最优解(局部搜索),突出了在这两种能力之间建立平衡。其原因是,仅实现全局搜索算子会导致算法无法以所需的精度找到全局最优解。 另一方面,只进行局部搜索会导致算法陷入局部最优。因此,为了在全局搜索和局部搜索之间建立平衡,本研究使用以下公式,将 Δ \Delta Δ从较大值线性减少到较小值。因此, Δ \Delta Δ方向朝向随机位置,以获得更多的多样性。 Δ = ( r a n d ∗ X r a n d − r a n d ∗ F l o w _ X ( i ) ) ∗ ∣ ∣ B e s t _ X − F l o w _ X ( i ) ∣ ∣ ∗ W (3) \Delta=(rand^*Xrand-rand^*Flow\_X(i))^*||Best\_X-Flow\_X(i)||^*W\tag{3} Δ=(rand∗Xrand−rand∗Flow_X(i))∗∣∣Best_X−Flow_X(i)∣∣∗W(3)其中, r a n d rand rand是均匀分布的随机数, X r a n d Xrand Xrand是由式(1)生成的随机位置, W W W是随机数在0和inf之间的非线性权重。在上式中,第一项表示 F l o w _ X ( i ) Flow\_X(i) Flow_X(i)移动到随机位置( X r a n d Xrand Xrand),对于第二项,通过增加迭代, F l o w _ X ( i ) Flow\_X(i) Flow_X(i)接近 B e s t _ X Best\_X Best_X,并且 B e s t _ X Best\_X Best_X和 F l o w _ X ( i ) Flow\_X(i) Flow_X(i)之间的欧几里得距离减小为零。因此,局部搜索已停止。第三项中的 W W W计算如下: W = ( ( 1 − i t e r M a x _ I t e r ) ( 2 ∗ r a n d n ) ) ∗ ( r a n d ‾ ∗ i t e r M a x _ I t e r ) (4) W=\left(\left(1-\frac{iter}{Max\_Iter}\right)^{(2^*randn)}\right)*\left(\overline{rand}^*\frac{iter}{Max\_Iter}\right)\tag{4} W=((1−Max_Iteriter)(2∗randn))∗(rand∗Max_Iteriter)(4)其中, r a n d rand rand是均匀分布的随机向量。图1显示了通过增加迭代得到的 W W W的变化图。很明显, W W W在迭代过程中有很大的变化,能够使得FDA算法跳出局部最优。
如前所述,流以 V V V的速度向目标函数最小的邻居移动。另一方面,流向邻近地区的流速与坡度直接相关。因此,以下关系式用于确定流速矢量: V = r a n d n ∗ S 0 (5) V=randn^*S_0\tag{5} V=randn∗S0(5)其中, S 0 S_0 S0表示相邻位置和流的当前位置之间的斜率向量,随机数 r a n d n randn randn生成各种解决方案并增加全局搜索。第 i i i个流相对于其第 j j j个邻居流的斜率向量由以下关系式确定: S 0 ( i , j , d ) = F l o w _ f i t n e s s ( i ) − N e i g h b o r _ f i t n e s s ( j ) ∣ ∣ F l o w _ x ( i , d ) − N e i g h b o r _ x ( j , d ) ∣ ∣ (6) S_0(i,j,d)=\frac{Flow\_fitness(i)-Neighbor\_fitness(j)}{||Flow\_x(i,d)-Neighbor\_x(j,d)||}\tag{6} S0(i,j,d)=∣∣Flow_x(i,d)−Neighbor_x(j,d)∣∣Flow_fitness(i)−Neighbor_fitness(j)(6)其中, F l o w _ f i t n e s s ( i ) Flow\_fitness(i) Flow_fitness(i)和 N e i g h b o r _ f i t n e s s ( j ) Neighbor\_fitness(j) Neighbor_fitness(j)分别表示流 i i i和邻居 j j j的目标值, d d d参数表示问题的维度。以下式子用于确定流的新位置: F l o w _ n e w X ( i ) = f l o w _ X ( i ) + V ∗ F l o w _ X ( i ) − N e i g h b o r _ X ( j ) ∣ ∣ F l o w _ x ( i ) − N e i g h b o r _ x ( j ) ∣ ∣ (7) Flow\_newX(i)=flow\_X(i)+V^*\frac{Flow\_X(i)-Neighbor\_X(j)}{||Flow\_x(i)-Neighbor\_x(j)||}\tag{7} Flow_newX(i)=flow_X(i)+V∗∣∣Flow_x(i)−Neighbor_x(j)∣∣Flow_X(i)−Neighbor_X(j)(7)其中 F l o w _ n e w X ( i ) Flow\_newX(i) Flow_newX(i)表示流 i i i的新位置。
这里值得注意的是,任何邻居的目标函数都可能不小于流的目标函数,这类似于确定流向的水槽填充过程。为了模拟这种状态,FDA方法随机选择另一个流,如果该水流的目标函数小于当前水流的目标函数,则该水流将沿同一方向移动,否则,该水流将沿主导坡度方向移动。下式说明了如何在这些条件下模拟流向: F l o w _ n e w X ( i ) = { F l o w _ X ( i ) + r a n d n ‾ ∗ ( F l o w _ X ( r ) − F l o w _ X ( i ) ) F l o w _ f i t n e s s ( r ) < F l o w _ f i t n e s s ( i ) F l o w _ X ( i ) + 2 r a n d n ∗ ( B e s t _ X ( r ) − F l o w _ X ( i ) ) F l o w _ f i t n e s s ( r ) < F l o w _ f i t n e s s ( i ) (8) Flow\_newX(i)=\begin{dcases}Flow\_X(i)+\overline{randn}^*(Flow\_X(r)-Flow\_X(i))\quad\,\, Flow\_fitness(r)<Flow\_fitness(i)\\[2ex]Flow\_X(i)+2randn^*(Best\_X(r)-Flow\_X(i))\quad Flow\_fitness(r)<Flow\_fitness(i)\end{dcases}\tag{8} Flow_newX(i)=⎩⎨⎧Flow_X(i)+randn∗(Flow_X(r)−Flow_X(i))Flow_fitness(r)<Flow_fitness(i)Flow_X(i)+2randn∗(Best_X(r)−Flow_X(i))Flow_fitness(r)<Flow_fitness(i)(8)其中 r a n d n ‾ \overline{randn} randn为一个随机整数。
2、FDA算法流程图
FDA算法流程图如图2所示。
二、WSN覆盖优化仿真
1、二维覆盖优化
本文采用0/1模型,节点覆盖模型请参考这里。设监测区域为 50 m × 50 m 50m×50m 50m×50m的二维平面,传感器节点个数 N = 35 N=35 N=35,其感知半径是 R s = 5 m R_s=5m Rs=5m,通信半径 R c = 10 m R_c=10m Rc=10m,迭代500次。初始部署、FDA优化覆盖、FDA算法覆盖率进化曲线如下图所示:
初始部署和最终部署的节点位置及对应的覆盖率分别为:
初始位置:
45.135 44.6587
0.63621 24.149
40.4713 44.5851
15.5711 29.254
15.1929 42.0229
43.3405 14.3418
0.57793 32.0344
21.8746 3.0609
31.8399 12.9757
45.9775 5.9047
9.1862 17.6141
18.5531 44.7669
25.1904 41.8104
45.8507 23.686
37.6895 16.5394
13.777 37.4331
26.0774 33.5378
25.5093 16.0777
4.2206 3.5401
4.1302 34.716
28.8115 13.0075
40.7766 23.9536
32.7322 36.8545
42.2413 48.0119
35.4823 5.8687
6.5766 7.1371
46.8889 39.247
33.9846 25.3123
44.7094 31.8397
41.1027 0.45447
15.9888 33.3547
5.5563 25.6614
41.7533 37.7452
30.3822 15.9267
10.4704 1.4335
初始覆盖率:0.70396
最优位置:
45.4192 43.2825
2.3978 15.7442
36.1022 45.2353
16.2966 27.464
6.469 45.9584
45.812 14.4383
0.7297 31.0661
20.1324 3.6469
20.3359 14.687
46.6155 5.6113
11.6273 19.8117
16.8389 46.8174
26.4997 45.8229
48.026 23.0483
38.0916 12.4712
14.6145 34.2604
24.3655 32.5757
24.6833 22.5662
4.2546 4.6644
5.6702 37.4025
26.3122 9.5319
41.33 23.2943
31.8998 37.3818
43.7465 48.95
33.3153 4.3336
11.6172 12.7165
47.5374 37.3999
33.4266 24.764
46.9412 30.6388
40.7032 1.2179
16.0863 39.2823
7.8795 27.5396
40.243 34.4042
31.7287 17.441
10.6304 3.3714
最优覆盖率:0.8812
实验结果表明,FDA算法能够提升二维无线传感器网络中节点的覆盖率。
2、三维覆盖优化
节点覆盖模型请参考这里。设监测区域为 50 m × 50 m × 50 m 50m×50m×50m 50m×50m×50m的三维空间,传感器节点个数 N = 30 N=30 N=30,其感知半径是 R s = 10 m R_s=10m Rs=10m,通信半径 R c = 20 m R_c=20m Rc=20m,迭代500次。初始部署、FDA优化覆盖、FDA算法覆盖率进化曲线如下图所示:
初始部署和最终部署的节点位置及对应的覆盖率分别为:
初始位置:
38.9158 31.0918 49.6115
4.2869 5.8615 25.407
21.2853 12.3805 21.9046
22.9254 4.0466 29.6936
40.6879 30.8166 17.0857
9.1902 33.0474 24.1768
1.0055 39.7558 36.9518
30.0795 45.6335 13.0089
35.2937 20.2642 42.0577
8.4326 18.1383 48.4396
43.1993 28.107 34.9074
16.4891 42.7117 34.5155
47.1738 40.9736 19.3998
0.15542 44.1199 14.6595
2.0276 34.8896 4.6404
32.7953 14.5777 13.8357
36.1545 37.1754 45.0583
44.8993 0.86676 11.7305
6.0495 12.2381 36.9404
17.191 27.4408 3.4439
42.1436 26.5688 16.2104
28.1508 33.6091 41.0181
24.3276 13.4735 25.028
35.2693 8.2411 25.6697
47.3464 16.926 30.9007
9.7998 0.10682 6.404
17.9226 9.0317 5.3287
32.9734 46.0808 12.8873
30.8015 36.0761 20.635
11.7668 21.9844 10.022
初始覆盖率:0.58725
最优位置:
38.4152 20.0493 43.4511
9.6294 11.0045 22.5949
25.66 5.6433 21.7455
21.0363 6.4948 40.6119
43.2533 34.626 13.1454
9.288 27.6972 25.4243
6.2778 34.5425 41.9706
24.362 41.8288 6.6189
38.3527 5.7967 41.4726
10.2898 18.2278 42.5781
46.6322 31.2011 42.0262
19.1003 43.4868 35.3416
44.5226 42.7598 27.8916
9.2794 42.759 20.3554
5.3366 38.3235 7.6704
31.4148 19.6606 16.7247
37.7471 43.1121 42.6866
41.66 6.8736 8.4817
3.4434 6.4902 35.8814
21.3023 27.8065 7.6402
39.931 22.6251 4.4309
23.4398 30.307 41.9153
25.4385 19.158 32.0482
42.5623 8.1126 25.8119
43.6407 24.1965 27.6729
5.7529 5.6839 8.4993
22.8784 9.4841 6.1243
30.4813 45.789 20.7953
27.6432 33.1874 24.1186
6.9987 20.5535 8.2148
最优覆盖率:0.78214
实验结果表明,FDA算法能够提升三维无线传感器网络中节点的覆盖率。
三、参考文献
[1] Hojat Karami, Mahdi Valikhan Anaraki, Saeed Farzin, et al. Flow Direction Algorithm (FDA): A Novel Optimization Approach for Solving Optimization Problems[J]. Computers & Industrial Engineering, 2021, 156: 107224.