组合优化 学习笔记

第一部分:定义优化问题:考虑一个点\(A(x_1,x_2...x_n)\),它在\(n\)维空间内。
有若干个限制\(g_i(A)\leq b_i\)
我们需要最小化\(f(A)\)\(f\)是一个函数。
\(f(A)=a^Tx+b\)\(a\)是常数),就把\(f\)称为关于\(A\)的仿射(affine)函数(例子:\(2x_1+x_2+x_3+4\)),当\(b=0\)就把\(f\)称为线性(linear)函数0
\(g_i(A)\)全部都是仿射函数,那么就把这个系统称作线性规划(linear program)。
线性规划可以最大化\(f(A)\),把\(x_i\)取反即可。
这个系统也可以包含大于号和等于号。
例子:\(x_1-x_3\leq 3\)
\(x_2+x_4\geq 2\)
\(x_1+x_4=4\)
\(x_1...x_4\geq 0\)
\(\min x_1-2x_2+x_4\)
优化问题有可能有多阶段:
考虑如下问题:某公司在接下来\(n\)个月内每个月需要提供\(a_i\)升油。
公司有一个油箱,最多能储存\(x\)升油,公司第一个月有\(y\)升油
每个月的油价为\(b_i\),求最小代价。
假设第\(i\)个月剩余油量为\(t_i\),每个月买了\(c_i\)升油
有关系式\(t_{i+1}=t_i-a_i+c_i,t_n+c_n\geq a_n\)\(t_1=y\)
注意不是\(t_{i+1}=t_i-a_{i+1}+c_{i+1},t_n+c_n\geq a_n\),因为此时\(a_1\)没有被考虑到。
根据题意能够列出关系式\(0\leq t_i\leq x,c_i\geq 0\)
最小化\(\sum_{i=1}^n c_i*b_i\)
如果我们要最小化\(c_i*b_i\),那么由于\(\max(c_i*b_i)\)是非线性的,不能使用原方法。
可以引入辅助变量\(M\),加入\(n\)条限制\(M\geq c_i*b_i\),最小化\(M\)
\(M\)在最优解中一定等于\(\max(c_i*b_i)\),因为如果\(M>\max(c_i*b_i)\),我们一定可以减小\(M\)
同理假设我们要最小化\(|a-b|\),那么可以拆成\(\max(a-b,b-a)\),然后使用上面的方法即可。

第二部分:整数规划
当点必须是整点,那么这个问题就整数规划问题。
普通线性规划问题有快速算法,但是整数规划问题是NP的。
定义混合整数规划:在混合整数规划中,变量既可以是实数,也可以是整数。
整数规划的第一个例子是01背包问题:
假设每个物品的重量是\(c_i\),价值是\(w_i\),总重量限制是\(a\)
我们显然可以列出限制\(0\leq x_i\leq 1,\sum_{i=1}^n c_i*x_i \leq a\)
最大化\(\sum_{i=1}^n x_i*w_i\)
有4种整数规划建模的常用方法:
第一种:权值拆点
使用拆点法,假如某个变量\(x\)的取值范围为\(1\sim k\),那么可以拆出限制\(f_{x,k}\)表示\(x\)的权值是否为\(k\)
比如数独问题中,假设一些格子的权值已经被给定,求这个系统是否合法。
可以对于每个格子\((i,j)\)拆出\(9\)个点\(f_{i,j,k}\)\(f_{i,j,k}=1\)表示第\(i\)个格子取\(k\)
显然\(\sum_{k}f_{i,j,k}=1\)
并且假设格子\((a,b)\)的权值必须要为\(c\),那么\(f_{a,b,c}=1\)
我们要考虑每行,每列,每个方格内每种数必须能且只能出现\(1\)次的限制。
所以对于第\(i\)行,对于所有权值\(k\)\(\sum_{j}f_{i,j,k}=1\)
对于每列,每个方格同理。
第二种:用0/1变量
假如有规定:对于限制\(\alpha_ix\geq \beta_i\)至少要满足\(k\)
用变量\(c_i\)表示第\(i\)个限制是否被满足。那么\(\sum c_i\geq k\)
对于每个限制,加入新的限制\(\alpha_ix\geq \beta_ic_i\)
容易发现这也是整数规划。
这样当\(c_i=0\)这条限制就相当于没有,\(c_i=1\)就相当于\(\alpha_ix\geq \beta_i\)
特别的,如果我们要表示\(x,y\)最多只能选\(1\)个,那么我们可以加入限制\(x+y\leq 1\)
第三种:使用和为\(1\)
例子:在背包问题中,假如我们选择的物品的重量限制为若干个整数(比如只能为20,200,2000),可以用\(01\)变量。
考虑\(g_1,g_2,g_3\)表示当前物品的重量为\(20,200,2000\),显然\(g_1+g_2+g_3=1,0\leq g_i\leq 1\)
并且加入限制\(\sum_{i=1}^n x_i*w_i=g_1*20+g_2*200+g_3*2000\)即可。
第四种:拆物品
假设我们第一个物品的价值是\(10\),但是当选的物品\(\geq 6\)个时价值是\(5\)
可以拆出一个新的物品,价值是\(5\),第一个物品限选\(5\)个。
新的物品不一定需要在第一个物品选了\(5\)个时被选择,但是由于第一个物品的价值更高,肯定先选第一个物品。

