发明名称 一种新型群智能优化算法-鸽群算法
摘要 本发明属于优化算法领域,提供了一种新型群智能优化算法‑鸽群算法。算法包括起飞、飞行、归巢三大过程。起飞过程包括初始化、腾空和上升三个子过程,用于初始化鸽群位置、飞行速度和最优解的方向;飞行过程包括平飞、转弯和追逐三个子过程,用于寻找局部最优解、全局最优解和改善全局最差解;归巢过程则避免算法陷入局部最优解。本发明算法具有如下特点:1)算法对目标函数的性质要求不高,可以是函数表达式,也可以是非函数形式的表示形式;2)对低维函数具有全局收敛性较强、算法循环次数少、收敛速度快的特点;3)对高维、多峰值、复杂问题具有较强的全局收敛性、较少的循环次数以及较高的稳定性。
申请公布号 CN105930307A 申请公布日期 2016.09.07
申请号 CN201610261680.1 申请日期 2016.04.22
申请人 大连理工大学 发明人 伊廷华;温凯方;李宏男
分类号 G06F17/15(2006.01)I;G06N3/00(2006.01)I 主分类号 G06F17/15(2006.01)I
代理机构 大连理工大学专利中心 21200 代理人 温福雪;李宝元
主权项 一种新型群智能优化算法‐鸽群算法,其特征在于,步骤如下:(1)起飞过程:模拟鸽群起飞的特点,包含初始化、腾空和上升三个子过程,用来均匀化初始值并寻找最优解的方向;1)初始化定义N为鸽群中鸽子数量;向量X<sub>i</sub>=(x<sub>i1</sub>,x<sub>i2</sub>,…,x<sub>ij</sub>,…,x<sub>in</sub>),i=1,2,…,N,j=1,2,…,n为鸽子i的当前位置;n为未知数个数,即维度;每只鸽子的当前位置向量x<sub>i</sub>对应优化问题的一个可行解,并具有相同的维度n;向量Y<sub>i</sub>=(y<sub>i1</sub>,y<sub>i2</sub>,…,y<sub>in</sub>)为鸽子i当前最优位置;向量P<sub>b</sub>=(p<sub>b1</sub>,p<sub>b2</sub>,…,p<sub>bn</sub>)为鸽群当前最优位置;向量P<sub>w</sub>=(p<sub>w1</sub>,p<sub>w2</sub>,…,p<sub>wn</sub>)为鸽群当前最差位置;步骤1:鸽群位置的初始化对于一个多维函数,变量x<sub>ij</sub>有定义域[x<sub>down</sub>,x<sub>up</sub>],由于鸽群在起飞时有先有后,因此在定义域范围内,每只鸽子的初始定义域范围按式(1)递减,使得鸽群的初始化位置丰富,定义向量<img file="FDA0000972181470000011.GIF" wi="534" he="127" />将向量λ打乱顺序获得向量λ':<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><msub><mi>x</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub><mo>=</mo><msubsup><mi>&lambda;</mi><mi>i</mi><mo>&prime;</mo></msubsup><mo>&lsqb;</mo><mi>&beta;</mi><mrow><mo>(</mo><msub><mi>x</mi><mrow><mi>u</mi><mi>p</mi></mrow></msub><mo>-</mo><msub><mi>x</mi><mrow><mi>d</mi><mi>o</mi><mi>w</mi><mi>n</mi></mrow></msub><mo>)</mo></mrow><mo>+</mo><msub><mi>x</mi><mrow><mi>d</mi><mi>o</mi><mi>w</mi><mi>n</mi></mrow></msub><mo>&rsqb;</mo><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>1</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000972181470000012.GIF" wi="1374" he="85" /></maths>式中:β为[0,1]内的随机数;步骤2:鸽群敏感度初始化鸽子反应灵敏,警觉性高,易受到惊吓,每只鸽子的敏感性不同;定义α<sub>i</sub>为鸽子i的敏感系数,α<sub>i</sub>从[0,1]中随机产生;步骤3:鸽群速度初始化定义向量V<sub>i</sub>=(v<sub>i1</sub>,v<sub>i2</sub>,…,v<sub>ij</sub>,…v<sub>in</sub>)为鸽子i的飞行速度,[‑V<sub>max</sub>,V<sub>max</sub>]为飞行速度的范围,v<sub>ij</sub>从中随机产生,其表达式为:v<sub>ij</sub>=δV<sub>max</sub>                    (2)式中:δ为[‑1,1]内的随机数;2)腾空鸽群在起飞时,蹬地的高度有所不同;根据这一特性,均匀化初始值,定义[down,up]为鸽群的腾空区间;步骤1:ΔX<sub>i</sub>=(Δx<sub>i1</sub>,Δx<sub>i2</sub>,…,Δx<sub>ij</sub>,…,Δx<sub>in</sub>)为鸽子i的腾空高度,ΔX<sub>i</sub>中的每一分量从腾空范围中随机产生,其表达式:Δx<sub>ij</sub>=ε(up‑down)+down              (3)式中:ε为[0,1]内的随机数;步骤2:更新每只鸽子的当前位置X<sub>i</sub>,其表达式X<sub>i</sub>=Y<sub>i</sub>+α<sub>i</sub>*ΔX<sub>i</sub>                 (4)若X<sub>i</sub>优于当前最优位置Y<sub>i</sub>,则将当前位置X<sub>i</sub>赋给当前最优位置Y<sub>i</sub>,即Y<sub>i</sub>=X<sub>i</sub>,若X<sub>i</sub>优于鸽群当前最优位置P<sub>b</sub>,则令P<sub>b</sub>=X<sub>i</sub>;腾空区间[down,up]的精度与鸽群当前最优位置P<sub>b</sub>分量p<sub>ij</sub>的最大值相同;当P<sub>b</sub>中p<sub>ij</sub>的最大值的精确度为十分之一时,腾空区间[down,up]按下式保持相同的精确度:<maths num="0002" id="cmaths0002"><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>5</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000972181470000021.GIF" wi="1285" he="127" /></maths>3)上升鸽群腾空后有上升过程,使鸽群朝更优的方向飞行;用伪梯度方法模拟,寻找最优解的方向,称为上升方向f′<sub>ij</sub>(X<sub>i</sub>);步骤1:通过式(6),随机产生向量ΔC<sub>i</sub>=(Δc<sub>i1</sub>,Δc<sub>i2</sub>,…,Δc<sub>ij</sub>,…,Δc<sub>in</sub>)<img file="FDA0000972181470000022.GIF" wi="1342" he="135" />式中:ri为上升高度;步骤2:计算鸽子i在每一维度j的上升方向f′<sub>ij</sub>(X<sub>i</sub>),其表达式:<maths num="0003" id="cmaths0003"><math><![CDATA[<mrow><msubsup><mi>f</mi><mrow><mi>i</mi><mi>j</mi></mrow><mo>&prime;</mo></msubsup><mrow><mo>(</mo><msub><mi>X</mi><mi>i</mi></msub><mo>)</mo></mrow><mo>=</mo><mfrac><mrow><mi>f</mi><mrow><mo>(</mo><msub><mi>X</mi><mi>i</mi></msub><mo>+</mo><msub><mi>&Delta;C</mi><mi>i</mi></msub><mo>)</mo></mrow><mo>-</mo><mi>f</mi><mrow><mo>(</mo><msub><mi>X</mi><mi>i</mi></msub><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><mi>j</mi></mrow></msub></mrow></mfrac><mo>,</mo><mi>i</mi><mo>=</mo><mn>1</mn><mo>,</mo><mn>2</mn><mo>,</mo><mo>...</mo><mo>,</mo><mi>N</mi><mo>,</mo><mi>j</mi><mo>=</mo><mn>1</mn><mo>,</mo><mn>2</mn><mo>,</mo><mo>...</mo><mo>,</mo><mi>n</mi><mo>;</mo><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>7</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000972181470000031.GIF" wi="1590" he="118" /></maths>步骤3:更新每只鸽子的当前位置X<sub>i</sub>,其表达式:x<sub>ij</sub>=y<sub>ij</sub>+ri*sign(f′<sub>ij</sub>(X<sub>i</sub>))               (8)式中:sign(x)为符号函数,当x&gt;0时sign(x)=1;当x=0时sign(x)=0;当x<0时sign(x)=‑1;若X<sub>i</sub>优于当前最优位置Y<sub>i</sub>,则令Y<sub>i</sub>=X<sub>i</sub>,若X<sub>i</sub>优于鸽群当前最优位置P<sub>b</sub>,则令P<sub>b</sub>=X<sub>i</sub>;步骤4:再循环一次步骤1至步骤3;为了避免随机向量ΔC<sub>i</sub>有较大的偏差对f′<sub>ij</sub>(X<sub>i</sub>)准确度产生影响,重复操作;当腾空范围[down,up]的取值变化时,上升高度ri比腾空范围的精确度多一位;(2)飞行过程:模拟鸽群飞行的特点,包含平飞、转弯和追逐三个子过程;平飞用于局部寻优,转弯用于全局寻优,追逐用于改善全局最差解;当鸽群升空后,进入飞行阶段,鸽子在平缓飞行时,方向是听从邻居的,鸽子在急转弯时,方向是听从领导的;利用这一特点,令鸽群在平飞时寻找局部最优,转弯时寻找全局最优;1)平飞定义鸽子i的邻居范围为M,即鸽子周围的M只鸽子作为自身的邻居;Ave<sub>i</sub>为邻居鸽群的平均位置;平飞次数为F<sub>1</sub>;步骤1:计算鸽子i的平均位置Ave<sub>i</sub>,其表达式:<img file="FDA0000972181470000032.GIF" wi="1300" he="142" />式中,M是一个非常重要的参数,它影响局部最优值的寻优;当M的取值过大时,Ave<sub>i</sub>的值会趋近于全局最优,影响算法的收敛速度;当M的取值过小时,算法容易早熟收敛,影响算法的精度;在该公式中<img file="FDA0000972181470000033.GIF" wi="65" he="63" />是向下取整函数;步骤2:计算鸽子i的飞行速度V<sub>i</sub>;V<sub>i</sub>=w*V<sub>i</sub>+c<sub>1</sub>*(Ave<sub>i</sub>‑X<sub>i</sub>)                 (10)式中:c<sub>1</sub>是局部飞行因子,w是飞行权重系数,从0.9到0.4递减,其表达式:<maths num="0004" id="cmaths0004"><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>11</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000972181470000041.GIF" wi="1318" he="118" /></maths>式中:M<sub>c</sub>是总迭代次数,cn是算法当前迭代次数;步骤3:更新每只鸽子的当前位置,其表达式:X<sub>i</sub><sup>r+1</sup>=X<sub>i</sub><sup>r</sup>+V<sub>i</sub>              (12)若X<sub>i</sub><sup>r+1</sup>优于当前最优位置Y<sub>i</sub>,则令Y<sub>i</sub>=X<sub>i</sub><sup>r+1</sup>,若X<sub>i</sub>优于鸽群当前最优位置P<sub>b</sub>,则令P<sub>b</sub>=X<sub>i</sub><sup>r+1</sup>;步骤4:重复步骤1至步骤3,直至达到平飞循环次数F<sub>1</sub>;2)转弯鸽群在飞行过程中经常转弯来保证鸽群的飞行方向,模拟这一特性,定义转弯次数为F<sub>2</sub>;步骤1:计算鸽子i的飞行速度V<sub>i</sub>;V<sub>i</sub>=c<sub>2</sub>(P<sub>b</sub>‑Y<sub>i</sub>)                  (13)式中:c<sub>2</sub>是全局飞行因子;步骤2:更新每只鸽子的当前位置,其表达式同式(12);若X<sub>i</sub><sup>r+1</sup>优于当前最优位置Y<sub>i</sub>,则令Y<sub>i</sub>=X<sub>i</sub><sup>r+1</sup>,若X<sub>i</sub>优于鸽群当前最优位置P<sub>b</sub>,则令P<sub>b</sub>=X<sub>i</sub><sup>r+1</sup>;步骤3:重复步骤1至步骤2,直至达到转弯循环次数F<sub>2</sub>;3)追逐鸽子与其他鸟类相比,是“一夫一妻”制的鸟类,当雌鸽飞出巢穴后,雄鸽会有“逐妻”行为,称为追逐;设定鸽群最优位置P<sub>b</sub>为雌鸽,鸽群最差位置P<sub>w</sub>为雄鸽,让它们配对,改善全局最差解;步骤1:在n维空间向量的[n/2]~n维度之间随机产生一个整数位cp,作为位置替代点:cp=[n/2]+[φ(n/2)]              (14)式中:φ为[0,1]内的随机数;步骤2:将P<sub>b</sub>=(p<sub>b1</sub>,p<sub>b2</sub>,…,p<sub>bcp</sub>,…,p<sub>bn</sub>)中从cp~n位置的值直接复制到P<sub>w</sub>=(p<sub>w1</sub>,p<sub>w2</sub>,…,p<sub>wcp</sub>,…,p<sub>wn</sub>)中cp~n相应位置,如果更新后的群体最差位置P<sub>w</sub>优于之前的最差位置,则保留更新,否则不进行更新;(3)归巢过程:根据鸽子具有强烈归巢性的特点,在归巢的过程中避免算法陷入局部最优解;鸽子具有强烈的归巢性,飞行完成后总会返回自己的巢穴;定义[‑rg,rg]为归巢范围,归巢范围越小则最后着陆的范围越小,反之亦然;由于每只鸽子的记忆力都不同,因此引入平均位置差ΔH<sub>i</sub>,防止个别鸽子着陆时产生大的偏差;步骤1:对于鸽子i,在[‑rg,rg]中随机产生一个归巢系数r<sub>i</sub>;步骤2:根据每只鸽子的当前最优位置,判断个体位置与其他鸽子平均位置的差距;<maths num="0005" id="cmaths0005"><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><msub><mi>Y</mi><mi>i</mi></msub><mo>-</mo><msub><mi>Y</mi><mi>i</mi></msub></mrow><mo>)</mo><mo>/</mo><mo>(</mo><mrow><mi>N</mi><mo>-</mo><mn>1</mn></mrow><mo>)</mo><mo>-</mo><msub><mi>Y</mi><mi>i</mi></msub><mo>)</mo></mrow><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>15</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000972181470000051.GIF" wi="1390" he="135" /></maths>步骤3:更新鸽子i的当前位置;X<sub>i</sub>=Y<sub>i</sub>+ΔH<sub>i</sub>              (16)若X<sub>i</sub>优于当前最优位置Y<sub>i</sub>,则令Y<sub>i</sub>=X<sub>i</sub>,若X<sub>i</sub>优于鸽群当前最优位置P<sub>b</sub>,则令P<sub>b</sub>=X<sub>i</sub>;完整的一次鸽群算法流程即:起飞、飞行和归巢三大过程;反复迭代此过程,直到找到全局最优解或满足终止条件。
地址 116024 辽宁省大连市甘井子区凌工路2号