关于爬山算法、模拟退火算法和遗传算法区别

        这三种算法都是用来求解函数“最大值”问题的算法,我们可以把函数曲线理解成一个一个山峰和山谷组成的山脉(如图片所示)。那么我们可以设想所得到的每一个解就是一只青蛙,我们希望它们不断的向着更高处跳去,直到跳到最高的山峰(尽管青蛙本身不见得愿意那么做)。所以求最大值的过程就转化成一个“青蛙跳”的过程。

关于爬山算法、模拟退火算法和遗传算法区别_第1张图片

下面介绍介绍“青蛙跳”的几种方式。

      1. 爬山算法(最速上升爬山法):

 

        从搜索空间中随机产生邻近的点,从中选择对应解最优的个体,替换原来的个体,不断重复上述过程。因为只对“邻近”的点作比较,所以目光比较“短浅”,常常只能收敛到离开初始位置比较近的局部最优解上面。对于存在很多局部最优点的问题,通过一个简单的迭代找出全局最优解的机会非常渺茫。(在爬山法中,青蛙最有希望到达最靠近它出发点的山顶,但不能保证该山顶是珠穆朗玛峰,或者是一个非常高的山峰。因为一路上它只顾上坡,没有下坡。)


   2. 模拟退火算法:

 

       这个方法来自金属热加工过程的启发。在金属热加工过程中,当金属的温度超过它的熔点(Melting Point)时,原子就会激烈地随机运动。与所有的其它的物理系统相类似,原子的这种运动趋向于寻找其能量的极小状态。在这个能量的变迁过程中,开始时。温度非常高,使得原子具有很高的能量。随着温度不断降低,金属逐渐冷却,金属中的原子的能量就越来越小,最后达到所有可能的最低点。利用模拟退火算法的时候,让算法从较大的跳跃开始,使到它有足够的“能量”逃离可能“路过”的局部最优解而不至于限制在其中,当它停在全局最优解附近的时候,逐渐的减小跳跃量,以便使其“落脚”到全局最优解上。(在模拟退火中,青蛙喝醉了,而且随机地大跳跃了很长时间。运气好的话,它从一个山峰跳过山谷,到了另外一个更高的山峰上。但最后,它渐渐清醒了并朝着它所在的峰顶跳去。)

 

   3. 遗传算法:

 

       模拟物竞天择的生物进化过程,通过维护一个潜在解的群体执行了多方向的搜索,并支持这些方向上的信息构成和交换。以面为单位的搜索,比以点为单位的搜索,更能发现全局最优解。(在遗传算法中,有很多青蛙,它们降落到喜玛拉雅山脉的任意地方。这些青蛙并不知道它们的任务是寻找珠穆朗玛峰。但每过几年,就在一些海拔高度较低的地方射杀一些青蛙,并希望存活下来的青蛙是多产的,在它们所处的地方生儿育女。)可以描述成这样的一个故事:从前,有一大群青蛙,它们被莫名其妙的零散地遗弃于喜马拉雅山脉。于是只好在那里艰苦的生活。海拔低的地方弥漫着一种无色无味的毒气,海拔越高毒气越稀薄。可是可怜的青蛙们对此全然不觉,还是习惯于活蹦乱跳。于是,不断有青蛙死于海拔较低的地方,而越是在海拔高的青蛙越是能活得更久,也越有机会生儿育女。就这样经过许多年,这些青蛙们竟然都不自觉地聚拢到了一个个的山峰上,可是在所有的青蛙中,只有聚拢到珠穆朗玛峰的青蛙被带回了美丽的澳洲。)



你可能感兴趣的:(Algorithm)