标签:旅行 strong nal 算法 spring 经典的 旅行商 来替 ring
古希腊的欧几里得时期就存在最优化的思想,当时提出了一个很著名的问题:在周长相同的一切矩形中,以正方形的面积为最大。接下来几个世纪,微积分的建立使得最优化理论可以用来解决无约束的极值问题,随后为了解决有约束条件的最优化问题,发展了变分法。上世纪40年代,由于军事上的需要产生了运筹学,并使优化技术首先应用于解决战争中的实际问题。第二次世界大战期间,一个新的数学分支数学规划方法发展起来,线性规划与非线性规划是其主要内容。
最优化问题按形式来划分主要分为:
如果按照问题所属的范畴来划分主要分为:线性规划、凸规划、非凸规划(略)等。
线性规划的标准形式如下:
\[ \begin{split} &{\rm minimize}~c_1x_1+c_2x_2+...+c_nx_n\&s.t.\begin{cases} &a_{11}x_1+a_{12}x_2+...+a_{1n}x_n=b_1\&\cdots\&a_{m1}x_1+a_{m2}x_2+...+a_{mn}x_n=b_m\&x_1\geq0,x_2\geq0,...,x_n\geq0 \end{cases} \end{split} \]
线性规划的一般形式如下:
\[ \begin{split} &{\rm minimize}~c_1x_1+c_2x_2+...+c_nx_n\&s.t.\begin{cases} &a_{11}x_1+a_{12}x_2+...+a_{1n}x_n\leq b_1\&\cdots\&a_{m1}x_1+a_{m2}x_2+...+a_{mn}x_n\leq b_m\&x_1\geq0,x_2\geq0,...,x_n\geq0(or~x_1\leq0,x_2\leq0,...,x_n\leq0) \end{cases} \end{split} \]
解决方法:一般形式化成标准形:通过引入新变量将不等式约束变为等式约束,对于变量小于零的情况通过乘以-1变成大于0。
例如:
\[ \begin{split} &{\rm minimize}~7x_1+12x_2\&s.t.\begin{cases} &9x_1+4x_2\leq360\&4x_1+5x_2\leq200\&3x_1+10x_2\leq300\&x_1\geq0,x_2\geq0 \end{cases} \end{split} \]
解决方法:引入3个变量\(x_3\geq0, x_4\geq0, x_5\geq0\),可以将原规划问题化成如下标准形式:
\[\label{eq:array} \begin{split} &{\rm minimize}~7x_1+12x_2\&\mbox{(原)}\left\{\begin{array}{ll} &9x_1+4x_2\leq360\&4x_1+5x_2\leq200\&3x_1+10x_2\leq300\&x_1\geq0,x_2\geq0 \end{array} \right. \end{split} \Leftrightarrow \begin{split} &{\rm minimize}~7x_1+12x_2\&\mbox{(新)}\left\{\begin{array}{ll} &9x_1+4x_2+x_3=360\&4x_1+5x_2+x_4=200\&3x_1+10x_2+x_5=300\&x_1\geq0,x_2\geq0,x_3\geq0,\&x_4\geq0,x_5\geq0 \end{array} \right. \end{split} \]
若某个约束变量\(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)\),都有:
\[ \alpha x+(1-\alpha)y\in D \]
则称集合\(D\)为凸集
常见的凸集:
凸函数定义:设\(f(x)\)为定义在凸集合\(D\)上的函数,对于\(D\)上任意两点\(x_1,x_2\in D\)和任意实数\(\lambda\in(0,1)\),总有:
\[ f(\lambda x_1+(1-\lambda)x_2)\leq \lambda f(x_1)+(1-\lambda)f(x_2) \]
梯度的定义:若\(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}\)都存在,则称矩阵
\[ \nabla^2 f(x)= \begin{pmatrix} \frac{\partial^2 f(x)}{\partial x_1\partial x_1} & \frac{\partial^2 f(x)}{\partial x_1\partial x_2} & \cdots & \frac{\partial^2 f(x)}{\partial x_1\partial x_n}\\frac{\partial^2 f(x)}{\partial x_2\partial x_1} & \frac{\partial^2 f(x)}{\partial x_2\partial x_2} & \cdots & \frac{\partial^2 f(x)}{\partial x_2\partial x_n}\\vdots & \vdots & & \vdots\\frac{\partial^2 f(x)}{\partial x_n\partial x_1} & \frac{\partial^2 f(x)}{\partial x_n\partial x_2} & \cdots & \frac{\partial^2 f(x)}{\partial x_n\partial x_n}\\end{pmatrix} \]
为\(f(x)\)在\(x\)处的Hesse矩阵
一阶泰勒展式:设\(f(x)\)在点\(\overline{x}\)处具有一阶连续偏导数,则\(f(x)\)在\(\overline{x}\)处的泰勒展式为
\[f(x)=f(\overline{x})+\nabla f(\overline{x})^T(x-\overline{x})+o(\parallel x-\overline{x}\parallel)\]
其中\(o(\parallel x-\overline{x}\parallel)\)为\(\parallel x-\overline{x}\parallel\)的高阶无穷小。
二阶泰勒展式:设\(f(x)\)在点\(\overline{x}\)处具有二阶连续偏导数,则\(f(x)\)在\(\overline{x}\)处的二阶泰勒展式为
\[f(x)=f(\overline{x})+\nabla f(\overline{x})^T(x-\overline{x})+\frac{1}{2}(x-\overline{x})^T\nabla^2f(\overline{x})(x-\overline{x})+o(\parallel x-\overline{x}\parallel)^2\]
其中\(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矩阵半正定。
常见的凸函数:
保凸运算:
凸规划的标准形式:设\(f(x)\)及\(g_i(x),i=1,\dots,m\)均为\(R^n\)上的凸函数,满足以下条件的规划问题称为凸规划:
\[ \begin{split} &\min{f(x)}\&s.t.\begin{cases} &g_i(x)\leq0,i=1,\dots,m\&a^T_jx=b_j,j=1,\dots,p \end{cases} \end{split} \]
或者\(f(x)\)为凹函数,\(g_i(x),i=1,\dots,m\)为\(R^n\)上的凸函数:
\[ \begin{split} &\max{f(x)}\&s.t.\begin{cases} &g_i(x)\leq0,i=1,\dots,m\&a^T_jx=b_j,j=1,\dots,p \end{cases} \end{split} \]
一个规划问题如果不能等价于以上两种形式的规划问题,那么这个规划问题是非凸规划问题。
求解凸规划问题的理论方法:
求解标准凸规划问题常用到的软件工具: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.
标签:旅行 strong nal 算法 spring 经典的 旅行商 来替 ring
原文地址:https://www.cnblogs.com/hdawen/p/9672287.html