第三部分:最短路与整数规划。
引入割的概念(这个概念在OI中通常会在网络流中遇到)
定义\(F(S):\{(u,v):uv\in E, u\in S, v\notin S\}\)为集合\(S\)的割集。
上文中所提到的\(S\)必须包含源点,且不包含汇点。
有定理:如果\(S\)\(E\)的子集,并且每一个割集都至少包含\(S\)的一条边,那么\(S\)会包含\(s\)\(t\)的一条路径。
使用反证法证明,假设通过\(S\)无法到达\(t\),设\(A\)为通过这些边所能到达的集合。
考虑某点\(t\)\(t\)不属于\(A\)而且与\(A\)的某个点\(x\)相邻。
设某割集只包含\(A\),那么根据割和连通性的定义,其不包含\(S\)的任何一条边,矛盾。
事实上每条路径都与所有割相交。
因为假设存在一个割与路径不相交,考虑这条路径\(s\to a_1\to a_2\to ...\to a_n\to t\)
根据割的定义\(s,a_1...t\)在同一个集合内,然而割的定义是\(s,t\)在不同集合,矛盾。
于是可以考虑建模:设\(S_i\)是这张图的某个割,\(G\)为这些割构成的集合
将每条边\((u_i,v_i,w_i)\)作为一个变量\(x_i\)
那么\(\sum_{j \in S_i}x_j\geq 1,i\in G\)
同时有限制\(x_i\geq 0\)
要最小化\(\sum_{i\in E} w_i*x_i\)
注意当\(x_i>1\),可以把\(x_i\)变为\(1\),此时\(w_i*x_i\)更小而且还满足要求。所以此模型自动满足\(x_i\geq 1\)

第四部分:线性规划无解性的判断
为了判断线性规划(非标准型)的无解性,我们首先需要把带不等号的线性规划转换成标准等式型(Standard Equality Forms)。
可以使用如下2种方法:
1.考虑限制\(a_1x_1+....+a_nx_n\geq b\),加入松弛变量\(g\)变成\(a_1x_1+....+a_nx_n-g=b\)
\(g\geq 0\)是显然成立的。
2.如果线性规划对于某变量\(x\)没有大于等于\(0\)的限制,可以新增两个变量\(y,z\),让\(x=y-z\)
\(y,z\geq 0\)
转化后的线性规划是等价(equivalent)的,这说明如果某个线性规划无解,那么另一个线性规划也无解。
而且如果每个变量在所有等式中恰好总共出现\(2\)次,那么可以使用费用流求解。
通过某个线性规划的解可以构建另一个线性规划的解。
设转化后的线性规划是\(Ax=b,x\geq \mathbb{0},\max cx\),无解分为以下两种情况:
1.\(Ax=b,x\geq \mathbb{0}\)不可能成立(infeasible)
判断它的充要条件是:存在一个向量\(d\)使得\(d^TA\geq \mathbb{0}\)但是\(d^Tb<\mathbb{0}\)
原因是\(d^TA\)是对\(A\)的每行的等式进行若干次加减法操作所得到的一个新的和\(x_1...x_n\)相关的等式。
假设它是\(a_1x_1+....+a_nx_n\)\(d^TA\geq \mathbb{0}\)就是\(a_1...a_n>0\)
由于\(a_1...a_n\geq 0\)\(x_1...x_n\geq 0\),所以\(a_1x_1+....+a_nx_n>0\)必须成立
但是在此情况下\(a_1x_1+....+a_nx_n\leq 0\),矛盾。所以不可能有解。
2.\(Ax=b,x\geq \mathbb{0},\max cx\)不存在最优解(Unbounded)
注意:在应用这个定理时,我们要先证明线性规划有解。
判断它的充要条件是:存在向量\(d\)使得\(d^TA=0\)\(d^Tc>\mathbb{0}\)
并且\(Ax=b,x\geq \mathbb{0}\)需要存在解\(\overline{x}\)
原因:考虑反证法,假设最优解是\(\overline{x}\)
\(d^TA=0\)的意义是:\(\overline{x}+kd\)\(k\)是任意正常数)一定满足\(A(\overline{x}+d)=b\)
而且由于\(d^Tc>0\)\((\overline{x}+kd)^Tc>\overline{x}\),与最优解是\(\overline{x}\)矛盾。
上面我们只证明了这两个定理的充分性,关于必要性的证明需要用到一些对偶的知识

