目录
1.凸分析
1.1 为什么需要凸分析
1.2 凸分析相关概念
1.3 凸规划定义
1.4 单变量NLP凸分析
1.5 多变量NLP凸分析
2.拉格朗日松弛
2.1 拉格朗日函数
2.2 拉格朗日对偶
2.2.1 弱对偶性
2.2.2 凸性
2.2.3 强对偶性
2.2.4 与LP对偶关系
3.KKT条件
3.1 KKT介绍
3.2 KKT举例
来源:Coursera课程/Operations Research (3): Theory week5/6
课程前言:
运筹学包括三个部分:模型,算法和理论,大部分场景下,理论(theory)是关于最优性条件(optimality conditions),求解实际问题需要建立模型,求解模型需要使用算法,而理论能帮助开发更好的算法
(1)最优性条件
- 线性规划:对偶性
- 整数规划:全单模矩阵
- 带约束的非线性规划:拉格朗日和KKT条件✅
博客Operations Research课程之非线性规划(梯度下降|牛顿法|Gurobi+Python)中提到的梯度下降和牛顿法适用于无约束的非线性规划,对于带约束的非线性规划问题,本文首先介绍凸规划,然后介绍两种工具:Lagrangian relaxation和 KKT condition
1.凸分析
1.1 为什么需要凸分析
与LP问题相比,NLP更困难
- 在NLP中,一个局部最小(最优)不总是全局最小(最优),如左图所示,x1是局部最小但是不是全局最小
- 在有最优解NLP中,可能不存在极点最优解(extreme point),如右图所示,最优解是(2,2)但是极点是(0,4)和(4,0)
没有人能开发有效的算法来解决通用NLP,为了更容易求解NLP(找到一个全局最优解),我们希望NLP有以下特征:
- 我们希望局部最优就是全局最优
- 我们希望保证有极点最优解(当存在一个最优解时)
了解这些特征,就需要了解凸分析(convex analysis)
1.2 凸分析相关概念
(1)凸集convex set
定义1(凸集convex set)
凸集中任意两点的连线也在集合内,如左图所示,右图不是凸集
(2) 凸函数convex functio
定义2(凸函数convex function)
凸函数有一个上升曲线,任意两点连线上某点的取值要大于实际取值,如左图所示,右图不是凸函数
(3) 凹函数concave function
定义3(凹函数concave function)
上面红色框的是凸集和凸函数,其中凸函数最后一个是三维,画图会发现一个碗的形状,因此是凸函数。
(4)全局最优与局部最优
命题1(凸函数的全局最优性global optimality)
(5)极点与最优解
命题2
对任何在凸可行域上有全局最小的凹函数,全局最小是一个极点
1.3 凸规划定义
根据上述两个命题可知,如果想在凸可行域F上最小化函数f
- 如果函数f是凸的,就搜索一个局部最小
- 如果函数f是凹的,就搜索F中的极点
对于LP问题,有两个重要特征
因此我们可以用贪婪搜索关注极点,从而找到最优解,这也是单纯形法的思想,单纯形法通过不断搜索更好的基本可行解(极点)来寻找最优解。
定义4(凸规划convex program CP)
如果一个NLP的可行域是凸的并且目标函数在可行域上也是凸的,那么这个NLP是CP问题
根据定义4可得命题5
命题5
1.4 单变量NLP凸分析
前面定义了凸性和凸规划的概念,在给定一个函数后,我们需要知道它是不是凸的,比较简单的函数可以通过凸函数定义来证明,但是复杂的函数是不能直接看出的,首先针对单变量NLP
单变量NLP凸分析条件
其中条件2称为FOC(first order condition),对所有函数,FOC都是局部最优的必要条件,对于凸函数,FOC还是全局最优的充分条件。求解NLP问题,凸分析对于寻找局部最优或全局最优是非常关键的。以库存控制中的EOQ经济订货批量模型为例说明对于单变量NLP的凸分析过程
1.5 多变量NLP凸分析
在Operations Research课程之非线性规划中介绍过梯度和Hessian矩阵
对于多变量NLP,其凸性理论和单变量类似
多变量NLP凸分析条件
有一个关键概念,条件1中的半正定(positive semi-definite PSD)
半正定(positive semi-definite PSD)
下面举例说明多变量NLP凸分析及求解过程
虽然不能有效的解决通类NLP问题(general NLP),但是求解CP问题还是存在一些有效的算法,对于CP类的NLP,可以结合凸分析使用上述1.4和1.5节中的方法,如果FOC难以直接求解,还可以使用牛顿法和梯度下降,但是这些方法都只适用于无约束,接下来介绍求解带约束的非线性凸规划问题用到的方法:拉格朗日松弛和KKT条件
2.拉格朗日松弛
2.1 拉格朗日函数
对于带约束的非线性规划问题,当约束难处理时,最直观的方法是先忽略这些约束,求解问题找到最优解,如果满足约束就是原问题的最优解,如果不满足约束只能寻找一个最近的可行解。很显然这种方法有缺陷。现在换一种思路:不是直接忽略所有约束,而是允许违反约束,但是尽量保证可行性。
拉格朗日松弛将约束条件通过拉格朗日乘子结合到目标函数中,其核心是奖励可行性(reward feasibility)和惩罚不可行(penalize infeasibility)。注意拉格朗日乘子也可以为负,但是后面表达式也要变化,只要两者乘积能表示核心即可。下面是一个简单的转化例子
2.2 拉格朗日对偶
2.2.1 弱对偶性
弱对偶性:拉格朗日松弛能提供原始NLP一个bound
回想LP及其对偶问题:任何可行的对偶解都能为原始LP提供一个bound,通过寻找对偶最优解能为原始LP提供最紧的bound,这和拉格朗日松弛为原始NLP提供bound类似,因此最小化拉格朗日函数也称为拉格朗日对偶
拉格朗日对偶除了具有弱对偶性,还有一些其它需要探讨的性质:
- 拉格朗日函数的凸性
- 强对偶性
- LP对偶和拉格朗日对偶的关系
2.2.2 凸性
拉格朗日对偶是凸的
无论原始NLP凸性如何,拉格朗日对偶NLP都是凸的,因此可以用数值算法比如梯度下降求解,这个关键性质正是拉格朗日对偶在求解带约束非线性规划问题的优势
2.2.3 强对偶性
拉格朗日对偶的强对偶性
2.2.4 与LP对偶关系
LP对偶是拉格朗日对偶的一种特例
3.KKT条件
3.1 KKT介绍
KKT条件根据三位学者命名,全称Karush-Kuhn-Tucker conditions,用于判断带约束的非线性规划的某个解是否是最优解候选,注意此处适用于满足正则条件(regular NLP),KKT条件的证明可自寻其它资料,KKT条件使用到了2.1节拉格朗日函数的概念
KKT条件对于NLP只是必要条件,但是对CP是必要且充分条件
对于一般的非线性规划问题,最优解一定满足KKT,但是满足KKT的不一定是最优解。如果这个非线性规划问题属于凸规划,那么满足KKT条件的解就是全局最优解。
3.2 KKT举例
在KKT条件下能帮助为带约束的非线性规划问题找到一些候选解,比较这些解再寻找全局最优。