根据目标函数(当然是已知的了,如果是未知的下面很多算法都无法用)形式可分为凸函数规划和线性规划:

一、凸函数(比如目标函数: z=x^2 + y^2)

             1.无任何条件的极值

                         min z=x^2 + y^2

                        求解算法:理论手算:直接求偏导=0,解出驻点,然后用极值判断公式(有二阶导)进行判断即可

                                          计算机求解数值算法:一步步根据函数减小方向迭代,直到目标函数梯度足够小。常用算法,负梯度下 降法,牛顿法,高斯牛顿法,LM算法等,这些算法都只是确定一个新的迭代方向时候不同罢了,停止迭代条件为梯度足够小即函数值变化足够小,但是梯度足够小会不会遇到了鞍点呢,或者遇到了局部极小值点呢(可以加入一些其他算法如退火算法来一起迭代解决这些问题),所以这些算法针对的目标函数是凸函数优化,一些奇奇怪怪的函数可能求不出正确极值。

                         注:因为目标函数表达式可能很复杂(比如机器学习中的一些目标函数),偏导数不存在的点也可能是极值点,而且求二阶导和联立解出驻点都可能会很复杂(需要非常高的求解运算代价甚至无解),所以计算机就不能按照理论手算方法,得用迭代搜索的方式,虽然迭代步骤可能很多,但是具有可实现性,计算机每秒迭代速度非常快,所以这并不是问题

             2.条件极值

                       1)取值区域为边界

                                    min z=x^3 + y^3

                                    s.t. x^2+y^2=1

                                   求解算法:理论手算:拉格朗日数乘法,L(x,y,u)=x^2 + y^2+u(x+y-1),按照上面的无条件极值求解即可

                                                     计算机求解:也是一样

                       2)取值为边界以及区域内部(如x^2+y^2<=1)   (KKT条件)

                                     min z=x^3 + y^3

                                     s.t. x^2+y^2<=1

                                    求解算法:理论手算:分别算出在边界上时候的极值(拉格朗日数乘法)和区域内部极值(按照无条件极值方式算出),然后进行两个极值比较即可,一般而言,优化问题的极值都在边界上取得

                                                     计算机求解数值算法:内点法,外点法(参考工程优化)。都是在边界上筑一堵墙的方式来改写目标函数为无条件极值求解方式,然后用上面介绍的梯度下降等算法一步步迭代即可

二、线性函数(比如:cTX ,c,X为列向量,T为转置)

                       max cTX

                       s.t. AX=b

                             X>=0

                        求解算法:线性规划的图解法(二维)和单纯形法(参考工程优化)(理论求解方式和计算机算法都一样,计算机也可以实现)