优化算法笔记(十七)万有引力算法

1. 万有引力算法简介

(以下描述,均不是学术用语,仅供大家快乐的阅读)
万有引力算法(Gravitational Search Algorithm)是受物体之间的万有引力启发而提出的算法。算法提出于2008(2009)年,时间不长,不过相关的文章和应用已经相对较多,也有不少的优化改进方案。
  万有引力算法中,每一个物体的位置代表了一个可行解,而物体的质量则反映了该位置的好坏,位置越好的物体的质量越大,反之物体的质量越小(质量由适应度值计算出,不是直接相等)。物体在解空间中的运动方式由其他物体的引力决定,质量越大的物体,在同等引力作用下的加速度较小,所以单位时间内的速度也相对较小,位移距离较短,反之加速度和速度都较大,位移距离较长。故可以简单的认为,位置越优的个体的移动速度越慢,位置越差的个体的移动速度越快

2. 算法流程

万物之间皆有万有引力,不过在我们谈到万有引力之时,对象大多是天体,否则万有引力太小可以忽略不计。所有这次我们的主角就是天体了。(总不可能是苹果吧)。


  每一个天体都有个属性:位置X,质量M,加速度A,以及速度V,还有适应度值F。
  在D维空间内有N个天体,其位置为

X=(x^1,x^2,...x^D)

,加速度

A=(a^1,a^2,...a^D)

,速度

V=(v^1,v^2,...v^D)

,其适应度值为

F(X)

2.1计算天体的质量

第i个天体的质量则是根据其适应度值计算得出:

计算质量

其中M为天体的质量在群体重质量中的占比,F(X_{worst}),F(X_{best}) 分别表示全局最差天体的适应度值和全局最优个体的适应度值。
  可以看出,处于最优位置的天体的质量m为1,最差位置的天体的质量m为0。当最优天体和最差天体重合时,所有的天体的质量m都为1。

2.2计算天体的加速度

由万有引力计算公式和加速度公式可以计算出当前天体收到另一个天体万有引力而产生的加速度:


计算天体的加速度

其中R表示第i个天体和第j个天体之间的欧式距离,aij为天体i在第d维上受到天体j的万有引力而产生的加速度,ai为第i个天体受到的其他所有天体万有引力的合力产生的加速度。G为万有引力常量,可以根据一下公式计算:


万有引力常量

  其中G0为初始值,T为最大迭代次数。

2.3计算天体的速度并更新位置

计算出了天体的加速度,则可以根据当前速度计算出下一步天体的运行速度以及天体下一步的位置。

更新位置和速度

  这一步比较简单与粒子群、蝙蝠等有速度的算法一致。


算法流程

  可以看出万有引力算法的流程异常的简单,与经典的粒子群差不多。万有引力算法也可以看做是一个优化改进版的粒子群,不过设计比较巧妙,引入的质量、加速度等概念,但实现仍然很简单。万有引力算法的效果如何,在下一节将会进行实验测试。

3. 实验

适应度函数f(x_1,x_2)=(x_1-a)^2+(x_2-b)^2,a=b=0
实验一:

问题维度(维度) 2
总群数量(种群数) 20
搜索次数(最大迭代次数) 100
G0 100
取值范围 (-100,100)
实验次数 10
实验一
最优值 2.3541929659476212E-18
最差值 0.12702092417237046
平均值 0.012796260245792387

从图像中可以看出,各个天体都在不停的运动,由于没有贪心算法(优于当前值才改变位置)的加入,所以个天体有可能运动到比原先位置更差的地方,而且其收敛速度也比较快。
  从结果上看,似乎还不错,受到最差值的影响均值也相对较大,算法结果的稳定性不是太好。
  直觉上感觉算法有点问题。根据物理得来的直觉告诉我,这些天体会相互靠近,所以,它们不会集中到它们所构成的凸包之外,凸实心物体的质心不会跑到该物体的外部。做个试验验证一下,将测试函数的最优解设置到一个极端的位置。
实验二: 适应度函数
f(x_1,x_2)=(x_1-a)^2+(x_2-b)^2,a=b=90

问题维度(维度) 2
总群数量(种群数) 20
搜索次数(最大迭代次数) 100
G0 100
取值范围 (-100,100)
实验次数 10

这次最优解位置在(90,90)处,该点有很大概率出现在初始天体所围成的凸多边形外。

实验二
最优值 23.0992211557913
最差值 1267.97543843818
平均值 417.19208443999185

从图像中可以看出,在天体们还没有到达最优位置附近(右下角的红点)时,它们已经收敛于一个点,之后则很难再次向最优解靠经。看结果可以发现几乎每一次实验的结果都不太好,算法果然有点问题,不过问题不大。
  万有引力出现这种现象可能有两个原因:1.算法收敛的太快,还未对全局进行充分搜索之时就收敛到了一点,收敛到一点后无法再运到。2.算法没有跳出局部最优的策略,万有引力作用下的天体慢慢聚集到奇点,形成黑洞,无法从中逃离。
  那接下来,对万有引力算法的改进方向也比较明确了:1.减缓其收敛速度,2增加跳出局部最优操作,使之逃离黑洞。
  看看万有引力常量G的函数图像

