回溯搜索优化算法(Backtracking Search Optimization Algorithm, BSA)是Civicioglu在2013年提出的一种求解优化问题的进化算法。该算法结构简单,仅有一个控制参数,使其受初始控制参数影响很小,且在变异策略中充分考虑历史种群的影响,并采用了新型的交叉方式,使算法具有较强的搜索能力,能够很好地解决不同类型的优化问题,已被广泛用于许多工程领域。
回溯搜索优化算法与差分进化算法在框架上有一定的相似性,不同之处在于该算法有两个选择过程分别是选择Ⅰ和选择Ⅱ。BSA算法通常包含种群初始化、选择Ⅰ、变异、交叉和选择Ⅱ五个步骤。
BSA通过上界和下界随机产生 p o p pop pop和 h i s t o r i c a l _ p o p historical\_ pop historical_pop,如式(1)和式(2)所示。 p o p i , j = r a n d × ( u p j − l o w j ) + l o w j (1) pop_{i,j}=rand\times(up_j-low_j)+low_j\tag{1} popi,j=rand×(upj−lowj)+lowj(1) h i s t o r i c a l _ p o p i , j = r a n d × ( u p j − l o w j ) + l o w j (2) historical\_ pop_{i,j}=rand\times(up_j-low_j)+low_j\tag{2} historical_popi,j=rand×(upj−lowj)+lowj(2)其中, p o p i , j pop_{i,j} popi,j为初始种群, h i s t o r i c a l _ p o p i , j historical\_ pop_{i,j} historical_popi,j为历史种群, i = 1 , 2 , ⋯ , N i=1,2,\cdots,N i=1,2,⋯,N, j = 1 , 2 , ⋯ , D j=1,2,\cdots,D j=1,2,⋯,D, N N N为种群数量, D D D为问题维数, l o w j low_j lowj和 u p j up_j upj分别是变量的下界和上界。
BSA在每次迭代之前通过式(3)产生新的历史种群 h i s t o r i c a l _ p o p historical\_ pop historical_pop。 if a < b then h i s t o r i c a l _ p o p = p o p (3) \text{if}\,\,aifa<bthenhistorical_pop=pop(3)其中, a , b a,b a,b是 ( 0 , 1 ) (0,1) (0,1)均匀分布的随机数,当生成 h i s t o r i c a l _ p o p historical\_ pop historical_pop后,需对 h i s t o r i c a l _ p o p historical\_ pop historical_pop中的个体利用式(4)进行随机排序。 h i s t o r i c a l _ p o p = p e r m u t i n g ( h i s t o r i c a l _ p o p ) (4) historical\_ pop=permuting(historical\_ pop)\tag{4} historical_pop=permuting(historical_pop)(4)其中, p e r m u t i n g permuting permuting是随机排序函数。
为了生成新的个体,采用式(5)进行变异操作: o f f s p r i n g s = p o p + F × ( h i s t o r i c a l _ p o p − p o p ) (5) offsprings=pop+F\times(historical\_ pop-pop)\tag{5} offsprings=pop+F×(historical_pop−pop)(5)其中, F F F为变异尺度系数, F = 3 × r a n d n F=3\times randn F=3×randn, r a n d n randn randn为标准正态分布随机数。
BSA的交叉策略是一种基于两种交叉方式等概率调用的联合交叉策略。首先,生成一个初始值为1、大小为 N × D N\times D N×D的矩阵;然后,通过式(6)更新矩阵 M a p Map Map;最后,通过矩阵 M a p Map Map来确定种群交叉的位置,具体如式(7)所示: { M a p i , u [ 1 : c e i l ( m i x r a t e × r a n d × D ) ] = 0 , a < b M a p i , r a n d i ( D ) = 1 , otherwise (6) \begin{dcases}Map_{i,u[1:ceil(mixrate\times rand\times D)]}=0,\quad a⎩⎨⎧Mapi,u[1:ceil(mixrate×rand×D)]=0,a<bMapi,randi(D)=1,otherwise(6) T i , j = { o f f s p r i n g s i , j , M a p i , j = 0 p o p i , j , otherwise (7) T_{i,j}=\begin{dcases}offsprings_{i,j},\quad Map_{i,j}=0\\[2ex]pop_{i,j},\quad\quad\quad\quad\,\,\,\, \text{otherwise}\end{dcases}\tag{7} Ti,j=⎩⎨⎧offspringsi,j,Mapi,j=0popi,j,otherwise(7)其中, a , b a,b a,b是 ( 0 , 1 ) (0,1) (0,1)均匀分布的随机数; m i x r a t e mixrate mixrate是交叉率; r a n d rand rand是 ( 0 , 1 ) (0,1) (0,1)均匀分布的随机数; D D D是问题维数; r a n d i ( D ) randi(D) randi(D)是 ( 0 , D ) (0,D) (0,D)内的一个随机整数; u = r a n d p e r m ( D ) u = randperm(D) u=randperm(D)是对 D D D重新排序; c e i l ceil ceil是向上取整。BSA通过这种新交叉方式产生种群 T T T。然后对生成的新种群 T T T进行边界越界处理,对超出边界的个体按式(1)重新生成。
比较新种群和初始种群的适应度值,保留适应度值小的个体并且记录当前最优解和最优个体,同时更新当代种群,具体如式(8)所示: p o p i = { T i , f i t n e s s ( T i ) < f i t n e s s ( p o p i ) p o p i , otherwise (8) pop_i=\begin{dcases}T_i,\quad\quad fitness(T_i)
节点覆盖模型采用0/1模型,请参考这里。
①设监测区域为 50 m × 50 m 50m\times50m 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次。初始部署、BSA优化覆盖、BSA算法覆盖率进化曲线如下图所示。
初始部署和最终部署的节点位置及对应的覆盖率分别为:
初始位置:
47.124 47.9344
32.5198 30.4192
4.5342 18.0913
46.4069 4.2561
28.2659 28.5879
46.3592 28.6416
47.9616 34.6558
18.8673 29.756
0.11117 39.4307
14.8831 15.3668
21.089 34.6613
10.1279 31.8318
40.5279 33.284
37.8267 42.3
46.4861 4.868
1.553 6.1206
23.6908 46.7875
33.2589 24.9997
39.0657 20.0988
6.0795 42.5905
39.2437 37.0335
34.4225 48.9753
30.9386 44.1549
46.4969 46.5101
5.3762 10.1219
32.1108 17.3128
7.9179 2.2977
34.038 25.5166
12.1176 22.4935
41.0189 27.5623
27.2771 4.0213
15.9385 16.8411
17.207 3.2149
33.3682 14.7687
44.8786 22.0029
初始覆盖率:0.68589
最优位置:
0 46.5608
28.8421 30.8317
5.6644 18.6004
46.5196 3.4667
28.3778 39.7438
45.5776 29.1696
45.2379 35.0487
18.8673 1.6263
14.0855 40.6004
15.4417 48.4898
21.4952 35.5414
10.7442 32.0443
17.5666 32.7407
38.113 5.556
0.35894 5.5321
1.5414 36.889
23.2231 46.3201
33.7721 24.3522
24.8332 19.816
7.5879 42.1201
37.0714 37.3455
34.4225 47.1616
30.4075 17.1938
45.7491 45.384
5.3762 11.0979
35.1515 13.3957
8.7832 2.5393
20.6683 26.1557
12.1176 22.6683
0.84542 27.4787
27.8354 3.9388
21.4406 11.7861
13.3941 11.2898
45.3908 14.7022
43.9823 22.3353
最优覆盖率:0.8589
②设监测区域为 20 m × 20 m 20m\times20m 20m×20m的二维平面,传感器节点个数 N = 24 N=24 N=24,其感知半径是 R s = 2.5 m R_s=2.5m Rs=2.5m,通信半径 R c = 5 m R_c=5m Rc=5m,迭代500次。初始部署、BSA优化覆盖、BSA算法覆盖率进化曲线如下图所示。
初始部署和最终部署的节点位置及对应的覆盖率分别为:
初始位置:
10.1231 12.9502
14.3391 12.1233
13.4715 3.0371
1.2104 5.771
8.725 9.3677
2.0251 0.83083
15.9921 16.03
16.9868 18.041
18.2207 16.1717
9.1811 18.1447
3.9475 17.8618
9.2425 2.7359
1.8625 12.5561
18.5876 11.5972
12.7748 16.9615
15.7844 5.2876
9.1319 15.0238
15.042 14.653
0.38377 12.3122
18.9084 12.5346
1.6442 11.6659
15.8214 11.0128
8.1621 6.7259
17.6736 1.2873
初始覆盖率:0.70975
最优位置:
8.9069 8.3014
18.2393 4.7769
14.0097 17.819
2.2386 17.0904
9.445 17.5835
10.4066 12.174
16.6946 0.69316
0.21363 9.8217
13.8475 7.0866
4.457 1.0457
19.5863 10.5938
7.7861 0.86812
0.072549 1.4563
15.2427 10.5352
4.2111 12.322
12.8047 1.0715
4.984 5.2729
12.6191 14.4157
18.4766 19.9354
10.1765 5.3295
5.3901 9.7
1.7606 5.8059
17.8318 15.9513
5.3892 17.7656
最优覆盖率:0.87755
③设监测区域为 100 m × 100 m 100m\times100m 100m×100m的二维平面,传感器节点个数 N = 35 N=35 N=35,其感知半径是 R s = 10 m R_s=10m Rs=10m,通信半径 R c = 20 m R_c=20m Rc=20m,迭代500次。初始部署、BSA优化覆盖、BSA算法覆盖率进化曲线如下图所示。
初始部署和最终部署的节点位置及对应的覆盖率分别为:
初始位置:
17.4147 85.7722
77.2585 45.9465
93.9948 21.9034
93.7464 56.6486
21.2996 84.1832
85.0283 41.7371
94.6524 46.6222
35.0798 72.6364
48.0477 59.5051
74.9584 73.4895
3.9251 5.0775
32.9689 86.4033
83.3193 76.4871
10.8632 67.2208
55.4786 82.9804
17.8693 94.6589
63.2786 46.4459
73.4102 26.4675
45.6915 59.011
2.3292 46.9054
67.5321 26.7515
22.8698 30.6846
35.6113 32.7242
11.9705 30.3345
28.8913 70.4301
52.3793 96.2492
29.054 79.9265
63.5569 10.1929
77.1899 81.7939
65.7461 75.2585
95.1037 75.9692
36.8222 6.2811
78.8527 28.4769
43.9197 17.6966
58.8876 25.9329
初始覆盖率:0.68493
最优位置:
68.362 39.8069
42.4735 40.1471
30.9132 24.0716
93.2503 43.8365
83.3062 54.3827
12.9007 26.1287
92.7266 100
8.444 69.8985
36.2364 7.8423
60.6229 65.3817
75.8586 71.1338
39.758 64.2407
59.1204 13.4932
69.3549 88.4127
8.9913 35.1674
16.7231 7.8267
26.5689 38.3477
89.5034 84.2039
23.995 59.8732
36.0154 94.3748
66.1861 55.3857
15.7094 96.833
98.7229 12.4147
67.7447 7.5694
95.8975 72.1728
9.1492 51.2291
55.319 42.8871
71.2064 21.1396
80.7131 6.5392
9.2481 87.1618
45.4099 23.4949
29.1164 85.5924
88.2643 28.2161
52.035 85.1147
43.1142 74.197
最优覆盖率:0.84982
实验结果表明:BSA算法实现了较高的网络覆盖率,节点分布更加均匀,覆盖盲区和感知范围重叠区面积更少,可以验证BSA算法的有效性。
[1] Pinar Civicioglu. Backtracking Search Optimization Algorithm for numerical optimization problems[J]. Applied Mathematics and Computation, 2013, 219: 8121-8144.
[2] 魏锋涛, 史云鹏, 石坤. 具有组合变异策略的回溯搜索优化算法[J]. 计算机工程与应用, 2020, 56(9): 41-47.