数学建模、运筹学之非线性规划

数学建模、运筹学之非线性规划

      • 一、最优化问题理论体系
      • 二、梯度下降法——无约束非线性规划
      • 三、牛顿法——无约束非线性规划
      • 四、只包含等值约束的拉格朗日乘子法
      • 五、不等值约束非线性规划与KKT条件

一、最优化问题理论体系

  • 最优化问题旨在寻找全局最优值(或为最大值,或为最小值)。最优化问题一般可以分为两个部分:目标函数约束条件。该问题的进一步细分也是根据这两部分的差异。
  • 最优化问题根据变量的取值范围不同可以划分为一般规划整数规划。一般规划与整数规划都可以对应两种线性与非线性的,只不过非线性规划问题针对一般规划就十分复杂更别说针对整数规划,因此我们研究的整数规划问题全部都是整数线性规划问题
  • 最优化问题根据函数式类型又可分为线性规划非线性规划。线性规划的要求是目标函数与约束条件全部都是一次函数,也就是允许多变量但每个变量的次数必须都为一次。非线性规划是指目标函数与约束条件中存在高阶变量,同样允许多变量。
  • 非线性规划应用极其广泛,因为现实生活中的目标函数与约束条件远远不止线性函数这么简单。其实我们熟知的很多问题,归根结底都是非线性规划问题。比如区域配送成本最小化、线性回归中的最优参数求解、SVM中的对偶优化等等。在下面的梳理中,我们会看到许多熟悉的问题与算法。
  • 非线性规划的分类与研究工作我们围绕约束条件展开。无约束的非线性规划问题可以使用梯度下降法牛顿法解决。针对有约束的非线性规划问题,我们将不等值约束转化为等值约束结合目标函数一起构造拉格朗日函数。具有不等值约束的非线性规划问题可以借助KKT条件来求解析解或者设计优化算法。
    数学建模、运筹学之非线性规划_第1张图片

二、梯度下降法——无约束非线性规划

  • 无约束非线性规划问题的求解方法一般分为两类,一种是不需要计算导数我们称之为直接方法,一种是计算过程中要用到目标函数的导数,比如这一章节的梯度下降法和下一章节的牛顿法
  • 无约束问题的求解通过一系列一维搜索实现,因此怎样选择搜索方向是解无约束问题的核心问题,搜索方向的不同选择,形成不同的优化方法。
  • 梯度下降法又名最速下降法,我们希望选择一个目标函数值下降最快的方向,以利于尽快达到极小值点。函数 f ( x ) f(x) f(x)在点 x x x处沿方向 d \boldsymbol{d} d的变化率可用方向导数来表达,对于可微函数,方向导数等于梯度与方向向量的内积。

方向导数:函数在某点 x x x延方向 d d d的变化速率,是一个标量。如果方向导数大于0,表明在该方向函数值上升,且绝对值越大上升速率越快;如果方向导数小于0,表明在该方向函数值下降,且绝对值越大下降速率越快。函数在某点的梯度是一个向量,该向量方向是最大方向导数的方向,该向量的模为方向导数的最大值。因此正梯度方向代表了函数值上升最快的方向,负梯度方向代表了函数值下降最快的方向。