第五部分:寻找线性规划的任意解
我们可以找到\(A\)的一组基(Basis)。
基是\(U=\{1...m\}\)的一个大小为\(n\)的子集,该集合在矩阵中的列线性无关。
定义\(A_e\):只考虑\(a\)\(e\)对应的列的矩阵,\(b_e\):只考虑\(b\)\(e\)对应的列的矩阵
例子:考虑线性规划
\(x_1+2x_2-x_3+x_4-x_5=2\)
\(0x_1+1x_2+0x_3+x_4-x_5=1\)
\(0x_1+0x_2+x_3+x_4-x_5=1\)
\(e=\{1,2,3\}\)就是一组基,因为\([1,0,0],[2,1,0],[1,0,1]\)线性无关
定义线性规划在某组基\(e\)下的标准形式\(\overline{A}x=\overline{b},x\geq \mathbb{0},\max \overline{c}\)
1.\(\overline{A}_e=I\)
2.对于所有\(j\in e\),定义转化后的\(c\)\(\overline{c},\overline{c}_j=0\)
转化后的线性规划最优解和原线性规划相等,并且一样有解。
如果我们令基外的\(x\)元素都为\(0\),那么\(\overline{A}_ex=b\)
因为\(\overline{A}_e=I\),我们容易得到一组解
称其为基础解。
考虑如何转化成标准形式:
第一步考虑方程\(Ax=b\),将\(A\)转化为\(\overline{A}\)使得\(\overline{A}_e=I\),这可以通过将方程两边乘以\((A_e)^{-1}\)得到
这也说明由于\((A_e)^{-1}\)唯一,且基所对应的列线性无关,所以方程\(\overline{A}_ex=I\)的解唯一,一组基对应的基础解也是唯一的。
第二部我们可以找到一个向量\(y\)\(y\)是常数),
根据1显然有\(y^TAx=y^Tb\)\(cx=(c-y^TA)x+y^Tb\)
\((c-y^TA)_e=\mathbb{0}\)\((y^TA)_e=c_e\)
解得\(y=c_e(A_e)^{-1}\)
\(y^Tb\)作为新的目标函数的常数,\((c-y^TA)x\)作为新的目标函数要最大化的对象即可。

