当前位置: 首页 > news >正文

10.4 线性规划

一、线性规划

线性规划(Linear programming)是在线性代数的基础上再结合两个新的思想:不等式(inequalities)最小化(minimization)。这个问题仍然是从矩阵方程 Ax=bA\boldsymbol x=\boldsymbol bAx=b 开始,但是只考虑非负解向量,我们要求 x≥0\boldsymbol x\ge0x0(意味着 x\boldsymbol xx 的分量都不能为负)。一般来说,未知数要比方程的个数多,即矩阵的 n>mn>mn>m,因此,如果方程 Ax=bA\boldsymbol x=\boldsymbol bAx=b 存在有 x≥0\boldsymbol x\ge\boldsymbol 0x0 的解,那么可能会有很多个这样的解。线性规划是研究如何寻找解 x∗≥0\boldsymbol x^*\ge\boldsymbol 0x0 使得下面的成本最小:

成本为 c1x1+c2x2+⋯cnxnc_1x_1+c_2x_2+\cdots c_nx_nc1x1+c2x2+cnxn,寻找线性方程组 Ax=bA\boldsymbol x=\boldsymbol bAx=b 的非负解向量 x∗\boldsymbol x^*x,使得成本最小。

因此,线性规划问题是由一个矩阵 AAA 和两个向量 b\boldsymbol bbc\boldsymbol cc 来定义的:

  1. m×nm\times nm×n 的矩阵 AAAn>mn>mn>m:如 A=[112]A=\begin{bmatrix}1&1&2\end{bmatrix}A=[112](一个方程,三个未知数)
  2. mmm 个方程组 Ax=bA\boldsymbol x=\boldsymbol bAx=b 中,b\boldsymbol bbmmm 个分量:如 b=[4]\boldsymbol b=\begin{bmatrix}4\end{bmatrix}b=[4]
  3. 成本系数向量(cost vector)nnn 个分量:如 c=[538]\boldsymbol c=\begin{bmatrix}5&3&8\end{bmatrix}c=[538].

那么这个问题就是最小化成本 c⋅x\boldsymbol c\cdot\boldsymbol xcx,其中约束条件为 Ax=bA\boldsymbol x=\boldsymbol bAx=bx≥0:\boldsymbol x\ge\boldsymbol 0:x0最小化5x1+3x2+8x3,约束条件是x1+x2+2x3=4和x1,x2,x3≥0\pmb{最小化\kern 5pt5x_1+3x_2+8x_3,约束条件是\kern 5ptx_1+x_2+2x_3=4\kern 5pt和\kern 5ptx_1,x_2,x_3\ge0}最小化5x1+3x2+8x3,约束条件是x1+x2+2x3=4x1,x2,x30我们这里直接跳到了问题部分,没有解释问题的来源。线性规划实际上是数学在管理学中最重要的应用,开发相关快速求解的算法和程序代码是非常有意义的。一般来说,寻找 x∗\boldsymbol x^*x 要比直接求解 Ax=bA\boldsymbol x=\boldsymbol bAx=b 更难,因为对于解向量要满足额外的约束条件:x∗≥0\boldsymbol x^*\ge\boldsymbol 0x0 和成本 cTx∗\boldsymbol c^T\boldsymbol x^*cTx 最小。求解该问题后,会解释问题的背景,并介绍著名的单纯形法和内点法。
首先观察约束条件:Ax=bA\boldsymbol x=\boldsymbol bAx=bx≥0\boldsymbol x\ge\boldsymbol 0x0. 方程 x1+x2+2x3=4x_1+x_2+2x_3=4x1+x2+2x3=4 表示的是三维空间中的一个平面,加上非负性的条件 x1≥0,x2≥0,x3≥0x_1\ge0,x_2\ge0,x_3\ge0x10,x20,x30 会将这个平面限制到了一个三角形区域,所以解向量 x∗\boldsymbol x^*x 一定位于 Figure 10.5 中的三角形 PQRPQRPQR 上。

