引力搜索算法在2009年被首次提出,是一种基于万有引力定律和牛顿第二定律的种群优化算法。该算法通过种群的粒子位置移动来寻找最优解,即随着算法的循环,粒子靠它们之间的万有引力在搜索空间内不断运动,当粒子移动到最优位置时,最优解便找到了。

一、启发式算法
启发式是寻找好的(近似最佳)解的技术。对于那些受大自然的运行规律或者面向具体问题的经验、规则启发出来的方法,人们常常称为启发式算法。启发式算法是相对于最优化算法提出的。很多实际的最优化问题的计算是复杂的。因此,解决这样问题的实际方法是运用启发式算法,这样可以在合理的计算时间内找到一个近似最优解。
启发式算法可以这样定义:一个基于直观或经验构造的算法在可接受的花费(计算时间和空间)下给出解决组合优化问题每一个实例的一个可行解该可行解与最优解的偏离程度一般不能被预计。
在一些随机算法中,像模拟退火算法(SA)搜索开始于一个单一的初始点,并且以一个连续的方式继续。然而,大多数启发式搜索算法用多个初始点以并行方式搜索。例如,群为基础的算法使用类似于自然的鸟群或者鱼群的一系列代理。
在一个以群为基础的算法,每一个体施行一系列的特殊运算,并且分享这些信息给其他个体。这些操作大部分很简单,然而它们的集体效应,称为群体智能,会产生令人惊讶的结果。代理之间的局部相互作用提供了一个全局结果,它允许系统解决问题不需要应用任何的中央控制器。这种情况下,个体
操作包括随机搜索、正反馈、负反馈和多元相互作用,进行自组织。群体智能指许多简单个体通过相互合作产生复杂智
能行为的特性。

从不同的角度来看,一个以群为基础的搜索算法的个体在每次迭代中通过三个步骤来实现勘探和开采概念:自适应,合作和竞争。在自我调整的步骤,每个个体(代理)提高其性能。在合作中,个体彼此合作形成的信息传递。最后,在竞争的一步,个体竞争生存。这些步骤通常随机形成,可以用不同的方式来实现。这些步骤从自然的启发,是以人群为基础的启发式算法的思想。这些概念,引导算法寻找全局最优。然而,一个算法在解决一些问题是好的,在解决另外一些问题则不行。因此,提出高性能的新启发式算法是非常受欢迎的。我们的目标是建立一个新的考虑到所提到的方面和基于引力规则的以群为基础的搜索算法。

二、万有引力定律

万有引力定律是Newton于1687年在《自然哲学的数学原理》上提出的, 万有引力定律解释物体之间相互作用关系的定律,是物体间由于它们的引力质量而引起的相互吸引力所遵循的规律。自然界中任何两个物体都是相互吸引的,万有引力普

遍存在于任意两个有质量的物体之间。万有引力定律表示如下:

自然界中任何两个物体都是相互吸引的,引力的大小和这两个

物体的质量的乘积成正比,和它们之间距离平方成反比。

数学表达式为:

引力搜索算法java 引力搜索算法 C语言_引力搜索算法java

其中,F表示两个物体间的引力大小,G表示万有引力常数,M1,M2分别表示两个物体的质量,R表示两个物体之间的距离。

牛顿第二定律:

当一个力F作用在一个质子上,它的加速度a 依赖于力和它的质量M:

a=F/M

根据(1)和(2),增加两个质子之间的距离意味着减少他们之间的万有引力。

此外,由于引力减少的影响,引力常数的实际值依赖于宇宙的实际时间,方程(3)给出了降低引力常数与时间关系:

引力搜索算法java 引力搜索算法 C语言_引力搜索算法java_02

其中G(t)是在时间t引力常数的值,G(t,)是在tg时万有 引力常数。

三、引力质量
任何物体都具有吸引其他物体的性质,引力质量是物体这种性质的量度。选定两质点A和B,先后测量它们各自与质点C的引力FAC和FBC。实验发现,只要距离AC和BC相等,则不论这距离的大小如何,也不论质点C是什么物体,力FAC和FBC的比值FAC/FBC是一个常数。该结果表明,FAC/FBC之值仅由质点A和B本身的性质决定。物理学中规定A、B两质点引力质量之比等于力FAC与FBC之比。若用mA及mB分别表示A、B两质点的引力质量,则mA/mB=FAC/FBC,选取其中一质点的引力质量作为引力质量的单位后,另一质点的引力质量可通过实验由上式确定。通常取保存在国际计量局中的国际千克原器的引力质量为单位,称为“千克”。