第六部分 单纯形算法
单纯形算法可以在指数级时间内求解线性规划\(Ax=b,x\geq \mathbb{0},\max cx+d\)
虽然最坏情况下是指数级时间,但是大部分情况下跑不满,在现实生活中够用。
线性规划的求解事实上存在多项式时间算法,在后面会提到
首先找到一组基和一组基础的解\(y\)
然后把线性规划转化成\(y\)下的标准形式
现在我们考虑在基中新增一个元素\(a\)(需要枚举),并且\(a\)不属于基内。
保持基外除了\(y_a\)以外的元素都等于\(0\)
比如我们有解\((2,3,0,0,0)\),新增\(a=3\),那么\(y_4=y_5=0\)
假设\(y_a=t\geq 0\)。那么有\(A_ex+g=y,g_i=tA_{a,i}\)
新的方程\(A_ex=y-g\)
这就是把原线性规划转化为标准型的好处:
由于\(A_e=I\),我们容易得到一组解\(x\)
由于\(c_e=0\),而且基外除了\(x_a\)以外的元素都等于\(0\),所以\(cx=t\),我们可以快速求得目标函数值
\(f>0\),我们可以通过增大\(t\)的方式寻找最优解
新的解\(x_i=y_i-tA_{a,i}\geq 0\)告诉了我们\(t\)的范围,设\(0\geq t\geq s\)
假如这些限制并没有规定\(s\)的上界(比如我们有限制\(5+2t\geq 0,3+4t\geq 0\)),那么单纯形算法会报告线性规划没有最优解并且推出。
否则我们可以让\(t\)取到上界。
此时某个\(x_i\)会变成\(0\),在基内可以删除某个\(i\)
例子:考虑线性规划\(x_1+x_2+2x_3+0x_4=2\)
\(0x_1+x_2+x_3+x_4=5\)
\(\max 0x_1+x_2+3x_3+0x_4\)的一组基\(\{1,4\}\)和基础的解\((2,0,0,5)\)
考虑加入\(2\),令\(x_2=t\)
那么有\(x_1=2-t,x_4=5-t\)。那么有\(t\leq 2\)
由于基外的元素(除了\(2\))的\(x\)值都为\(0\)\(c_1=c_4=0\)\(\{1,4\}\)在基内)
\(cx=t\),我们要最大化\(t\)。显然\(t=2\)最优。
此时\(x_1=0\),在基中删除\(1\)增加\(2\)
得到新的基础解\((0,2,0,3)\)
对新的基求解线性规划的标准形式,并且重复以上过程,直到某次循环后\(c_N\leq 0\),或者算法报告线性规划没有最优解。
将得到的基础解乘以\(c\)数组再加上常数即可得到最优解。
假设线性规划运行过程中,我们每次得到的基础可行解的权值都是严格递增的。
由于相同基对应的基础可行解的权值是相同的,所以我们不会访问相同的基。
但是我们每次\(t\)的增量可能为\(0\),所以如果不对线性规划的运行过程加以一定的限制,我们可能会访问相同的基。
但是在实现时遵循以下2个规则就不会死循环了:
1.如果对于多个元素加入当前的基都能比现在的解更优,则加入最小的那个。
2.如果对于多个元素可以从当前基删除(即该元素的\(x\)值等于\(0\)),那么删除最小的那个
对于该规则的证明超出了文章的范围
在实现时,需要不断移除线性相关的限制,使得所有限制线性无关。
通过单纯形算法,我们可以得知线性规划基本定理:一个线性规划或者无界,或者无解,或者存在最优解。

第7部分:2阶段单纯形算法
前面的算法首先要求出线性规划的某个基础可行解才能运行。
所以我们需要首先求出线性规划的
所以线性规划有如下性质:
1.如果线性规划有解,那么一定有基础可行解。
2.如果线性规划有最优解,那么一定有是基础可行解的最优解。

第8部分:线性规划和单纯形算法的几何意义
考虑线性规划的标准不等式形式\(\overline{A}x\leq \overline{b},x\geq \mathbb{0},\max \overline{c}x\)
某个限制给出了一个向量\(a\)和一个常数\(b\),要求\(ax\leq b\)
解所存在的区域是若干个半超空间的交。
定义超空间的线段/直线:假设有两个点\(C,D\),一个实数\(x\)
定义点之间的加法,数乘和向量的加法,数乘相同。都是坐标之间相加/坐标乘以一个数。
\(CD\)直线上的所有点\(E\)满足存在\(x\)使得\(E=Cx+D(1-x)\)
\(CD\)所构成线段上的所有点\(E\)满足存在\(x\)使得\(E=Cx+D(1-x)\),并且\(0\leq x\leq 1\)
定义凸集:一个集合\(S\)使得\(S\)中任意两个点\(A,B\)的线段上的所有点都被\(S\)包含。
定义凸集的极值点:对于凸集的某点\(x\),不存在凸集内两个不同的点\(AB\)使得\(x\)\(AB\)
凸集的性质:
1.若干个半超空间的交是凸集。
证明:考虑某个限制\(Ax\leq B\),点\(x=c,d\)满足该限制。
那么考虑\(e=cy+d(1-y),0\leq y\leq 1\)
\(Ac\leq B,Ad\leq B\)
由于\(0\leq y\leq 1,Acy\leq By,Ad(1-y)\leq B(1-y)\)
那么有\(A(cy+d(1-y))\leq B\),所以\(cy+d(1-y)\)也满足该限制。证毕。
2.极值点一定是某线性规划的最优解。
证明:反证法
如果凸集的某点\(e\)存在凸集内两个不同的点\(c,d\)使得\(x\)\(cd\)
\(e=cy+d(1-y),0\leq y\leq 1\)
设目标函数为\(f(x)=gx\)\(f(e)=gcy+gd(1-y)\)
\(f(c)=gc,f(d)=gd\)
如果\(gc\geq gd\)\(gc\leq gd\)),那么有\(gcy+gd(1-y)\leq gcy+gc(1-y)=gc\),所以此时取\(c\)或者\(d\)一定不会更劣。
3.定义
4.对于某在SEF的线性规划,其所有基础可行解就是该线性规划的极值点。
事实上在单纯形算法中,在某组基下求得就是若干个平面的交点
也就是说单纯形就是在这个凸集的顶点上进行的爬山算法。
如果线性规划只有\(2\)个变量要最优化,那么凸集在平面上就是凸包,可以使用二分求解线性规划的最大/小值。

