本部分记录一些最优化理论中的常见算法。
研究无约束优化问题,对研究各类优化问题都有重要意义。因为可以有多种方法将各类等式或者不等式约束的优化问题转换为无约束优化问题,比如利用KKT条件(乘子法),罚函数法,序列二次规划等。
(1)梯度下降 (Gradient Descent Method):泰勒一阶展开分析可得。优点:通俗易懂,且只算梯度。缺点:收敛速度慢,线性收敛,震荡。最速下降:不仅包括迭代方向,还包括的迭代步长的计算。
(2)牛顿/拟牛顿 (Newton Methods/Quasi-Newton Methods):
https://zhuanlan.zhihu.com/p/46536960里面关于拟牛顿讲的不错。但是对于优化问题的牛顿法讲的原理讲的不太清楚。
牛顿法的有点是二次收敛性,当优化问题和二次规划接近时有很快的收敛速度。缺点是要求Hessian矩阵,甚至要求逆,这要求Hessian矩阵非奇异。因此拟牛顿法就模仿牛顿法的结构去构造近似Hessian矩阵的迭代矩阵,保证算法的稳定性。
(3)共轭梯度(Conjugate Gradient Method, CGM)
早年各位先贤在研究二次规划问题时得到的结论,可以推广到其他情况,现在用的很多。其本质思想是希望对于n元函数的优化问题,找到n个共轭(更广义的正交)方向,使得每次迭代可以在共轭方向上确定迭代步长,保证这个方向的误差减少到0。其中下列的pdf讲了很多细节理论分析,有助于理解数学原理。
https://zhuanlan.zhihu.com/p/64227658
https://www.zhihu.com/question/25440474
http://hliangzhao.me/math/CG.pdf
TODO,暂时用不到先跳过了
https://blog.csdn.net/weixin_43902708/article/details/89253943
暂时没有时间抠细节,不过ASM是二次规划的一个重要基础,弄清楚后也有利于SQP的理解。
https://blog.csdn.net/dymodi/article/details/50358278
优点:对优化问题本身没有太多要求,因此其适用性较广泛,可用于求解非线性优化问题。
基本思想:把约束优化问题转化为一系列无约束优化问题。
在去除约束的过程中,可以把x偏离可行集的程度作为一个惩罚项,就是把约束映射成cost了。根本思想就是把一些东西都搞成函数值(这个思路就很现代了)。又是构造下界了,那当然就要构造一个最大的下界。外点法是可以从可行域外出发,逐渐使得解收敛到可行域内;内点法是要求从可行域内出发,然后在可行域边界处设立一套cost高墙,使得迭代过程中解不会超出边界。
https://blog.csdn.net/SkullSky/article/details/107621121
解决给定约束条件下的非线性优化问题(从最优化问题的难度来说,非凸带来的求解难度比非线性带来的难度要大很多)。
基本思想就是局部线性化(或者二次化,说白了就是用泰勒展开),就是在迭代过程中,在当前解的周围把非线性优化问题转化为标准的二次规划求解。
https://blog.csdn.net/qq_42247231/article/details/106938003 (其中对于不等式约束的二次规划问题,再次用到有效集思想)
6. 次梯度法 (Subgradient Method)
次梯度,顾名思义其区别于梯度,或者说是一种更广义的梯度,用于解决函数不可导时的优化求解问题。从这个概念上看,次梯度会是一大类很广泛的方法,涉及到原有梯度方法都需要推广到次梯度方法上去。https://blog.csdn.net/qq_32742009/article/details/81704139
松弛变量的两种作用
(1)将不等式约束转化为等式约束。https://zhuanlan.zhihu.com/p/90556189。有一个疑问:Ax <= b这样的不等式约束是变成了等式约束,但是多了一个关于新增变量的不等式约束。从整体形式上来说,这个形式非常接近于线性规划的标准型,所以可以这么搞。
(2)修改部分约束的边界,使得原来的硬约束变成软约束,使得新问题满足原约束更好,如果不满足的话,要使软约束引起的cost尽量小。https://www.cnblogs.com/Key-Ky/p/5100324.html
(1)matlab优化工具箱:这个不解释,很多高校搞研究都喜欢用matlab
(2)python:scipy.optimize,python的优化库
https://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html
https://blog.csdn.net/jiang425776024/article/details/87885969
(3)qpOAES:QP求解库,https://github.com/coin-or/qpOASES
(4)osqp:牛津搞的开源项目,对比测试这个效率会比qpOAES要高。https://osqp.org/docs/get_started/
(5)其他:https://blog.csdn.net/qq_43002347/article/details/104390139