引力质量分为两种,主动引力质量和被动引力质量,前者决定物体产生的引力场的强弱,后者决定物体在处于其他引力场时受到的引力大小。

主动引力质量:

引力搜索算法java 引力搜索算法 C语言_搜索_03


是对物体重力场的强度的测量,小的主动引力质量的物体的重力场比大的主动引力质量的重力场弱。

被动引力质量:

引力搜索算法java 引力搜索算法 C语言_引力搜索算法java_04


是对物体重力场中物体相互作用的强度的测量,小的被动被动引力质量的物体比大的被动引力质量的物体受到的力小。

惯性质量:

引力搜索算法java 引力搜索算法 C语言_算法_05


是当有一个力作用在物体,改变她位置的移动的力的测量,大的惯性质量的物体改变它移动的更慢,小的惯性改变快。考虑到以上提到的三种质量定义,我们重新定义牛顿定律。

引力搜索算法java 引力搜索算法 C语言_引力搜索算法java_06


【注意】牛顿第二定律里的质量为惯性质量,万有引力定律中的质量为引力质量。

引力搜索算法java 引力搜索算法 C语言_搜索_07


四、引力搜索算法

受万有引力定律启发,提出了一种新型群体智能优化算法——引力搜索算法。引力搜索算法在求解优化问题时,搜索个体的位置和问题的解相对应,并且还要考虑个体质量。个体质量用于评价个体的优劣,位置越好,质量越大。由于引力的作用,个体之间相互吸引并且朝着质量较大的个体方向移动,个体运动遵循牛顿第二定律。随着运动的不断进行,最终整个群体都会聚集在质量最大个体的周围,从而找到质量最大的个体,而质量最大个体占据最优位置。

因此,算法可以获得问题的最优解。在GSA,每个代理有4个规格:位置,惯性质量,主动引力质量和被动引力质量。每个个体的位置对应一个问题的解决方法,它们的引力和惯性质量确定应用的适应度函数。换句话说,每个个体呈现一个解决方法,并且算法通过适当的调节引力和惯性质量。

引力搜索算法属于群体智能优化算法,而群体智能优化算法最显著的特点是强调个体之间的相互作用。这里,相互作用可以是个体间直接或间接的通信。在引力搜索算法中,万有引力相当于是一种信息传递的工具,实现个体间的优化信息共享,整个群体在引力的作用下进行优化搜索。信息的交互过程不仅在群体内部传播了信息,而且群体内所有个体都能处理信息,并根据其所得到的信息改变自身的搜索行为,这样就能使得整个群体涌现出一些单个个体所不具备的能力和特性,也就是说,在群体中,个体行为虽然简单,但是个体通过得到的信息相互作用以解决全局目标,信息在整个群体的传播使得问题能够比由单个个体求解更加有效的获得解决。

引力搜索算法java 引力搜索算法 C语言_搜索算法_08


引力搜索算法java 引力搜索算法 C语言_引力搜索算法java_09


【注意】这里的质量为惯性质量,累加的符号下标应该为j

引力搜索算法java 引力搜索算法 C语言_机器学习_10


引力搜索算法java 引力搜索算法 C语言_机器学习_11


引力搜索算法java 引力搜索算法 C语言_搜索_12


引力搜索算法java 引力搜索算法 C语言_算法_13


引力搜索算法的目的并不是为了模拟万有引力定律,而是利用万有引力定律的特点去解决优化问题。算法受万有引力定律的启发,但是不拘泥于万有引力公式的原始表达式。在算法中引力与两个个体质量的乘积成正比和它们的距离成反比的优化效果更好。此外,万有引力常数不在固定不变,而是随着迭代次数单调递减,算法的优化效果更好。在计算个体受到的万有引力合力时,算法只考虑质量较大的个体产生的引力。因为在引力搜索算法中,当引力较大时,或者有质量较大的个体,或者两个个体间的距离较小。质量大的个体占据较优的位置,并且代表较好的解。算法仅考虑来自质量较大的个体的引力,可以消除因距离较小而引力较大的影响,引导其他个体向质量较大的个体方向移动。在引力的不断作用下,整个群体逐渐向质量较大的个体方向逼近,最终搜索到问题的最优解。五、算法执行步骤

引力搜索算法java 引力搜索算法 C语言_机器学习_14