第9部分 最短路算法
考虑前面提到的最短路的整数规划。
定义线性规划的整数松弛:去掉权值必须是整数的条件。
去掉后的最优解可能会更小(或者相等)。
将该线性规划进行对偶可以得到:\(\sum_{i \in S_j}y_j\leq w_i, i\in E\)
\(\y_i\geq 0,i\in G\)
\(\max \sum_{i\in G}y_i\)
设变量\(h_i=w_i-\sum_{i \in S_j}y_j\),如果解是合法的,那么\(h_i\geq 0\)
初始\(y\)数组为\(0\)\(h_i=w_i\)
Dijkstra算法的过程如下:维护一个集合\(P\),初始\(P\)只包含源点。当\(P\)包含汇点时过程结束。
定义\(F(S):\{(u,v):uv\in E, u\in S, v\notin S\}\)为集合\(S\)的割集。
每次考虑\(F(P)\),不断增大\(y_P\)使得解仍然合法。
考虑\(F(P)\)中的某条边\(i\),如果\(y_P\)增加了\(q\),那么\(h_i\)也会减少\(q\)
所以\(y_P\)的最大增加量为\(\min(h_i),i\in F(P)\),让\(y_P\)等于这个值\(v\),并且让所有\(i\in F(P)\)\(h\)值都减少\(v\),让答案增加\(v\)
容易发现在这个过程中\(h_i\geq 0\)是恒成立的。
如果某个\(h_i=0\),由于割的性质,边\(i\)恰好有一个节点\(x\)包含在\(P\)
设另一个节点为\(y\),我们把\(y\)加入集合\(P\)中。
每次过程至少会有一个\(h_i\)变为\(0\)并且被加入\(P\),所以这个过程不会死循环。
这样子我们得到了最短路的下界。
考虑证明我们得到了最短路。

第10部分:弱对偶原理
弱对偶原理可以帮助解决包含小于号,等于号,大于号的线性规划。
假设有两个线性规划\(Ax+s=b,\max c^Tx\),并且线性规划有解。
\(x_i\)小于或者大于\(0\)或者没有限制。
\(A^Ty+w=c\)\(\min b^Ty\)
\(y_i\)小于或者大于\(0\)或者没有限制。
\(S1\)为满足\(s_g\leq 0\)\(g\)构成的集合,\(S2\)为满足\(s_g\geq 0\)\(g\)所构成的集合,\(S3\)为满足\(s_g=0\)\(g\)构成的集合。
\(C1\)为满足\(x_g\leq 0\)\(g\)构成的集合,\(C2\)为满足\(x_g\geq 0\)\(g\)所构成的集合,\(C3\)为满足\(x_g\)没有限制的\(g\)构成的集合。
\(\overline x,\overline y\)是第一个,第二个线性规划的特解。
那么\(c^T\overline x=\overline x^Tc\)
\(=\overline x^T(A^T\overline y+w)=(\overline x^T)A^T\overline y+(\overline x)^Tw\)
\(=A\overline xy^T+w\overline x^T=(b-s)\overline y^T+w\overline x^T=b(\overline y)^T-s(\overline y)^T+w(\overline x)^T\)
\(=b^T\overline y-s^T\overline y+w^T\overline x\)
假设\(s^Ty\geq 0,w^Tx\leq 0\),那么\(c^T\overline x\leq b^T\overline y\)
所以对于\(g\in S_1,y_g\leq 0\),对于\(g\in S_2,y_g\geq 0\),对于\(g\in S_1,y_g\)没有限制
这就是线性规划的互补松弛定理。
对于\(g\in C_1,w_g\geq 0\),对于\(g\in C_2,w_g\leq 0\),对于\(g\in C_3,w_g=0\)
并且有第一个线性规划的任意解的目标函数小于第二个线性规划的任意解的目标函数。
一个线性规划的对偶的对偶还是原线性规划。