在这里插入图片描述
在这个三角形 PQRPQRPQR 的内部,x\boldsymbol xx 所有的分量都是正的;在这个三角形的边上,有一个分量为零;而在它三个顶点 P,QP,QP,QRRR 处,有两个分量为零。最优解(optimal solution)x∗\boldsymbol x^*x 一定是这些顶点中的一个! 下面说明为什么。
这个三角形区域包含所有满足约束条件 Ax=bA\boldsymbol x=\boldsymbol bAx=bx≥0\boldsymbol x\ge\boldsymbol 0x0 的向量 x\boldsymbol xx,这些 x\boldsymbol xx 称为可行点(feasible points), 而这个三角形区域称为可行域(feasible set). 然后,我们要在可行域中寻找能够使得成本 c⋅x\boldsymbol c\cdot\boldsymbol xcx 最小化的可行点:

在三角形 PQR 中寻找使得成本 5x1+3x2+8x3 最小的点 x∗\pmb{在三角形\,PQR\,中寻找使得成本\,5x_1+3x_2+8x_3\,最小的点\,\boldsymbol x^*}在三角形PQR中寻找使得成本5x1+3x2+8x3最小的点x

使成本为零的向量位于平面 5x1+3x2+8x3=05x_1+3x_2+8x_3=05x1+3x2+8x3=0 上,但是这个平面三角形并不相交,所以我们无法在 x\boldsymbol xx 满足约束条件的情况下,达到零成本。因此需要逐渐增加成本 CCC,直至平面 5x1+3x2+8x3=C5x_1+3x_2+8x_3=C5x1+3x2+8x3=C 与三角形相交。随着 CCC 的增加,我们可以得到一族向着三角形区域移动的互相平行的平面。
首先与三角形区域相交的平面 5x1+3x2+8x3=C5x_1+3x_2+8x_3=C5x1+3x2+8x3=C 有最小的 CCC. 交点就是最优解 x∗\boldsymbol x^*x. 而这个交点一定是顶点 P,Q\pmb P,\pmb QP,QR\pmb RR 中的一个,一个平移的平面在经过三角形顶点之前不可能会先经过其内点!因此我们需要比较在每个顶点处的成本 5x1+3x2+8x35x_1+3x_2+8x_35x1+3x2+8x3

P=(4,0,0) 对应成本 20Q=(0,4,0) 对应成本 12R=(0,0,2) 对应成本 16\pmb P=(4,0,0)\,对应成本\,20\kern 10pt{\color{blue}\pmb Q=(0,4,0)\,对应成本\,12}\kern 10pt\pmb R=(0,0,2)\,对应成本\,16P=(4,0,0)对应成本20Q=(0,4,0)对应成本12R=(0,0,2)对应成本16

顶点 Q\pmb QQ 对应的成本最小,所以 x∗=(0,4,0)\boldsymbol x^*=(0,4,0)x=(0,4,0) 就是这个线性规划问题的最优解。
如果成本系数向量 c\boldsymbol cc 发生改变,那么这一族互相平行的平面就会发生倾斜。如果改变比较小,Q\pmb QQ 仍然是最优解。对于成本 c⋅x=5x1+4x2+7x3\boldsymbol c\cdot\boldsymbol x=5x_1+4x_2+7x_3cx=5x1+4x2+7x3,最优解 x∗\boldsymbol x^*x 就会移动到 R=(0,0,2)\pmb{R}=(0,0,2)R=(0,0,2),此时最小成本是 7⋅2=147\cdot2=1472=14.

注1: 有些线性规划问题是寻求利润最大化而不是成本最小化,这在数学原理上几乎是相同的。此时选择的是一个较大的 CCC,然后随着 CCC 的减小,这一族平行的平面向着原点移动(不再是远离了)。第一个交点仍然是顶点。

注2: 约束条件 Ax=bA\boldsymbol x=\boldsymbol bAx=bx≥0\boldsymbol x\ge\boldsymbol 0x0 可能无法同时满足。如方程 x1+x2+x3=−1x_1+x_2+x_3=-1x1+x2+x3=1 就没有满足 x≥0\boldsymbol x\ge\boldsymbol 0x0 的解,此时可行域是空集。

注3: 可行域也有可能的无解的。如果约束条件是 x1+x2−2x3=4x_1+x_2-2x_3=4x1+x22x3=4,此时一个较大的正向量 (100,100,98)(100,100,98)(100,100,98) 就是一个可行点,而更大的向量 (1000,1000,998)(1000,1000,998)(1000,1000,998) 也是一个可行点。此时平面 Ax=bA\boldsymbol x=\boldsymbol bAx=b 将不会再被截断为一个三角形了。其中两个顶点 P\pmb PPQ\pmb QQ 仍然可能是最优解 x∗\boldsymbol x^*x,但是顶点 R\pmb RR 移动到了无穷远处。

注4: 对于一个无解的可行域,最小成本可能是 −∞-\infty(负无穷大)。假设成本函数是 −x1−x2+x3-x_1-x_2+x_3x1x2+x3,则向量 (100,100,98)(100,100,98)(100,100,98) 对应的成本 C=−102C=-102C=102;向量 (1000,1000,98)(1000,1000,98)(1000,1000,98) 对应的成本 C=−1002C=-1002C=1002. 此时我们会获得报酬,而不是支付成本。在实际应用中这种情况不可能发生,但是理论上是可能的,因为 A,bA,\boldsymbol bA,bc\boldsymbol cc 可能会产生无法预料的三角形区域和成本函数。

二、原问题和对偶问题

下面举一个例子来解释 A,b,cA,\boldsymbol b,\boldsymbol cA,b,c. 未知数 x1,x2,x3x_1,x_2,x_3x1,x2,x3 分别表示一个博士、一个学生和一台机器的工作时间,每小时的成本分别为 $555,$333 和 $888,工作的时间不能为负:x1≥0,x2≥0,x3≥0x_1\ge0,x_2\ge0,x_3\ge0x10,x20,x30. 博士和学生都是每小时完成一道题目,而机器每小时可以完成两道题。现在有四道题目需要完成,原则上它们可以分工合作完成:x1+x2+2x3=4x_1+x_2+2x_3=4x1+x2+2x3=4.
现在的问题是用最小的成本 cTx\boldsymbol c^T\boldsymbol xcTx 完成这四道题目。
如果这三者同时工作,那么这项工作需要一个小时完成:x1=x2=x3=1x_1=x_2=x_3=1x1=x2=x3=1,成本是 5+3+8=165+3+8=165+3+8=16 美元。但是我们可以发现博士和学生的解题速度是一样的,而学生的成本要更低,所以博士会被学生替代(这个问题就变得比较实际)。当学生工作两个小时,机器工作一小时也可以完成全部的四道题目,此时的成本是 6+8=146+8=146+8=14 美元。由于博士并没有参与解题,所以 x1=0x_1=0x1=0,此时这个解在图中三角形区域的边 QR\pmb{QR}QR 上,因此最优解应该是这四道题目全部都由学生完成(在 Q\pmb QQ 点)或全部由机器完成(在 R\pmb RR 点)。而在本例题中,学生用四个小时来解这四道题的成本是 $121212 —— 这是最小的成本。
由于约束条件 Ax=bA\boldsymbol x=\boldsymbol bAx=b 只有一个方程,所以顶点 (0,4,0)(0,4,0)(0,4,0) 只有一个非零分量。当约束条件 Ax=bA\boldsymbol x=\boldsymbol bAx=bmmm 个方程时,顶点有 mmm 个非零分量。尽管可以令其中 n−mn-mnm 个自由变量为零,然后求解 Ax=bA\boldsymbol x=\boldsymbol bAx=b 剩下的 mmm 个变量,但是,我们并不知道应该选择求解哪 mmm 个变量。
可行域顶点的个数就是从 nnn 个分量中选择 mmm 个分量方法的总数,即 CnmC_n^mCnm. 从 nnn 个数中选择 mmm 个数,这与概率密切相关。如有 202020 个未知数 m=8m=8m=8 个方程(这些数仍然很小),可行域有 C208=20!12!8!=125970C_{20}^8=\dfrac{20!}{12!8!}=125970C208=12!8!20!=125970 个顶点。
我们为了找到最小的成本检验 333 个顶点没有什么问题,但是要检验这 125970125970125970 个顶点,我们不能使用这个方法。而使用单纯形法要快得多。

对偶问题(The Daul Problem): 在线性规划中,问题通常是成对出现的,有最大值问题和最小值问题 —— 原问题和它的 “对偶” 问题。原问题使用矩阵 AAA 和两个向量 b\boldsymbol bbc\boldsymbol cc 来表示,对偶问题是使用 AAA 的转置,然后交换一下向量 b\boldsymbol bbc\boldsymbol cc 来表示:目标是最大化 b⋅y\boldsymbol b\cdot\boldsymbol yby. 下面是原问题的对偶问题:
一个作弊者通过出售问题的答案来解决问题。 每个问题的费用是 yyy 美元,总共是 4y4y4y 美元(此时 b=[4]\boldsymbol b=\begin{bmatrix}4\end{bmatrix}b=[4] 进入到收入中)。很明显,这个作弊者的收费不能超过博士、学生或者机器的成本,即:y≤5,y≤3y\le5,y\le3y5,y32y≤82y\le82y8(此时 c=(5,3,8)\boldsymbol c=(5,3,8)c=(5,3,8) 进入到了不等式约束条件中),这个作弊者需要最大化他的收入 4y4y4y.

对偶问题在约束条件 ATy≤c下,最大化收入 b⋅y≤c\kern 15pt\color{blue}在约束条件\,A^T\boldsymbol y\le\boldsymbol c 下,最大化收入\,\boldsymbol b\cdot\boldsymbol y\le\boldsymbol c在约束条件ATyc下,最大化收入byc.

y=3y=3y=3 时,收入 4y=124y=124y=12 美元达到最大,对偶问题的最大值($121212)等于原问题的最小值($121212),这就是对偶性。

对偶问题中,如果其中一个问题有最优解向量(x∗\boldsymbol x^*xy∗\boldsymbol y^*y),那么另一也有最优解向量。
最小化成本 c⋅x∗等于最大化收入 b⋅y∗{\color{blue}最小化成本\,\boldsymbol c\cdot\boldsymbol x^*}\kern 15pt等于\kern 15pt\color{blue}最大化收入\,\boldsymbol b\cdot\boldsymbol y^*最小化成本cx等于最大化收入by

本课程前面有介绍行图和列图,第一个 “对偶定理” 是关于秩的:矩阵的线性无关的最大行数等于线性无关的最大列数。这个定理和上面的对偶问题一样,在矩阵规模较小时很容易进行验证。下面证明该定理中比较容易的部分 —— 作弊者的收入 bTy\boldsymbol b^T\boldsymbol ybTy 不会超过实际的解题成本如果 Ax=b,x≥0,ATy≤c则bTy=(Ax)Ty=xT(ATy)≤xTc(10.4.1){\color{blue}如果\,A\boldsymbol x=\boldsymbol b,\boldsymbol x\ge\boldsymbol 0,A^T\boldsymbol y\le\boldsymbol c\kern 15pt则\kern 15pt\boldsymbol b^T\boldsymbol y=(A\boldsymbol x)^T\boldsymbol y=\boldsymbol x^T(A^T\boldsymbol y)\le\boldsymbol x^T\boldsymbol c}\kern 20pt(10.4.1)如果Ax=b,x0,ATycbTy=(Ax)Ty=xT(ATy)xTc(10.4.1)完整的对偶定理说的是,当 bTy\boldsymbol b^T\boldsymbol ybTy 达到最大值时,xTc\boldsymbol x^T\boldsymbol cxTc 达到最小值,它们相等:b⋅y∗=c⋅x∗\boldsymbol b\cdot\boldsymbol y^*=\boldsymbol c\cdot\boldsymbol x^*by=cx. 注意(10.4.1)中最后一步有不等式符号 ≤\le
x≥0 和 s=c−ATy≥0 的点积 xTs≥0,这个就是 xTATy≤xTc\boldsymbol x\ge\boldsymbol 0\,和 \,\boldsymbol s=\boldsymbol c-A^T\boldsymbol y\ge\boldsymbol 0\,的点积\,\boldsymbol x^T\boldsymbol s\ge\boldsymbol 0,这个就是\,\boldsymbol x^TA^T\boldsymbol y\le\boldsymbol x^T\boldsymbol cx0s=cATy0的点积xTs0,这个就是xTATyxTc

两式相等需要 xTs=0\color{blue}两式相等需要\,\boldsymbol x^T\boldsymbol s=\boldsymbol 0两式相等需要xTs=0,因此最优解对于每个 jjj 都有 xj∗=0 或 sj∗=0\color{blue}\boldsymbol x^*_j=\boldsymbol 0\,或\,\boldsymbol s^*_j=\boldsymbol 0xj=0sj=0.

三、单纯形法

消元法是求解线性方程组的主要方法,单纯形法(simplex method)是求解线性不等式的主要方法,这里只阐述单纯形法的原理。单纯形法是从可行域一个顶点出发搜索使成本更低的相邻顶点,最终(实际应用中会很快)到达成本最低的那个顶点。
顶点对应一个 nnn 维的 x≥0\boldsymbol x\ge\boldsymbol 0x0 的向量,且满足 mmm 个方程组 Ax=bA\boldsymbol x=\boldsymbol bAx=b,它最多有 mmm 个正分量,另外 n−mn-mnm 个分量均为零(这些对应着自由变量,带回方程组可以求得 mmm 个基本变量的值,x\boldsymbol xx 的所有分量一定能够都是非负的,否则就不是顶点)。对于相邻的顶点,xxx 的一个零分量会变为正值,而一个正分量会变为零。
单纯形法的每一步都必须要决定哪个分量应该通过将其变为正值来 “换入(enter)”,哪个分量应该把它变为零来 “换出(leaves)”,决定的依据是降低总成本。这样单纯形法会向最优解 x∗\boldsymbol x^*x 移动一步。
下面说明整体思想:观察当前顶点的每个零分量,如果将其从 000 变为 111,而为了保持 Ax=bA\boldsymbol x=\boldsymbol bAx=b 成立,其它的非零分量将不得不调整,我们通过回代来求新的 x\boldsymbol xx,并计算总成本 c⋅x\boldsymbol c\cdot\boldsymbol xcx 的改变量。这个改变量就是该分量 “降低的成本(reduced cost)” rrr换入的分量是就是取得最小负值(most negative) rrr 的那一个,rrr 是该分量最大的单位成本减少量。

例1】上述的原问题,假设当前的顶点是 P=(4,0,0)\pmb P=(4,0,0)P=(4,0,0),表示所有的工作全部由博士完成(总成本是 $202020). 如果学生工作一小时,x=(3,1,0)\boldsymbol x=(3,1,0)x=(3,1,0) 对应的成本将下降到 $181818,减少的成本是 r=−2r=-2r=2 美元. 如果机器工作一小时,则 x=(2,0,1)\boldsymbol x=(2,0,1)x=(2,0,1) 对应的成本也是 $181818,减少到成本也为 r=−2r=-2r=2 美元。这种情况下单纯形法可以选择学生或机器的工作时间作为换入分量。
即使在这样一个小的例子中,第一步也可能无法立即得到最优的 x∗\boldsymbol x^*x。单纯性法首先选择一个换入分量,然后才可以确定换入分量的数值。我们将换入分量从 000 变为 111 后再计算 rrr,但是一单位的分量通常太大或太小。本例中,单纯形法选择换出分量(博士),最优解将会向着顶点 Q\pmb QQR\pmb RR 移动。
换入的分量的值越大,成本就越低。当其中一个正分量(我们调整其余的分量以满足 Ax=bA\boldsymbol x=\boldsymbol bAx=b)变为零时,我们就要停止该这个换入过程。换出分量是第一个取到零的那个正分量 xix_ixi,此时我们就找到了一个相邻的顶点,然后从新的顶点开始搜索下一个要换入和换出的分量。
当所有成本的改变量都为正时,当前的顶点就是最优解 x∗\boldsymbol x^*x. 此时没有零分量可以在成本 c⋅x\boldsymbol c\cdot\boldsymbol xcx 不增加的情况下变为正值,没有新的变量要换入了,这个问题就解决了(同样也求得的对偶问题的 y∗\boldsymbol y^*y)。

注: 通常需要 αn\alpha nαn 步就可以得到 x∗\boldsymbol x^*x,其中 α\alphaα 不会太大。但是也有需要经过指数级单纯性法步数才能找到最优解的例子,进而人们发展出了另一种求解方法,这个方法保证了使用更少(但更困难)的步骤求得 x∗\boldsymbol x^*x,但是需要经过可行域的内部。

例2】最小化成本 c⋅x=3x1+x2+9x3+x4\boldsymbol c\cdot\boldsymbol x=3x_1+x_2+9x_3+x_4cx=3x1+x2+9x3+x4. 约束条件是 x≥0\boldsymbol x\ge\boldsymbol 0x0 和下面两个方程 Ax=bA\boldsymbol x=\boldsymbol bAx=b{x1+2x3+x4=4x2+x3−x4=2m=2 个方程,n=4 个未知数\left\{\begin{array}{r}x_1+2x_3+x_4=4\\x_2+x_3-x_4=2\\\end{array}\kern 10ptm=2\,个方程,n=4\,个未知数\right.{x1+2x3+x4=4x2+x3x4=2m=2个方程,n=4个未知数起始顶点是 x=(4,2,0,0)\boldsymbol x=(4,2,0,0)x=(4,2,0,0),对应的成本为 c⋅x=14\boldsymbol c\cdot\boldsymbol x=14cx=14. x\boldsymbol xxm=2m=2m=2 个非零分量和 n−m=2n-m=2nm=2 个零分量,该顶点零分量是 x3x_3x3x4x_4x4. 现在需要判断要换入的分量是 x3x_3x3 还是 x4x_4x4(变为非零分量),我们先将这两个分量分别增加一个单位:如果 x3=1 而 x4=0,则 x=(2,1,1,0) 对应的成本为 16.如果 x4=1 而 x3=0,则 x=(3,3,0,1) 对应的成本为1 3.如果\,x_3=1\,而\,x_4=0,则\,\boldsymbol x=(2,1,1,0)\,对应的成本为\,16.\\\color{blue}如果\,x_4=1\,而\,x_3=0,则\,\boldsymbol x=(3,3,0,1)\,对应的成本为1\,3.如果x3=1x4=0,则x=(2,1,1,0)对应的成本为16.如果x4=1x3=0,则x=(3,3,0,1)对应的成本为13.将上述两个成本与成本 141414 进行比较,换入 x3x_3x3 的成本改变量为 r=2r=2r=2,此时为正值,是无效换入。换入 x4x_4x4 的成本改变量为 r=−1r=-1r=1,此时是负值是有效换入。所以,我们换入的分量是 x4x_4x4.
那么 x4x_4x4 可以换入多少呢?一单位的 x4x_4x4 会使得 x1x_1x1444 降到 333,四单位就会使得 x1x_1x1444 降到零(同时 x2x_2x2 会增加到 666),因此换出的分量是 x1x_1x1,新的顶点为 x=(0,6,0,4)\boldsymbol x=(0,6,0,4)x=(0,6,0,4),对应的成本变为了 x⋅c=10\boldsymbol x\cdot\boldsymbol c=10xc=10. 这个就是最优的 x∗\boldsymbol x^*x,但是为了证明我们还需要尝试进一步的单纯性步骤,此时我们从顶点 (0,6,0,4)(0,6,0,4)(0,6,0,4) 出发,假设换入 x1x_1x1x3x_3x3从顶点 (0,6,0,4) 出发如果 x1=1 而 x3=0,则 x=(1,5,0,3) 对应的成本为 11.如果 x3=1 而 x1=0,则 x=(0,3,1,2) 对应的成本为 14.\pmb{从顶点\,(0,6,0,4)\,出发}\kern 15pt\begin{array}{l}如果\,x_1=1\,而\,x_3=0,则\,\boldsymbol x=(1,5,0,3)\,对应的成本为\,11.\\如果\,x_3=1\,而\,x_1=0,则\,\boldsymbol x=(0,3,1,2)\,对应的成本为\,14.\end{array}从顶点(0,6,0,4)出发如果x1=1x3=0,则x=(1,5,0,3)对应的成本为11.如果x3=1x1=0,则x=(0,3,1,2)对应的成本为14.这两个成本都比 101010 要高,它们的 rrr 都是正值 —— 此时不需要移动。因此,当前的顶点 (0,6,0,4)(0,6,0,4)(0,6,0,4) 就是最优解 x∗\boldsymbol x^*x.
这些计算可以程序化,每个单纯性步骤需要求解三个有相同系数矩阵 BBB 的线性方程组,矩阵 BBB 是由矩阵 AAAmmm 个基本列向量组成的 m×mm\times mm×m 的矩阵。当一个列换入,而旧的列换出时,有快速更新 B−1B^{-1}B1 的方法。这就是大多数代码处理单纯性法的方式。
最优解 x∗\boldsymbol x^*x 中有 mmm 个非零分量,最优解 y∗\boldsymbol y^*ymmm 个方程 ATy∗=cA^T\boldsymbol y^*=\boldsymbol cATy=c 的解向量,然后得到的最优关系 xTs=0\boldsymbol x^T\boldsymbol s=0xTs=0 就是对偶性:要么 xj∗=0x^*_j=0xj=0,要么 s∗=c−ATy∗\boldsymbol s^*=\boldsymbol c-A^T\boldsymbol y^*s=cATy 中的 “松弛量(slack)” sj∗=0s^*_j=0sj=0.
x∗=(0,4,0)\boldsymbol x^*=(0,4,0)x=(0,4,0) 是最优顶点 Q\pmb QQ 时,作弊者设定的价格为 y∗=3y^*=3y=3.

四、内点法

单纯形法是沿着可行域的边移动,最终到达最优顶点 x∗\boldsymbol x^*x. 内点法(Interior point methods)是在可行域内部移动(其中 x>0\boldsymbol x>\boldsymbol 0x>0),这个方法是期望能直接找到最优解 x∗\boldsymbol x^*x,并且效果很好。
固定在可行域内部搜索的一种方法是在边界处设置障碍,我们添加一个额外的对数项成本,因此当任何的 xjx_jxj 趋近于零时,这个成本都会趋于无穷大,最优解向量满足 x>0\boldsymbol x>\boldsymbol 0x>0,参数 θ\thetaθ 的值较小,并且会趋于零。

障碍问题 约束条件为Ax=b 时,最小化\kern 20pt\color{blue}约束条件为\kern 5ptA\boldsymbol x=\boldsymbol b\,时,最小化约束条件为Ax=b时,最小化cTx−θ(log⁡x1+log⁡x2+⋯+log⁡xn)(10.4.2){\color{blue}\boldsymbol c^T\boldsymbol x-\theta(\log x_1+\log x_2+\cdots+\log x_n)}\kern 30pt(10.4.2)cTxθ(logx1+logx2++logxn)(10.4.2)

这个成本是非线性的(线性规划中的不等式已经体现了非线性),由于当 xj=0x_j=0xj=0 时,log⁡xj\log x_jlogxj 为无穷大,所以不再需要约束条件 xj≥0x_j\ge0xj0.
对于每个 θ\thetaθ,障碍问题都是原问题的一个近似问题,我们对这 mmm 个约束方程 Ax=bA\boldsymbol x=\boldsymbol bAx=b 引入拉格朗日乘子(Lagrange multipliers)y1,y2,⋯ ,ymy_1,y_2,\cdots,y_my1,y2,,ym,这是处理约束条件一个很好的方法:y 来自拉格朗日乘子L(x,y,θ)=cTx−θ(∑i=1nlog⁡xi)−yT(Ax−b)(10.4.3)\pmb{\boldsymbol y\,来自拉格朗日乘子}\kern 15ptL(x,y,\theta)=\boldsymbol c^T\boldsymbol x-\theta\Big(\sum_{i=1}^{n}\log x_i\Big)-\boldsymbol y^T(A\boldsymbol x-\boldsymbol b)\kern 15pt(10.4.3)y来自拉格朗日乘子L(x,y,θ)=cTxθ(i=1nlogxi)yT(Axb)(10.4.3)∂L∂y=0\dfrac{\partial L}{\partial y}=0yL=0 我们可以反过来得到 Ax=bA\boldsymbol x=\boldsymbol bAx=b. 偏导数 ∂L∂xj\dfrac{\partial L}{\partial x_j}xjL 有重大的意义!

障碍问题中的最优解 ∂L∂xj=cj−θxj−(ATy)j=0\kern 10pt\color{blue}\dfrac{\partial L}{\partial x_j}=c_j-\dfrac{\theta}{x_j}-(A^T\boldsymbol y)_j=0\kern 10ptxjL=cjxjθ(ATy)j=0xjsj=θ(10.4.4)\kern 10pt{\color{blue}\boldsymbol x_j\boldsymbol s_j=\theta}\kern 15pt(10.4.4)xjsj=θ(10.4.4)

原问题中有 xjsj=0x_js_j=0xjsj=0,而障碍问题是 xjsj=θx_js_j=\thetaxjsj=θ,最优解 x∗(θ)\boldsymbol x^*(\theta)x(θ) 位于通往 x∗(0)\boldsymbol x^*(0)x(0)中心路径(central path) 上。这 nnn 个最优方程 xjsj=θx_js_j=\thetaxjsj=θ 是非线性的,我们可以用牛顿迭代法来求解。
当前的障碍问题中的 x,y,s\boldsymbol x,\boldsymbol y,\boldsymbol sx,y,s 满足 Ax=b,x≥0A\boldsymbol x=\boldsymbol b,\boldsymbol x\ge\boldsymbol 0Ax=b,x0ATy+s=cA^T\boldsymbol y+\boldsymbol s=\boldsymbol cATy+s=c,但是并不满足 xjsj=θx_js_j=\thetaxjsj=θ,因为现在是在可行域内,还不是最优解。牛顿迭代法选取步长 Δx,Δy,Δs\Delta \boldsymbol x,\Delta \boldsymbol y,\Delta\boldsymbol sΔx,Δy,Δs,并且忽略掉 (x+Δx)(s+Δs)=θ(x+\Delta x)(s+\Delta s)=\theta(x+Δx)(s+Δs)=θ 中的二次项 ΔxΔs\Delta \boldsymbol x\Delta \boldsymbol sΔxΔs,然后使用下面的线性方程组来修正 x,y,s\boldsymbol x,\boldsymbol y,\boldsymbol sx,y,s牛顿迭代法AΔx=0ATΔy+Δs=0sjΔxj+xjΔsj=θ−xjsj(10.4.5)\pmb{牛顿迭代法}\kern 25pt\begin{array}{r}A\Delta \boldsymbol x=\boldsymbol 0\\A^T\Delta \boldsymbol y+\Delta \boldsymbol s=\boldsymbol 0\\s_j\Delta x_j+x_j\Delta s_j=\theta-x_js_j\end{array}\kern 25pt(10.4.5)牛顿迭代法AΔx=0ATΔy+Δs=0sjΔxj+xjΔsj=θxjsj(10.4.5)牛顿迭代法对每个 θ\thetaθ 都能达到二阶收敛,然后令 θ\thetaθ 趋近于零。对偶间隙(duality gap)xTs\boldsymbol x^T\boldsymbol sxTs 通常在迭代 202020606060 步后会小于 10−810^{-8}108.
内点法在商业软件中几乎是 “按原样” 使用,它用于解决一大类线性和非线性的问题。

http://www.dtcms.com/a/419011.html

相关文章:

  • 【Svelte】比较 onMount 和 browser,以及客户端获取数据时,应该使用谁?
  • 欢迎学习《现代控制理论》——自动化专业的核心课程
  • 强化学习的数学原理-04章 策略评估与策略优化
  • 广州网站建设 .超凡科技新网网站登录不上
  • week 3
  • 建设网站 课程设计怎样用手机做网站
  • 图文讲解k8s中Service、Selector、EndpointSlice的运行原理
  • 菊风智能双录+质检+可视化回溯,组合拳助力金融合规数字化升级
  • k8s中的kubelet
  • 精读C++20设计模式——结构型设计模式:适配器模式
  • 如何用visual做网站十大国际贸易公司排名
  • 网站建设 仿站什么是电商?电商怎么做
  • 2025数据治理平台品牌TOP16榜单:技术突破与选型指南
  • 网站快速收录平台dede做的网站打不开
  • LeetCode 230. 二叉搜索树中第 K 小的元素
  • 优秀的平面设计网站国内做的比较好的旅游网站
  • 设计模式(C++)详解——中介者模式(2)
  • MySQL 8.0 “复杂类型”实战
  • 将0~3V电压分区间放大,减法器的使用
  • 2025年11月PgMP认证报名、考试安排!
  • 百度C++实习生面试题深度解析(下篇)
  • Memblock-2
  • 从芯片发布看未来AI发展趋势与前景
  • 【案例教程】生态碳汇涡度通量数据质量控制、缺失插补、可视化分析、光敏感性分析、温度敏感性分析、数据风浪区分析
  • 牛商网 做的p2p网站公司名称变更通知函
  • 音视频学习(六十七):音视频像素格式
  • XCSSET新变种:专攻苹果macOS用户,实现窃密+勒索
  • 在线教育网站有什么程序做wordpress加标题
  • LeetCode-Hot100 最小栈实现
  • flutter 详细解读