有趣的描述:
“袋鼠蹦跳”
既然我们把函数曲线理解成一个一个山峰和山谷组成的山脉。那么我们可以设想所得到的每一个解就是一只袋鼠,我们希望它们不断的向着更高处跳去,直到跳到最高的山峰。所以求最大值的过程就转化成一个“袋鼠跳”的过程。
1. 遗传算法
:有很多袋鼠,它们降落到喜玛拉雅山脉的任意地方。这些袋鼠并不知道它们的任务是寻找珠穆朗玛峰。但每过几年,就在一些海拔高度较低的地方射杀一些袋鼠。于是,不断有袋鼠死于海拔较低的地方,而越是在海拔高的袋鼠越是能活得更久,也越有机会生儿育女。就这样经过许多年,这些袋鼠们竟然都不自觉地聚拢到了一个个的山峰上,可是在所有的袋鼠中,只有聚拢到珠穆朗玛峰的袋鼠被带回了美丽的澳洲。
遗传算法并不保证你能获得问题的最优解,但是使用遗传算法的最大优点在于你不必去了解和操心如何去“找”最优解。(你不必去指导袋鼠向那边跳,跳多远。)而只要简单的“否定”一些表现不好的个体就行了。(把那些总是爱走下坡路的袋鼠射杀,这就是遗传算法的精粹!)
遗传算法中的二进制编码可以对一定精度要求下的连续型决策变量进行编码表示。
适应度函数:判断解优劣的标准。
选择函数:要根据一定的方式从父代选择个体进行交叉变异。
下面以轮盘赌选择为例给大家讲解一下:
假如有5条染色体,他们的适应度分别为5、8、3、7、2。
那么总的适应度为:F = 5 + 8 + 3 + 7 + 2 = 25。
那么各个个体的被选中的概率为:
α1 = ( 5 / 25 ) * 100% = 20%
α2 = ( 8 / 25 ) * 100% = 32%
α3 = ( 3 / 25 ) * 100% = 12%
α4 = ( 7 / 25 ) * 100% = 28%
α5 = ( 2 / 25 ) * 100% = 8%
作者:短短的路走走停停被抢注啦
链接:https://www.jianshu.com/p/ae5157c26af9
染色体交叉:交换相同位置的基因片段产生新的解。
染色体变异:相当于基因复制时候产生的变异,自己发生了变化。
子种群的产生方式有待更新:存活机制是怎么样的?
2. 模拟退火
模拟退火的原理可以参照之前转载的文章,里面的细节问题:初始温度设置以及温度下降设置。
内层循环相当于一个局部搜索过程,外层循环相当于一个为了跳出局部优解而做的策略,就是在一定程度上可以接受差解。
3. 变邻域
本质上还是局部搜索,不过为了跳出局部优解,算法通常会设计几种邻域结构。当在一个邻域结构中陷入局部优解之后,就会跳到另外一个邻域结构中继续搜索,直到所有的邻域结构搜索完毕位置。
4. 禁忌搜索
禁忌搜索相较于上述其他算法来说,只不过是跳出局部优解的策略不同,而且一定程度上会防止重复搜索——禁忌列表。
可以接受差解并且有破禁机制。
这几种元启发式算法都是对已有解进行不同的随机操作(遗传有点不一样相当于种群进化),不同的问题会有不一样的表现,相同的问题是参数的设置往往会对算法表现有不同程度的影响。