第11部分:强对偶原理
事实上原线性规划的最优解(假设这两个线性规划都存在解)和对偶线性规划的最优解是相同的。
证明:假设某线性规划在SEF下,运行了2阶段单纯形算法。
如果某线性规划不是SEF,那么可以使用前文提到的方法转化成SEF。
考虑原线性规划\(\max\{c^Tx:Ax=b,x\geq 0\}\),它的对偶是\(\min\{b^Ty:A^Ty\geq c\}\)
假设某组基\(B\)是最优解\(x\)对应的基。
考虑把原线性规划重写成关于\(B\)的标准形式\(\max\{(c^T-y^TA)x+y^Tb:x_B+x_NA_NA_B^{-1}=bA_B^{-1},x\geq 0\}\)
并且我们知道由于\(B\)是最优的解的基,所以\(c^T\leq y^TA\),所以\(y^T\)是对偶线性规划的合法解。
并且\((c^T-y^TA)_B=0\)\(x_N=0\),所以\((c^T-y^TA)x+y^Tb=y^Tb\)
而且\(y^Tb\)是对偶线性规划解\(y^T\)的目标函数,与原线性规划的目标函数相等。
所以根据弱对偶定理,\(y\)也是线性规划的最优解,所以原线性规划的最优解等于对偶线性规划的最优解。
通过这些分析,我们可以证明如下2个定理:
1.如果原线性规划无界,那么对偶线性规划无解。
(同理有如果对偶线性规划无界,那么原线性规划无解)
考虑这个东西的逆否命题:如果对偶线性规划有解,那么原线性规划有界。
由于对偶线性规划的任何解都大于等于原线性规划的任何解,原线性规划的解的目标函数有上界。
注意如果原线性规划无解,那么对偶线性规划也可能无解
(例子有:线性规划\(\max\{(1,2)x:x_1-x_2=1,-x_1+x_2=-2\}\)
2.如果两个线性规划都有解,那么都有最优解。
考虑原线性规划的某一个解的目标函数的值\(p\),那么对偶线性规划的所有解的目标函数都大于\(p\),所以对偶线性规划的最优解有下界\(p\),所以不是无界的,根据线性规划基本定理,对偶线性规划有最优解。同理原线性规划也有最优解。

第11部分:判断线性规划最优性的条件
我们可以使用互补松弛定理判定线性规划与对偶的某组解\(\overline x,\overline y\)的最优性。
当前面线性规划的\(c^T\overline x=b^T\overline y\),我们知道\(-s^T\overline y+w^T\overline x=0\)
由于我们假设\(s^T\overline y\geq 0,w^T\overline x\leq 0\),那么有\(s^T\overline y=w^T\overline x=0\)
所以对于\(g\in S1\cup S2,\overline y_g=0\)或者\(s_g=0\),对于\(g\in S3\),由于\(s_g=0\),所以\(\overline y_g\)无限制。
对于\(g\in C1\cup C2,w_g=0\)或者\(\overline x_g=0\),对于\(g\in C3\),由于\(w_g=0\),所以\(\overline x_g\)无限制。
换句话说,在某线性规划中,其每个变量\(\overline x_g\)要么等于\(0\),要么其对偶线性规划的对应限制能取等。
(对于对偶线性规划的每个变量\(\overline y_g\)同理)
它的几何意义:如下只考虑在SEF下的线性规划\(\max\{c^Tx:Ax\leq b\}\)
(对偶\(\min\{b^Ty:A^Ty=c,y\geq 0\}\)
定义对于某线性规划的某解\(x\),如果某个限制\(\alpha x\leq \beta\)满足\(\alpha x=\beta\),那么称其为紧限制。
考虑我们有紧限制\(\alpha_1 x\leq \beta_1...\alpha_k x\leq \beta_k\)
那么\(x\)是最优解的充要条件是存在\(\lambda\geq 0\)\(c=\sum_{i=1}^k \alpha_i\lambda_i\)
证明:首先考虑互补松弛定理:当某个\(\overline{y}\)是最优解
那么对于第\(i\)个限制,\(A_i^Tx=b\)或者\(y_i=0\)
先证明当存在\(\lambda\geq 0\)\(c=\sum_{i=1}^k \alpha_i\lambda_i\)那么\(x\)是最优解。
考虑\(\min\{b^Ty:A^Ty=c,y\geq 0\}\)的最优解\(y\),当$$
特别的,当没有紧限制时,当且仅当\(c=0\)\(x\)是最优解。

第12部分:整数规划
整数规划是经典NP问题。所以人类对于整数规划的认知还非常有限。
和线性规划不同,整数规划可能有解并且有界,但是并没有最优解。
定义若干个点\(a_i\)的凸包:最小的点集使得该点集是凸的,并且这个点集包含\(a\)中的所有点。
可以证明如果整数规划中限制和目标函数的系数都是分数,那么凸包一定存在。
更准确的,凸包内的点由如下方法确定:我们考虑数组\(\lambda\)
\(\sum_{i=1}^n\lambda_i=1\),那么凸包中的每个点\(y\)都满足存在\(\lambda\)\(y=\sum_{i=1}^n\lambda_ia_i\)
记点集\(S\)的凸包是\(conv(S)\)
凸包有如下性质:
1.对于某线性规划\(\max\{c^Tx:Ax\leq b\}\),考虑\(Q\)是其中整数点构成的集合
那么\(conv(Q)\)是个多面体\(A'x\leq b'\),并且\(A',b'\)内的所有元素都是有理数。
2.考虑某整数规划P1\(\max\{c^Tx:Ax\leq b\}\),考虑\(Q\)\(Ax\leq b\)中整数点构成的集合
考虑另一个线性规划P2\(\max\{c^Tx:Ax\leq b\}\),该线性规划并不需要\(x\)是整数。
那么对于P1,如果它无解/无界,那么\(P2\)也无解/无界。
P1的最优解也是P2的最优解。并且对于所有P2的最优解,如果它是极值点,那么也是P1的最优解。
对于以上两个定理的证明超出了本文的范围。

第13部分:切平面算法
对于整数规划,我们可以使用指数级算法切平面算法解决。
定义线性规划的松弛:假如我们有线性规划P1:\(\max{c^Tx:x\in S1}\),P2:\(\max{c^Tx:x\in S2}\),并且\(S1\)\(S2\)的子集
那么我们有:
1.如果P2无解,那么P1无解。因为假如P2无解,那么\(S2\)是空集,那么由于\(S1\)\(S2\)的子集,所以\(S1\)也是空集,所以P1无解。
2.如果P2的最优解也符合P1的条件,那么这个解是P1的最优解。
因为假设这个解不是P1的最优解,考虑P1的最优解,由于\(S1\)\(S2\)的子集,这个解也是P2的解,而且比P2的最优解更优,矛盾。
3.P2的最优解是P1最优解的上界。
因为假设P1存在一个解使得其目标函数比P2的最优解高,由于\(S1\)\(S2\)的子集,所以这个解也是P2的解,而且比P2的最优解更优,矛盾。
定义对于某组最优解的切平面\(\alpha x\leq b\):最优解\(\overline{x}\)不满足\(\alpha \overline{x}\leq b\),并且每个线性规划的整数解\(x\)都满足\(\alpha x\leq b\)
切平面算法的过程是:(假设线性规划已经被化为SEF)
我们首先将整数规划进行整数松弛,然后找到线性规划的最优解对应的基\(B\),把线性规划重写成这组基的标准型:假设为\(x_B+\overline{A}_Nx_N=\overline{b}\)
如果\(\overline{b}\)都是整数,那么算法完成。因为我们的线性规划是整数规划的松弛,并且\(x_B=\overline{b},x_N=0\)是整数解,符合整数规划的\(x\)都要是整数的限制,所以根据前面的分析\(x\)是最优解。
对于每个满足\(b_i\)不是整数的限制\(i\),设第\(i\)行的限制是\(x_j+\sum \overline{A}_{i,k}x_k=b_i\)
考虑切平面\(x_j+\sum \lfloor A_{i,k}\rfloor x_k\leq \lfloor b_i\rfloor\)
由于\(x_N=0\),所以\(x_j=b_i\)\(x_j+\sum \lfloor A_{i,k}\rfloor x_k=b_i\)
所以如果这个限制是切平面,那么\(b_i\)必定不是整数。
假设\(b_i\)不是整数(由于\(x\)不全是整数\(i\)一定存在)
然后考虑对于原线性规划的每组整数解\(\overline x\)一定满足\(\overline x_j+\sum A_{i,k}x_k=b_i\)
由于\(\overline x\geq 0\),对于所以\(x_k\)\(\lfloor A_{i,k}\rfloor \overline{x_k}\leq A_{i,k}\overline{x_k}\)
所以\(\overline{x}_j+\sum \lfloor A_{i,k}\rfloor \overline{x}_k=b_i\),由于\(x\)是整数,\(\overline{x}_j+\sum \lfloor A_{i,k}\rfloor \overline{x}_k\leq b_i\),所以原线性规划的整数解一定满足限制\(x_j+\sum \lfloor A_{i,k}\rfloor x_k\leq \lfloor b_i\rfloor\)
所以如果\(b_i\)不是整数,那么\(x_j+\sum \lfloor A_{i,k}\rfloor x_k\leq \lfloor b_i\rfloor\)必定为切平面
加入该限制,把整数规划重新转化为SEF然后继续进行切平面算法,直到最优解为整数为止。
可以证明:存在一种寻找切平面的方法使得上述算法一定会结束。但是证明它超出了本文的范围。

第14部分:非线性规划

第15部分:线性规划的内点法
在此部分我们介绍一种线性规划的快速算法:内点法
定义线性规划的内点:如果某个点是内点,则对于某线性规划的可行域\(S\),存在实数\(r>0\),使得这个点为中心半径为\(r\)的超球被包含在\(S\)内。
考虑在SEF下的线性规划\(\{\max c^Tx:Ax=b,x\geq 0\}\),假设矩阵\(A\)满秩,否则我们可以移除\(A\)的若干行。
它的对偶线性规划:\(\{\min b^Ty:A^Ty-s=c, s\geq 0\}\)\(s\)是松弛变量)
根据弱对偶定理,对于原线性规划的任意解\(\overline x\)和对偶线性规划的任意解\(\overline y\)\(c^Tx\leq b^Ty\)
考虑我们通过某种方法得到了原线性规划,对偶线性规划和松弛变量\(s\)的可行解\(\overline x,\overline y,\overline s\),且\(\overline x,\overline y\)是原/对偶线性规划可行域的内点,我们想要求出更优的解。
\(b^Ty-c^Tx=0\)时,\(x,y\)都是原/对偶线性规划的最优解,所以我们考虑缩小\(b^Ty-c^Tx\)
我们知道\(b^Ty-c^Tx=(Axy)-c^Tx=x^TA^Ty-x^Tc=x^T(A^Ty-c)=x^Ts\)
考虑求出一个方向\(dx,dy,ds\),使得对于某个实数\(\alpha\)\(x+dx,y+dy,s+ds\)是可行解,并且\(c^T(\overline x+\alpha dx),b^T(\overline y+\alpha dy)\)的差更小
所以\(A(\overline x+dx)=b,A^T(\overline y+dy)-(s+ds)=c\)
由于\(A\overline x=b,A^T\overline y-s=c\),所以\(Adx=0,A^Tdy-ds=0\)
我们想让\((\overline x+dx)(\overline s+ds)\)尽量小,所以考虑让它等于\(0\)
所以对于所有\(i\)\(\overline x_i\overline s_i+\overline x_ids_i+\overline s_idx_i+dx_ids_i=0\)
\(dx_ids_i\)的二次项很难处理,所以去掉,我们得到了\(\overline x_i\overline s_i+\overline x_ids_i=0\)
可以证明当矩阵\(A\)满秩,\(ds,dx,dy\)都有唯一解。
原因:

第16部分:线性规划无解/无界性判断的证明
先考虑

posted @ 2024-09-06 03:56  celerity1  阅读(148)  评论(0编辑  收藏  举报