D f ( x ; d ) = ∇ f ( x ) T d \begin{aligned} Df(x;\boldsymbol{d}) = \nabla f(x)^T \boldsymbol{d} \end{aligned} Df(x;d)=f(x)Td

  • 因此我们要找函数 f ( x ) f(x) f(x)在x处下降最快的方向,可以转化为求解以下非线性规划,寻找方向导数的最小值。
    m i n ∇ f ( x ) T d s . t . ∣ ∣ d ∣ ∣ < = 1 \begin{aligned} min \nabla f(x)^T\boldsymbol{d} \\ s.t. ||d||<=1 \end{aligned} minf(x)Tds.t.d<=1
  • 根据柯西不等式,两个向量相乘的绝对值小于等于两个向量模直接相乘。并且结合 ∣ ∣ d ∣ ∣ < = 1 ||d||<=1 d<=1可以得到第一个式子。由于目标函数值减小的方向导数是个复负数,所以去掉绝对值号后得到第二个式子。由此可得当方向向量 d \boldsymbol{d} d取下值时,方向导数取得最小值,也就是说当前方向向量为下降最快的方向,也就是梯度的负方向。
    ∣ ∇ f ( x ) T d ∣ < = ∣ ∣ ∇ f ( x ) ∣ ∣   ∣ ∣ d ∣ ∣ < = ∣ ∣ ∇ f ( x ) ∣ ∣ ( 1 ) ∇ f ( x ) T d > = − ∣ ∣ ∇ f ( x ) ∣ ∣ ( 2 ) d = − ∇ f ( x ) ∣ ∣ ∇ f ( x ) ∣ ∣ ( 3 ) \begin{aligned} |\nabla f(x)^T\boldsymbol{d} |<=||\nabla f(x)|| \space ||\boldsymbol{d}||<=||\nabla f(x)||(1) \\ \nabla f(x)^T \boldsymbol{d} >= -||\nabla f(x)|| (2)\\ \boldsymbol{d}=-\frac{\nabla f(x)}{||\nabla f(x)||}(3) \end{aligned} f(x)Td<=f(x) d<=f(x)1f(x)Td>=f(x)2d=f(x)f(x)3
  • 这里需要注意的是,在不同尺度下最速下降方向是不同的,前面定义的最速下降方向,是在向量 d \boldsymbol{d} d的欧氏范数 ∣ ∣ d ∣ ∣ < = 1 ||\boldsymbol{d}||<=1 d<=1
    的限制下得到的,属于欧氏度量意义下的最速下降方向。但通常意义上说,最常用的还是欧氏度量意义下的最速下降方向。
  • 最速下降方向反映了目标函数的一种局部性质。从局部看,最速下降方向的确是函数值下降最快的方向,选择这样的方向进行搜索是有利的。但从全局来看,由于锯齿现象的影响,即使向着极小值点移动不太大的距离,也要经历不少的弯路,因此收敛速度大为减慢。最速下降法并不是收敛最快的方法,并且也不一定收敛到全局最优值

三、牛顿法——无约束非线性规划

  • 牛顿法同样是利用导数的迭代优化算法,只不过与最速下降法不同,牛顿法还用到了目标函数的二阶导数。牛顿法的基本思路如下:在极小点附近用二阶泰勒展开式去近似目标函数 f ( x ) f(x) f(x),进而求出极小点的估计值
  • 回顾我们学习过的泰勒展开公式。泰勒公式是一个用函数在某点的信息描述其附近取值的公式。如果函数足够平滑的话,在已知函数在某一点的各阶导数值的情况之下,泰勒公式可以用这些导数值做系数构建一个多项式来近似函数。
  • 牛顿法的基本思路是在每个当前x的位置,搜索邻域中的极小值,然后将当前x值移动到极小值的过程。大体思想类似于梯度下降法,不过梯度下降法每次局部调整都是以该点的梯度信息为指导,而牛顿法每次局部调整则是根据邻域极小值为指导。
  • 我们以最简单的一维空间为例。当前点为 x ( k ) x^{(k)} x(k),我们在该点对其进行二阶泰勒展开。我们用泰勒展开去近似该点对于函数 f ( x ) f(x) f(x)的邻域值情况。我们想要根据泰勒公式,去求得该点邻域中的最小值,因此对泰勒公式求导,将驻点设置为 x ( k + 1 ) x^{(k+1)} x(k+1),并用此公式来更新当前点。
    m i n   f ( x ) , x ∈ R 1 ( 1 ) ϕ ( x ) = f ( x ( k ) ) + f ′ ( x ( k ) ) ( x − x ( k ) ) + 1 2 f ′ ′ ( x ( k ) ) ( x − x ( k ) ) 2 ( 2 ) ϕ ′ ( x ) = f ′ ( x ( k ) ) + f ′ ′ ( x ( k ) ) ( x − x ( k ) ) = 0 ( 3 ) x ( k + 1 )

你可能感兴趣的:(算法学习,算法,动态规划,线性代数,线性规划)