引言
前文介绍了优化方法的基本概念,通常将优化分为三类:
- 基于撒点的算法
- 基于梯度的算法
- 启发式算法
本文将对其展开介绍,同时简要介绍对于约束的处理和多目标优化。
撒点算法
这类方法比较容易理解,即:选择一系列数据点,求出对应的函数值,然后在这些函数值中通过比较大小取出最值以及对应的自变量取值,或对数据进行拟合,分析趋势。
这类方法最极端的就是穷举法,或将定义域划分成若干区间,分别进行遍历计算。
遍历算法的优点是不会陷入局部极值,一般情况下都可以得到最值;但是缺点也是显而易见的,那就是效率太低。
因此,撒点法主要研究如何进行高效率的撒点,通常采用随机或类随机的方法实现撒点。此外,正交试验也可以看作是一种类撒点方法。
基于撒点的方法严格说来并不是一种优化算法,它没有设计一种“寻优”的策略,效率也相对较低,对于规模较小的优化问题效果较好;但对于规模稍大的优化问题,该算法往往无法得到较高精度的优化结果。
然而撒点的方法可靠性高,不容易陷入局部极值,这在优化分析中是非常重要的。
基于撒点法的以上特点,通常此法可以作为优化问题的第一步“粗搜索”,作为后续介绍优化算法的粗略尝试,划定求解范围,同时可以给出后续搜索的“起点”或初值。
梯度算法
由于遍历的效率较低,我们需要考虑设计一套策略,可以较快的搜索到最优解。基于梯度方法的大概原理如下:
- 给定一个初始值,同时计算对应的目标函数值;
- 给定一个前进的步长,为了更快的接近目标,依据一定规则选择目标函数下降可能较快的方向,即梯度大的方向;
- 不断重复以上操作,直到离目标足够的近(误差足够接受),即最优搜索完成。
这里提一句,基于“最速下降法”即“梯度下降法”,同时结合了“向后传播”的思想,使得神经网络的训练得以实现,在机器学习中得到了较为广泛的运用,名声大噪。
基于梯度的方法有很多,不同算法适用于不同的问题,但原理上大多都是基于梯度计算每次“前进”的方向和速度,最终“到达”目的地。
该方法有一个较大的缺陷,即“搜索”过程是基于梯度的(类似于导数),本质上是一种局部线性化(差商替代微分),容易陷入局部极值解。
基于梯度的方法理论在凸分析中相对比较完善,但对于非凸集中的寻找全局最优有一定的问题;结合撒点法,首先在整个定义域中随机选取一定数量的起始点和区间,再在这些点和区间上分别进行梯度算法,可以在一定程度上改善陷入局部极值的问题。
启发式算法
对于非凸集的全局优化,梯度方法存在一定困难;此外,还有一些更恶劣的问题:
- 函数可导性差
- 函数不连续
- 局部震荡剧烈
- ……
对于这类问题,基于梯度的算法几乎无能为力,而启发式算法则可能可以得到相对比较满意的结果。
启发式算法的种类非常多,目前大多以仿生或模拟自然为基础,构造进化和退化的演化过程,实现优化。主要有:退火算法、遗传算法、蚁群算法等。启发式算法理论相对比较复杂,本篇不做详细的讨论。
启发式算法理论上可以解决强非线性优化问题,也不会落入局部极值解。但是该方法可解释性较差,结果不可预知;可能会得到非常好的结果,同时也可能得到非常不好的结果,在应用过程中应该特别注意。
约束问题
前面的讨论均未涉及约束带来的问题,约束使得自变量的取值空间受到限制,给问题带来了额外的困难。
所幸的是,通过引入广义拉格朗日函数,可将约束条件转化为新的目标函数的一部分:
有最优解的必要条件成为KKT(Karush-Kuhn-Tucker)条件;如果是凸优化问题,则KKT条件为有最优解的充要条件:
多目标优化
我们知道,一个优化问题只能有一个目标函数,因此多目标优化理论上不可能同时成立,常见的有通过“帕累托最优”定义;通常还有其他的处理方法,如加权构造新的目标函数,或将一些目标转换为约束条件。
最后
优化方法的基础暂时介绍到这里,后续若有机会,笔者会对其中几个有趣的专题做详细介绍。
下一篇将介绍优化方法在结构优化中的应用。
蒙特遇见卡罗:结构力学中的优化分析(3) —— 结构优化分析zhuanlan.zhihu.com-完-
公众号同步更新:数联科技工作室
公众号内有更多内容!