由于某道面试题目的驱使,GA和PSO成了这个暑期里面最有意义的东西。
---------------------------我是好好味的分界线------------------------
GA:遗传算法其实是一个很大同时很热的课题,掌握好GA并不容易。关于GA的研究,主要集中在交叉和变异算子上,同时编码也是每一个实际应用中不可回避的问题。因此,这两个方面就构成了GA在应用上所要解决的问题,也直接决定了得出结果的好坏。
PSO:这是一种相当有意思的算法。理论基础是动物的群体智慧和个体经验对行为的影响。这其实是我在国庆前已经在宿舍看着维基百科写出来了。效果也是相当的好,连后来的GA都突破不了。附上关键公式:
第i个微粒表示为Xi =
(xi1, xi2, …,
xiD),它经历过的最好位置(有最好的适应值)记为Pi
= (pi1, pi2, …,
piD),也称为pbest。在群体所有微粒经历过的最好位置的索引号用符号g表示,即Pg,也称为gbest。微粒i的速度用Vi
= (vi1, vi2, …,
viD)表示。对每一代,它的第d维(1 ≤ d ≤
D)根据如下方程进行变化:
vid = w*vid+c1*rand()*(pid-xid)+c2*Rand()*(pgd-xid) (1a)
xid = xid+vid (1b)
其中w为惯性权重(inertia weight),c1和c2为加速常数(acceleration constants),rand()和Rand()为两个在[0,1]范围里变化的随机值。
(源自维基百科)
后话:我承认我的GA在实现时并不十分理想,有个小bug我没理,而且实践表明并不能有效地让种群像优秀的方向发展。虽然我有另一种方法,可以很好地填补这些缺陷,但这又会带来另一种问题--过早收敛,这是GA所要经常面临的问题。
这里面有个结论:我不是一个好的上帝,还不能把一堆猩猩变成人;却是一个不错的农夫,能够把成千上万的小鸟放出去找到我要去的地方。
插入表情