发明名称 用于结构健康监测传感器优化布设的离散鸽群算法
摘要 本发明属于土木工程结构健康监测领域中的传感器优化布设,提出一种用于结构健康监测传感器优化布设的离散鸽群算法。本发明包括编码及初始化、起飞、飞行和归巢四大过程:编码及初始化过程应用双重编码方式,用于离散化连续变量,并初始化鸽群位置和速度向量;起飞过程包括腾空和上升两个子过程,用于均匀化鸽群位置向量和寻找最优解的方向;飞行过程包括平飞、转弯和追逐三个子过程,用于寻找局部最优解、全局最优解和改善全局最差解;归巢过程则避免算法陷入局部最优解。本发明算法可高效求解离散优化问题,具有较好的全局收敛性、较少的循环次数、较强的稳定性。
申请公布号 CN105976018A 申请公布日期 2016.09.28
申请号 CN201610261698.1 申请日期 2016.04.22
申请人 大连理工大学 发明人 伊廷华;温凯方;李宏男
分类号 G06N3/00(2006.01)I 主分类号 G06N3/00(2006.01)I
代理机构 大连理工大学专利中心 21200 代理人 温福雪;李宝元
主权项 一种用于结构健康监测传感器优化布设的离散鸽群算法,其特征在于如下步骤:(一)编码及初始化利用有序对(x,c)表示鸽子个体,对应传感器布设位置的可行解;其中,x是鸽子的位置向量,c为二进制向量,用于表示传感器的安放位置;编码和初始化过程如下:步骤1:将结构模态振型中含有的所有节点作为传感器布置的候选位置,假设待布设传感器的编号为1~sum的整数;步骤2:以鸽群中的第i只鸽子,i=1,2,…,N,N为鸽群中鸽子数量,其对应解为X<sub>i</sub>=X(x<sub>i</sub>,c<sub>i</sub>)={(x<sub>i,1</sub>,c<sub>i,1</sub>),(x<sub>i,2</sub>,c<sub>i,2</sub>),…,(x<sub>i,sum</sub>,c<sub>i,sum</sub>)},位置向量x<sub>i</sub>是从区间[x<sub>down</sub>,x<sub>up</sub>]之间随机产生的实数数组,X<sub>i</sub>即为每只鸽子当前位置;其中每一维的分量表示为:x<sub>i,j</sub>=rand×(x<sub>up</sub>‑x<sub>down</sub>)+x<sub>down</sub>    (1)式中:rand为[0,1]内的随机数;Y<sub>i</sub>=Y(y<sub>i</sub>,c<sub>i</sub>)={(y<sub>i,1</sub>,c<sub>i,1</sub>),(y<sub>i,2</sub>,c<sub>i,2</sub>),…,(y<sub>i,sum</sub>,c<sub>i,sum</sub>)}是每只鸽子i的当前最优位置;P<sub>b</sub>=P(p<sub>b</sub>,c<sub>b</sub>)={(p<sub>b,1</sub>,c<sub>b,1</sub>),(p<sub>b,2</sub>,c<sub>b,2</sub>),…,(p<sub>b,sum</sub>,c<sub>b,sum</sub>)}为鸽群当前最优位置;P<sub>w</sub>=P(p<sub>w</sub>,c<sub>w</sub>)={(p<sub>w,1</sub>,c<sub>w,1</sub>),(p<sub>w,2</sub>,c<sub>w,2</sub>),…,(p<sub>w,sum</sub>,c<sub>w,sum</sub>)}为鸽群当前最差位置;c<sub>i,j</sub>为x<sub>i,j</sub>通过sig函数转换而得到的二进制编码向量:<maths num="0001"><math><![CDATA[<mrow><msub><mi>c</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>=</mo><mi>s</mi><mi>i</mi><mi>g</mi><mrow><mo>(</mo><msub><mi>x</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>)</mo></mrow><mo>=</mo><mfrac><mn>1</mn><mrow><mn>1</mn><mo>+</mo><msup><mi>e</mi><mrow><mo>-</mo><msub><mi>x</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub></mrow></msup></mrow></mfrac><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>2</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000972211610000011.GIF" wi="1294" he="151" /></maths>采用基于概率法判定阈值ε的方法提高鸽群初始化的产生效率;以鸽群个体p<sub>i</sub>的第j维分量p<sub>i,j</sub>,s<sub>i,j</sub>=1的概率为sp/sum,使得s<sub>i,j</sub>=0的概率为1‑sp/sum,使得鸽群个体初始化满足编码要求;设定x<sub>w</sub>,当x<sub>i,j</sub>∈[x<sub>down</sub>,‑x<sub>w</sub>]时,s<sub>i,j</sub>=0,并且x<sub>i,j</sub>在该区间的概率为1‑sp/sum;当x<sub>i,j</sub>∈(‑x<sub>w</sub>,x<sub>up</sub>]时,s<sub>i,j</sub>=1,并且x<sub>i,j</sub>在该区间的概率为sp/sum;那么x<sub>w</sub>的取值为:x<sub>w</sub>=(sp/num)×(x<sub>up</sub>‑x<sub>down</sub>)‑x<sub>up</sub>   (3)即通过x<sub>w</sub>将区间[x<sub>down</sub>,x<sub>up</sub>]进行分割,因此ε的取值为<img file="FDA0000972211610000021.GIF" wi="206" he="78" />步骤3:鸽群敏感度初始化将鸽群引入时需要初始化每只鸽子的敏感度系数α<sub>i</sub>,α<sub>i</sub>从[0,1]中随机产生;步骤4:鸽群速度初始化向量V<sub>i</sub>=(v<sub>i,1</sub>,v<sub>i,2</sub>,…,v<sub>i,j</sub>,…v<sub>i,sum</sub>)为鸽子i的飞行速度,[‑V<sub>max</sub>,V<sub>max</sub>]为飞行速度的范围,v<sub>ij</sub>从中随机产生,其表达式为:v<sub>i,j</sub>=δV<sub>max</sub>     (4)式中:δ为[‑1,1]内的随机数;(二)起飞(1)腾空鸽群在起飞时,蹬地的高度有所不同;根据这一特性,均匀化初始值,定义[down,up]为鸽群的腾空区间;步骤1:设ΔX<sub>i</sub>=(Δx<sub>i,1</sub>,Δx<sub>i,2</sub>,…,Δx<sub>i,j</sub>,…,Δx<sub>i,sum</sub>)为鸽子i的腾空高度,ΔX<sub>i</sub>中的每一维分量从腾空范围中随机产生,其表达式:Δx<sub>i,j</sub>=κ(up‑down)+down       (5)式中:κ为[0,1]内的随机数;步骤2:更新每只鸽子的当前位置X(x<sub>i</sub>,c<sub>i</sub>),其表达式X(x<sub>i</sub>,c<sub>i</sub>)=Y(y<sub>i</sub>,c<sub>i</sub>)+α<sub>i</sub>*ΔX<sub>i</sub>    (6)若X(x<sub>i</sub>,c<sub>i</sub>)优于当前最优位置Y(y<sub>i</sub>,c<sub>i</sub>),则将当前位置X(x<sub>i</sub>,c<sub>i</sub>)赋给当前最优位置Y(y<sub>i</sub>,c<sub>i</sub>),即Y(y<sub>i</sub>,c<sub>i</sub>)=X(x<sub>i</sub>,c<sub>i</sub>),若X<sub>i</sub>优于鸽群当前最优位置P(p<sub>b</sub>,c<sub>b</sub>),则令P(p<sub>b</sub>,c<sub>b</sub>)=X(x<sub>i</sub>,c<sub>i</sub>);在步骤2中,在Y(y<sub>i</sub>,c<sub>i</sub>)+α<sub>i</sub>*ΔX<sub>i</sub>时,由于Y(y<sub>i</sub>,c<sub>i</sub>)={(y<sub>i,1</sub>,c<sub>i,1</sub>),(y<sub>i,2</sub>,c<sub>i,2</sub>),…,(y<sub>i,sum</sub>,c<sub>i,sum</sub>)},ΔX<sub>i</sub>=(Δx<sub>i,1</sub>,Δx<sub>i,2</sub>,…,Δx<sub>i,j</sub>,…,Δx<sub>i,sum</sub>),实际上,在具体相加时,是每一维分量y<sub>i,j</sub>+α<sub>i</sub>*Δx<sub>i,j</sub>相加,而相加后新的分量c<sub>Newi,j</sub>依然为新的分量y<sub>i,j</sub>通过sig函数转换而得到的二进制编码向量,在后续步骤中遇到相位置向量的相加相减情况时,都先单独对位置向量进行加减,通过每个维度的位置向量来计算二进制向量c<sub>Newi,j</sub>;但是在计算每一维分量y<sub>i,j</sub>+α<sub>i</sub>*Δx<sub>i,j</sub>时,得到的新分量可能产生超出区间[x<sub>down</sub>,x<sub>up</sub>]的情况,规定若超出上限x<sub>up</sub>,则取值为x<sub>up</sub>;若小于下限x<sub>down</sub>,则取值为x<sub>down</sub>;在飞行过程和归巢过程中,若遇到类似情况,均采用同样的方式处理;为提高算法后期收敛的精确度和速度;腾空区间[down,up]随着鸽群当前最优位置P(p<sub>b</sub>,c<sub>b</sub>)的变化而变化,其精确度与P(p<sub>b</sub>,c<sub>b</sub>)中的最大值相同;P(p<sub>b</sub>,c<sub>b</sub>)={(p<sub>b,1</sub>,c<sub>b,1</sub>),(p<sub>b,2</sub>,c<sub>b,2</sub>),…,(p<sub>b,sum</sub>,c<sub>b,sum</sub>)},当p<sub>b,1</sub>,p<sub>b,2</sub>,…,p<sub>b,sum</sub>中的最大值的精确度为0.1时,腾空区间保持相同的精确度:<maths num="0002"><math><![CDATA[<mrow><mfenced open = "{" close = ""><mtable><mtr><mtd><mrow><msub><mi>up</mi><mrow><mi>n</mi><mi>e</mi><mi>w</mi></mrow></msub><mo>=</mo><mi>u</mi><mi>p</mi><mo>*</mo><mn>0.1</mn></mrow></mtd></mtr><mtr><mtd><mrow><msub><mi>down</mi><mrow><mi>n</mi><mi>e</mi><mi>w</mi></mrow></msub><mo>=</mo><mi>d</mi><mi>o</mi><mi>w</mi><mi>n</mi><mo>*</mo><mn>0.1</mn></mrow></mtd></mtr></mtable></mfenced><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>7</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000972211610000031.GIF" wi="1285" he="127" /></maths>(2)上升鸽群腾空后有上升过程,使鸽群朝更优的方向飞行;模拟这一特性,用伪梯度方法,寻找最优解的方向,称为上升方向f′<sub>i,j</sub>(X(x<sub>i</sub>,c<sub>i</sub>));步骤1:通过式(8),随机产生向量ΔC<sub>i</sub>=(Δc<sub>i,1</sub>,Δc<sub>i,2</sub>,…,Δc<sub>i,j</sub>,…,Δc<sub>i,sum</sub>)<img file="FDA0000972211610000032.GIF" wi="1358" he="134" />式中:ri为上升高度;步骤2:计算鸽子i在每一维度j的上升方向f′<sub>i,j</sub>(X<sub>i</sub>),其表达式:<maths num="0003"><math><![CDATA[<mrow><mtable><mtr><mtd><mrow><msubsup><mi>f</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow><mo>&prime;</mo></msubsup><mrow><mo>(</mo><mi>X</mi><mo>(</mo><mrow><msub><mi>x</mi><mi>i</mi></msub><mo>,</mo><msub><mi>c</mi><mi>i</mi></msub></mrow><mo>)</mo><mo>)</mo></mrow><mo>=</mo><mfrac><mrow><mi>f</mi><mrow><mo>(</mo><mi>X</mi><mo>(</mo><mrow><msub><mi>x</mi><mi>i</mi></msub><mo>,</mo><msub><mi>c</mi><mi>i</mi></msub></mrow><mo>)</mo><mo>+</mo><msub><mi>&Delta;C</mi><mi>i</mi></msub><mo>)</mo></mrow><mo>-</mo><mi>f</mi><mrow><mo>(</mo><mi>X</mi><mo>(</mo><mrow><msub><mi>x</mi><mi>i</mi></msub><mo>,</mo><msub><mi>c</mi><mi>i</mi></msub></mrow><mo>)</mo><mo>-</mo><msub><mi>&Delta;C</mi><mi>i</mi></msub><mo>)</mo></mrow></mrow><mrow><mn>2</mn><msub><mi>&Delta;c</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub></mrow></mfrac><mo>,</mo></mrow></mtd><mtd><mrow><mi>i</mi><mo>=</mo><mn>1</mn><mo>,</mo><mn>2</mn><mo>,</mo><mo>...</mo><mo>,</mo><mi>N</mi><mo>,</mo></mrow></mtd><mtd><mrow><mi>j</mi><mo>=</mo><mn>1</mn><mo>,</mo><mn>2</mn><mo>,</mo><mo>...</mo><mo>,</mo><mi>s</mi><mi>u</mi><mi>m</mi></mrow></mtd></mtr></mtable><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>9</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000972211610000033.GIF" wi="1822" he="142" /></maths>步骤3:更新每只鸽子的当前位置X(x<sub>i</sub>,c<sub>i</sub>),其表达式:x<sub>i,j</sub>=y<sub>i,j</sub>+ri*sign(f′<sub>i,j</sub>(X(x<sub>i</sub>,c<sub>i</sub>)))    (10)式中:sign(x)为符号函数,当x&gt;0时sign(x)=1;当x=0时sign(x)=0;当x&lt;0时sign(x)=‑1;若X(x<sub>i</sub>,c<sub>i</sub>)优于当前最优位置Y(y<sub>i</sub>,c<sub>i</sub>),则将当前位置X(x<sub>i</sub>,c<sub>i</sub>)赋给当前最优位置Y(y<sub>i</sub>,c<sub>i</sub>),即Y(y<sub>i</sub>,c<sub>i</sub>)=X(x<sub>i</sub>,c<sub>i</sub>),若X<sub>i</sub>优于鸽群当前最优位置P(p<sub>b</sub>,c<sub>b</sub>),则令P(p<sub>b</sub>,c<sub>b</sub>)=X(x<sub>i</sub>,c<sub>i</sub>);步骤4:再循环一次步骤1至步骤3;(三)飞行(1)平飞与转弯定义鸽子i的邻居范围为M,即鸽子周围的M只鸽子作为自身的邻居;Ave<sub>i</sub>为邻居鸽群的平均位置;平飞次数为F<sub>1</sub>;变量r,取值范围为[1,F<sub>1</sub>],每平飞一次加1;步骤1:计算鸽子i的平均位置ave<sub>i</sub>,其表达式:<img file="FDA0000972211610000041.GIF" wi="1438" he="173" />在公式(11)中,M是一个非常重要的参数,它影响局部最优值的寻优;当M的取值过大时,Ave<sub>i</sub>的值趋近于全局最优,影响算法的收敛速度;当M的取值过小时,算法容易早熟收敛,影响算法的精度;在该公式中<img file="FDA0000972211610000042.GIF" wi="61" he="70" />是向下取整函数;步骤2:计算鸽子i的飞行速度V<sub>i</sub>;公式如下V<sub>i</sub>=w*V<sub>i</sub>+c<sub>1</sub>*(Ave<sub>i</sub>‑X(x<sub>i</sub>,c<sub>i</sub>))    (12)w的取值如下:<maths num="0004"><math><![CDATA[<mrow><mi>w</mi><mo>=</mo><mn>0.9</mn><mo>-</mo><mfrac><mn>0.5</mn><mrow><msub><mi>M</mi><mi>c</mi></msub><mo>-</mo><mn>1</mn></mrow></mfrac><mo>*</mo><mrow><mo>(</mo><mi>c</mi><mi>n</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>13</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000972211610000043.GIF" wi="1343" he="119" /></maths>在计算得到的新速度向量时会产生超出区间[‑V<sub>max</sub>,V<sub>max</sub>]的情况,因此规定,若超出上限V<sub>max</sub>,则取值为V<sub>max</sub>;若小于下限‑V<sub>max</sub>,则取值为‑V<sub>max</sub>;步骤3:更新每只鸽子的当前位置,其表达式如下:X<sup>r+1</sup>(x<sub>i</sub>,c<sub>i</sub>)=X<sup>r</sup>(x<sub>i</sub>,c<sub>i</sub>)+V<sub>i</sub>    (14)步骤4:重复步骤1至步骤3,直至达到平飞循环次数F<sub>1</sub>;(2)转弯步骤1:定义转弯次数为F<sub>2</sub>;计算鸽子i的飞行速度V<sub>i</sub>;V<sub>i</sub>=c<sub>2</sub>*(P(p<sub>b</sub>,c<sub>b</sub>)‑Y(y<sub>i</sub>,c<sub>i</sub>))     (15)式中:c<sub>2</sub>是全局飞行因子;步骤2:更新每只鸽子的当前位置,其表达式同式(14);若X<sup>r+1</sup>(x<sub>i</sub>,c<sub>i</sub>)优于当前最优位置Y(y<sub>i</sub>,c<sub>i</sub>),则令Y(y<sub>i</sub>,c<sub>i</sub>)=X<sup>r+1</sup>(x<sub>i</sub>,c<sub>i</sub>),若X(x<sub>i</sub>,c<sub>i</sub>)优于鸽群当前最优位置P(p<sub>b</sub>,c<sub>b</sub>),则令P(p<sub>b</sub>,c<sub>b</sub>)=X<sup>r+1</sup>(x<sub>i</sub>,c<sub>i</sub>);步骤3:重复步骤1至步骤2,直至达到转弯循环次数F<sub>2</sub>;(3)追逐步骤1:在n维空间向量的[n/2]~n维度之间随机产生一个整数位cp,作为位置替代点:cp=[n/2]+[φ(n/2)]    (16)式中:φ为[0,1]内的随机数;步骤2:将P<sub>b</sub>=P(p<sub>b</sub>,c<sub>b</sub>)={(p<sub>b,1</sub>,c<sub>b,1</sub>),(p<sub>b,2</sub>,c<sub>b,2</sub>),…,(p<sub>b,cp</sub>,c<sub>b,cp</sub>),…,(p<sub>b,sum</sub>,c<sub>b,sum</sub>)}中从cp~sum的值复制到P<sub>w</sub>=P(p<sub>w</sub>,c<sub>w</sub>)={(p<sub>w,1</sub>,c<sub>w,1</sub>),(p<sub>w,2</sub>,c<sub>w,2</sub>),…,(p<sub>w,cp</sub>,c<sub>w,cp</sub>),…,(p<sub>w,sum</sub>,c<sub>w,sum</sub>)}中cp~sum相应位置,如果更新后的群体最差位置P<sub>w</sub>优于之前的最差位置,则保留更新,否则不进行更新;此外,由于需要满足传感器布设的数目,所以如果更新后的P<sub>w</sub>不能满足传感器布设的数目要求,则也不进行更新;(四)归巢步骤1:对于鸽子i,在[‑rg,rg]中随机产生一个归巢系数r<sub>i</sub>;步骤2:根据每只鸽子的当前最优位置,判断个体位置与其他鸽子平均位置的差距;<maths num="0005"><math><![CDATA[<mrow><msub><mi>&Delta;H</mi><mi>i</mi></msub><mo>=</mo><msub><mi>r</mi><mi>i</mi></msub><mo>*</mo><mrow><mo>(</mo><mo>(</mo><mrow><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>N</mi></munderover><mi>Y</mi><mrow><mo>(</mo><mrow><msub><mi>y</mi><mi>i</mi></msub><mo>,</mo><msub><mi>c</mi><mi>i</mi></msub></mrow><mo>)</mo></mrow><mo>-</mo><mi>Y</mi><mrow><mo>(</mo><mrow><msub><mi>y</mi><mi>i</mi></msub><mo>,</mo><msub><mi>c</mi><mi>i</mi></msub></mrow><mo>)</mo></mrow></mrow><mo>)</mo><mo>/</mo><mo>(</mo><mrow><mi>N</mi><mo>-</mo><mn>1</mn></mrow><mo>)</mo><mo>-</mo><mi>Y</mi><mo>(</mo><mrow><msub><mi>y</mi><mi>i</mi></msub><mo>,</mo><msub><mi>c</mi><mi>i</mi></msub></mrow><mo>)</mo><mo>)</mo></mrow><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>17</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000972211610000051.GIF" wi="1558" he="135" /></maths>步骤3:更新鸽子i的当前位置;X(x<sub>i</sub>,c<sub>i</sub>)=Y(y<sub>i</sub>,c<sub>i</sub>)+ΔH<sub>i</sub>      (18)若X(x<sub>i</sub>,c<sub>i</sub>)优于当前最优位置Y(y<sub>i</sub>,c<sub>i</sub>),则令Y(y<sub>i</sub>,c<sub>i</sub>)=X(x<sub>i</sub>,c<sub>i</sub>),若X(x<sub>i</sub>,c<sub>i</sub>)优于鸽群当前最优位置P(p<sub>b</sub>,c<sub>b</sub>),则令P(p<sub>b</sub>,c<sub>b</sub>)=X(x<sub>i</sub>,c<sub>i</sub>);完整的一次算法流程即:编码及初始化、起飞、飞行、归巢四大过程;反复迭代此过程,直到找到全局最优解或满足终止条件。
地址 116024 辽宁省大连市甘井子区凌工路2号