万有引力常量曲线

  几乎在x/Xmax=1/5时已经收敛到接近0。
实验三:修改
G=G0*(1-t/T)或者G=G0*e^{(-5t/T)}

问题维度(维度) 2
总群数量(种群数) 20
搜索次数(最大迭代次数) 100
G0 100
取值范围 (-100,100)
实验次数 10
G=G0*(1-t/T)
最优值 1.3110161211294625E-5
最差值 0.27745689480499086
平均值 0.033094478518038435

将万有引力常量的值修改为随着迭代次数线性下降,从图像中可以看出,效果还是比较明显的,天体在不断的运动,最后才收敛、聚集于一起。从实验结果也可以看出,算法相对稳定。结合图像可以知道,改进后,算法的收敛性下降,但全局搜索能力有较大的提升,算法的结果不会很差但是精度较低。

G=G0*e^(-5t/T)
最优值 2.828223575285611E-9
最差值 0.11880965981395
平均值 0.013540748540427833

将万有引力常量的下降趋势放缓为原来的1/4,从图像中可以看出,算法的收敛速度非常快,也得到了较好的结果,相比线性下降,算法有着更好的精度,不足之处则是没有跳出局部最优的操作,收敛过快也容易陷入局部最优。
  不知道原文为什么让万有引力常量G的如此快的降到0,明明降的更慢能有更好的全局搜索能力,但精度可能较差。猜测如果精度较差则在测试函数结果和曲线上比不赢对比的其他算法,论文没法发了。其使用的测试函数的最优解大多处于解空间的中心位置附近,即很少出现最优解在天体所围成的凸多面体之外的情况,而实际问题中我们是无法预知最优解在个位置的。
  接下来,将试着为万有引力算法加入一点跳出局部最优的操作。

实验四:改进,新增以下规则及操作
  在实验二的条件下
  1. 处于最优位置的天体保持自己的位置不动.
  2. 如果某一个天体的运动后的位置优于当前全局最优个体的位置则将当前的最优个体初始化到解空间的随机位置.(将被自己干掉的大哥流放)。
  3. 如果触发了规则2,将所有的个体的以迭代次数重置为0,即计算G=G0*e^(-20t/T)中的t置为0,重新计算万有引力常量,若未触发条件2则t=t+1。

问题维度(维度) 2
总群数量(种群数) 20
搜索次数(最大迭代次数) 100
G0 100
取值范围 (-100,100)
实验次数 10
实验四
最优值 0.002865626046584871
最差值 0.34315942017305623
平均值 0.051625935063410844

从图像上看,算法的全局搜索能力有大幅的增强,并且已经集中到了最优解的附近,而且由于加入了“流放”这一跳出局部最优的操作,可以看出,不断的有新的个体出现在距最优位置较远的位置。不过收敛速度有所下降,因此局部搜索能力有一定减弱。
  看结果,好像没有实验三那么好,但与实验二相比,已经有了很大的提升,而且有了跳出局部最优的操作,结果也相对稳定。
  上述的实验仅仅是对直观猜想的实现,如果想以此为改进点,还要对其进行大量的调优,相信会有不错的结果。

4. 总结

万有引力算法根据万有引力提出,结合了牛顿第二定律,可以说其操作步骤与真实的物理规律非常的贴切。不过就像前文说过,受物理现象启发而来的优化算法其性能是未知的,因为它们不具备智能,只有着规律,有规律就会存在弱点,就会有搜索盲区。宇宙那么大,肯定存在没有任何天体到达过的空间。
  不过由于万有引力算法流程简单,理解方便,其优化方案和能改进的地方相对较多。万有引力算法的收敛速度过快,导致其全局搜索能力较弱而局部搜索能力很强,容易陷入局部最优。根据其特点,我们可以降低其收敛速度或者增加跳出局部最优操作,来平衡算法的各个性能。

参考文献
Rashedi E , Nezamabadi-Pour H , Saryazdi S . GSA: A Gravitational Search Algorithm[J]. Information Sciences, 2009, 179(13):2232-2248. 提取码:xhpa

以下指标纯属个人yy,仅供参考

指标 星数
复杂度 ★★☆☆☆☆☆☆☆☆
收敛速度 ★★★★★★★☆☆☆
全局搜索 ★★☆☆☆☆☆☆☆☆
局部搜索 ★★★★★★★☆☆☆
优化性能 ★★★☆☆☆☆☆☆☆
跳出局部最优 ★★☆☆☆☆☆☆☆☆
改进点 ★★★★★★★☆☆☆

目录
上一篇 优化算法笔记(十六)混合蛙跳算法
下一篇 优化算法笔记(十八)灰狼算法

优化算法matlab实现(十七)万有引力算法matlab实现

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容