一、学习目标
1.了解全局优化(global optimization)的内容
2.学习几种经典的全局优化算法:网格法、随机搜索法、多起点局部优化法
3.掌握模拟退火法和遗传算法。
二、全局优化
在全局优化中,优化问题就不会再有约束函数,只是求解目标函数的最小值。而之所以无法使用之前的梯度下降法之类的方法,主要愿意在于:这个目标函数具有多个局部最优解,最好的办法是遍历所有点,才能找到问题最优。
主要要解决的问题:避免算法迭代到局部最优就停止了。
希望算法能够跳出局部最优解。
三、经典算法
1.网格法(Grid search)
对变量x每个维度做一个网格化操作(网格间距小于0.1),计算在各个网格节点的目标函数值,找到最小的点作为问题最优解。相当于是穷举法。
问题:算法计算量非常大,例如在上面的example中,n是x的维度,我们计算总量是10的200次方,计算时间是当前宇宙存在时间的10倍。
2.随机搜索(Random search)
思想:在变量空间中,随机取点(要求均匀分布且覆盖可行域),计算这些点的目标函数值并选择最小的作为最优解。
3.多起点局部最优法(Multi-start local minimization)
思想:在变量空间中,随机取点(要求均匀分布且覆盖可行域),使用梯度下降之类的方法求解出这些能达到的局部最优解。选择最小的局部最优解为问题的最优解。
显然,最后这种方法具有更好的效能,只要保证取点合理,找到全局最优解是几乎可以的。
四、模拟退火法
之所以叫模拟退火法,是因为它确实就是模拟退火的过程。哈。在铸铁时,我们先加热铁使其成为铁水,浇筑到模具中缓慢降温,使其成型。模拟退火法的关键就是“加温”和“降温”。
整体思想:第一步先随机设置一系列点,然后让这些点随机移动一次,计算移动后函数值是否下降了,如果下降了,就替换原来的点(一步步迭代下去就会达到局部最优);如果上升了,也有概率进行替换(为了跳出局部最优),一开始温度高,这个概率设置比较大,后面缓慢降温(cooling),使这个概率减小。从而最后每个点都达到局部最优解。选择最小的作为原问题的最优解。基本算法过程如下:
而关于是否保留点往外跳的概率,还有一点小设置:如果你跳的幅度δ太大,我就不保留,小幅度向外跳的,我就保留。整体总结如下:
五、遗传算法(Genetic algorithm)
对遗传算法的评价:
遗传算法的构成:
首先先说个遗传算法的一个缺点:遗传算法只能作用于整数的离散约束的问题中(就是x取值只能是1、2、3这种,而无法取到小数点,不能连续)原因来自于其有一个编码操作。整体的算法流程如下:
由于其遗传和变异都是基于二进制串的,这是符合基因遗传的生物原理的,这也是其优秀所在。在对种族(即点的集合)的优胜劣汰中,其决定标准就是f(x)函数值,函数值越大,越有概率繁殖下一代,否则就被淘汰掉。例如:
在下一轮的父辈选择中,b2和b6被选择了两次,b3和b4就被淘汰了。
至此,一个优化问题被我们转变成了种族进化的问题,将数据变换成二进制串和适应性度量f是二者之间的唯一联系。通过种族进化本身的规则和优点来迭代计算出原问题的最优解,是一个十分天才的想法。
当然,遗传算法的限制性决定了它的使用场景很少,使用的地方有: