最优化的背景
古希腊的欧几里得时期就存在最优化的思想,当时提出了一个很著名的问题:在周长相同的一切矩形中,以正方形的面积为最大。接下来几个世纪,微积分的建立使得最优化理论可以用来解决无约束的极值问题,随后为了解决有约束条件的最优化问题,发展了变分法。上世纪40年代,由于军事上的需要产生了运筹学,并使优化技术首先应用于解决战争中的实际问题。第二次世界大战期间,一个新的数学分支数学规划方法发展起来,线性规划与非线性规划是其主要内容。
最优化问题按形式来划分主要分为:
- 无约束优化问题:最优化的目标函数为求\(f(x)\)的最值,其中\(f(x)\)在定义域\(S\)内连续。
- 约束优化问题:最优化的目标函数为求\(f(x)\)的最值,其中\(f(x)\)的定义域\(S\)满足一系列的约束条件。
- 组合优化问题:经典的组合优化问题有:旅行商问题(TSP)、加工调度问题、背包问题、装箱问题、图着色问题、聚类问题等。
- 智能优化问题:利用智能算法如遗传算法、禁忌搜索算法、模拟退火算法和蚁群优化算法、粒子群优化算法等来求解的问题。
如果按照问题所属的范畴来划分主要分为:线性规划、凸规划、非凸规划(略)等。
线性规划
线性规划的标准形式如下:
线性规划的一般形式如下:
解决方法:一般形式化成标准形:通过引入新变量将不等式约束变为等式约束,对于变量小于零的情况通过乘以-1变成大于0。
例如:
解决方法:引入3个变量\(x_3\geq0, x_4\geq0, x_5\geq0\),可以将原规划问题化成如下标准形式:
若某个约束变量\(x_i\leq0\),不妨用\(x_i=-y\)来替换\(x_i\)带入到原问题中,此时约束条件中\(y\geq0\)
线性规划的性质:线性规划问题若存在最优解,则最优解必在可行域边界的某个极点上。
线性规划问题的求解方法:单纯形法,单纯形法的时间复杂度:\(O(n^{1.5})\sim O(n^{2})\)。常用来求解线性规划的工具有很多,比如Lingo、Malab、Glpk等,其中Matlab求解线性规划问题的函数为linprog,调用格式如下:
x= linprog(f,A,b,Aeq,beq)
x=linprog(f,A,b,Aeq,beq,lb,ub)
x=linprog(f,A,b,Aeq,beq,lb,ub,x0)
x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)
[x,fval]=linprog(...)
[x,fval,exitflag]=linprog(...)
[x,fval,exitflag,output]=linprog(...)
[x,fval,exitflag,output,lambda]=linprog(...)
凸规划
凸集的定义:设集合\(D\in R^n\),若对于任意两点\(x,y\in D\),以及实数\(\alpha(0\leq\alpha\leq1)\),都有:
则称集合\(D\)为凸集
常见的凸集:
- \(\big\{x\big|Ax\leq b\big\}\), \(A\) 是矩阵, \(b\)是列向量;
- 椭球:\(\big\{x|(x-x_c)^TP^{-1}(x-x_c)\leq1\big\}\),这里\(P\)是正定矩阵,\(x_c\)为椭球心坐标。椭球也可以用\(\big\{x_c+Au\big|\parallel u\parallel_2\leq1\big\}\)表示,其中\(A\)可逆;
- 半正定锥:\(A\)半正定,则\(x^TAx\)是凸集;
- 有限个凸集的非负加权求和:\(\sum_{i=1}^n\omega_iA_i\),其中\(\omega_i\geq0\),\(A_i\)为凸集;
- 仿射变换:形如\(f(x)=Ax+b\)的变换称为仿射变换。仿射变换具有保凸性,也即只要\(f(x)\)是仿射变换,\(g(x)\)是凸集,那么\(g(f(x))\)和\(f(g(x))\)都是凸集;
- 任意多个凸集的交集仍是凸集(任意多个凸集的并集不一定是凸集)。
凸函数定义:设\(f(x)\)为定义在凸集合\(D\)上的函数,对于\(D\)上任意两点\(x_1,x_2\in D\)和任意实数\(\lambda\in(0,1)\),总有:
梯度的定义:若\(n\)元函数\(f(x)\)对自变量\(x=(x_1,x_2,\cdots,x_n)^T\)的各分量\(x_i\)的偏导数\(\frac{\partial f(x)}{\partial x_i}\)都存在,则称\(f(x)\)在\(x\)处一阶可导,并称向量\(\nabla f(x)=\Big(\frac{\partial f(x)}{\partial x_1},\frac{\partial f(x)}{\partial x_2},\cdots,\frac{\partial f(x)}{\partial x_n}\Big)\)为函数\(f(x)\)的梯度或者一阶导数。
Hesse矩阵:若\(n\)元函数\(f(x)\)具有二阶偏导数,也即\(\frac{\partial^2 f(x)}{\partial x_i\partial x_j}\)都存在,则称矩阵
为\(f(x)\)在\(x\)处的Hesse矩阵
一阶泰勒展式:设\(f(x)\)在点\(\overline{x}\)处具有一阶连续偏导数,则\(f(x)\)在\(\overline{x}\)处的泰勒展式为
其中\(o(\parallel x-\overline{x}\parallel)\)为\(\parallel x-\overline{x}\parallel\)的高阶无穷小。
二阶泰勒展式:设\(f(x)\)在点\(\overline{x}\)处具有二阶连续偏导数,则\(f(x)\)在\(\overline{x}\)处的二阶泰勒展式为
其中\(o(\parallel x-\overline{x}\parallel)\)为\(\parallel x-\overline{x}\parallel\)的高阶无穷小。
利用前面的一阶泰勒展式和二阶泰勒展式,可以得到判定一个函数是否为凸函数的方法
判定方法1(定义):验证:\(f(y)\geq f(x)+\nabla f(x)^T(y-x)\)
判定方法2:验证:\(f^{''}(x)\geq0\)}
多元凸函数判断方法:验证Hesse矩阵半正定。
常见的凸函数:
- 指数函数.
- 幂函数,当\(a\geq1\)或者\(a\leq0\)时,\(x^a\)在凸集\(D\)是凸函数,当\(0\leq a\leq1\)时,\(x^a\)在凸集\(D\)是凹函数
- 绝对值幂函数,当\(p\geq1\)时,函数\(|x|^p\)在\(R\)上是凸函数
- 有限个凸函数的非负加权求和:\(\sum_{i=1}^n\omega_if_i(x)\),其中\(\omega_i\geq0\),\(f_i(x)\)为凸函数
- 仿射变换:仿射变换(\(f(x)=Ax+b\))具有保凸性,也即只要\(f(x)\)是仿射变换,\(g(x)\)是凸函数,那么\(g(f(x))\)和\(f(g(x))\)都是凸函数
- 负对数函数(\(-\log{x}\))在凸集\(D\)上是凸函数
- 负熵,函数\(x\log{x}\)在凸集\(D\)上是凸函数
- 范数,\(R^n\)上任意范数都是凸函数
- 最大值函数和上确界函数
- 指数和的对数,函数\(f(x)=\log(e^{x_1}+\dots+e^{x_n})\)在\(R^n\)上是凸函数
- 几何平均函数,函数\(f(x)=(\prod_{i=1}^nx_i)^{1/n}\)
- 对称矩阵的最大特征值,函数\(f(X)=\lambda_{\rm max}(X)\),因为:\(\lambda_{\rm max}(X)=\sup\Big\{y^TXy\Big|\parallel y\parallel_2=1\Big\}\)
保凸运算:
- 有限个凸函数的非负加权求和运算:\(\sum_{i=1}^n\omega_if_i(x)\),其中\(\omega_i\geq0\),\(f_i(x)\)为凸函数
- 如果固定\(y\in A\),函数\(f(x,y)\)关于\(x\)是凸函数,且满足\(\omega(y)\geq0\),则函数\(g(x)=\int_A\omega(y)f(x,y)\)是凸函数
- 符合仿射变换:\(f(x)\)是仿射变换(\(f(x)=Ax+b\)),\(g(x)\)是凸函数,那么\(g(f(x))\)和\(f(g(x))\)都是凸函数
- 复合函数:\(f(x)=h(g(x))\),
如果 \(h\) 是凸函数且非减, \(g\) 是凸函数,则 \(f\) 是凸函数;
如果 \(h\) 是凸函数且非增, \(g\) 是凹函数,则 \(f\) 是凸函数;
如果 \(h\) 是凹函数且非减, \(g\) 是凹函数,则 \(f\) 是凹函数;
如果 \(h\) 是凹函数且非增, \(g\) 是凸函数,则 \(f\) 是凹函数。 - Schur 补函数:设二次函数\(f(x,y)=x^TAx+2x^TBy+y^TCy\),其中\(A\)和\(C\)为对称矩阵,则\(f(x,y)\)关于\((x,y)\)为凸函数
凸规划的标准形式:设\(f(x)\)及\(g_i(x),i=1,\dots,m\)均为\(R^n\)上的凸函数,满足以下条件的规划问题称为凸规划:
或者\(f(x)\)为凹函数,\(g_i(x),i=1,\dots,m\)为\(R^n\)上的凸函数:
一个规划问题如果不能等价于以上两种形式的规划问题,那么这个规划问题是非凸规划问题。
求解凸规划问题的理论方法:
- 无约束凸规划问题:最速梯度下降、牛顿法、随机梯度法、批量梯度法、共轭梯度法。
- 等式约束凸规划问题:利用拉格朗日乘子,将有约束优化问题转化为无约束优化问题来求解。
- 不等式约束凸规划问题(需要验证KKT条件):如果直接求解比较困难,可考虑转化为拉格朗日对偶问题或者转化为等价更易求解的优化问题,之后再用无约束优化方法求解。
有关拉格朗日乘子法和KKT条件,推荐阅读\(\color{red}{\rm PPT}\)。
求解标准凸规划问题常用到的软件工具:Matlab求解凸优化的cvx工具箱,Python的cvxpy、cvxopt包。
凸规划问题的特点:
- 局部最优解=全局最优解
- 是目前科技比较确定的可以求解的非线性规划方式
- 许多非凸问题通过一定的手段,要么等价地化归为凸问题,要么用凸问题去近似、逼近。典型的如几何规划、整数规划,它们本身是非凸的,但是可以借助凸优化手段去解,这就极大地扩张了凸优化的应用范围
推荐书籍:
1、Boyd S, Vandenberghe L. Convex Optimization[M]. 世界图书出版公司, 2013.
2、Claus H. Convex Analysis and Nonlinear Optimization[M]. Springer New York, 2006.
3、David G. Luenberger, Yinyu Ye. Linear and Nonlinear Programming: [M]. Springer New York, 2008.