学校有一门课叫《应用运筹学基础》,是计算机学院唯一教优化的课程,感觉上得还行,这里简单记录一下上课学到的知识。第一节课是线性规划(linear programming)。

凸集

对于集合 $S$,若任意两元素 $x, y \in S$,且对于任意 $0 \le \theta \le 1$ 有 $\theta x + (1-\theta)y \in S$,那么 $S$ 是凸集(convex set,形象地想象就是凸的图形)。

可以推广:若 $S$ 为凸集,那么对任意 $n \ge 2$ 个元素 $x_1, x_2, \dots, x_n \in S$ 以及任意 $\sum_{i=1}^n \theta_i = 1$,都有 $\sum_{i=1}^n \theta_ix_i \in S$。

可以使用归纳法证明:

(1) 对于 $n = 2$,根据凸集的定义,结论成立。

(2) 若对于 $n = k$ 结论成立,即对任意 $x_1, x_2, \dots, x_k \in S$ 以及任意 $\sum_{i=1}^k \theta_i = 1$,有 $\sum_{i=1}^k \theta_ix_i \in S$。那么对于任意 $y_1, y_2, \dots, y_{k+1} \in S$ 以及任意 $\sum_{i=1}^{k+1} \lambda_i = 1$,有 $\sum_{i=1}^k \lambda_i = 1 - \lambda_{k+1}$,即 $\sum_{i=1}^k \lambda_i / (1 - \lambda_{k+1}) = 1$,那么 $t_{k+1} = \sum_{i=1}^k \lambda_iy_i / (1 - \lambda_{k+1}) \in S$,根据凸集的定义,自然有 $\sum_{i=1}^{k+1} \lambda_iy_i = (1 - \lambda_{k+1})t_{k+1} + \lambda_{k+1}y_{k+1} \in S$,结论成立。

凸集的交仍然是凸集,容易通过定义证明。

凸函数

对于定义在凸集 $S$ 上的函数 $f(x)$,若对于任意 $0 \le \theta \le 1$ 有 $f(\theta x + (1-\theta) y) \le \theta f(x) + (1-\theta) f(y)$,那么 $f(x)$ 是凸函数(convex function)。

可以推广为延森不等式(Jensen's inequality,原来一直念琴生不等式,被老师吐槽了一通...):若 $f(x)$ 是凸函数,那么对于任意 $\sum_{i=1}^n \theta_i = 1$,有 $f(\sum_{i=1}^n \theta_ix_i) \le \sum_{i=1}^n \theta_i f(x_i)$。

若 $-f(x)$ 是凸函数,那么 $f(x)$ 是凹函数(concave function);根据定义,仿射函数(affine function)即是凸函数又是凹函数。

凸函数美妙的性质是:局部最优就是全局最优。利用反证法证明如下:

若 $x_1$ 与 $x_2$ 满足 $|x_1-x_2| < \epsilon$,那么 $x_1$ 与 $x_2$ 在对方的邻域内。假设 $\hat{x}$ 是局部最优点而不是全局最优点,设 $x^*$ 为全局最优点,那么 $f(\hat{x}) > f(x^*)$。由于 $f(x)$ 为凸函数,那么对于它们凸组合出来的一点 $x = \theta \hat{x} + (1-\theta)x^*$ 有 $f(x) \le \theta f(\hat{x}) + (1-\theta) f(x^*) < f(\hat{x})$。只要取 $\theta = 1 - \epsilon/(2|\hat{x}-x^*|)$,就有 $|x - \hat{x}| = \epsilon/2 < \epsilon$,说明 $x$ 在 $\hat{x}$ 的邻域内,而且比它优,与我们开始的假设不相符。

线性规划

线性规划(linear programming,LP)问题指的是如下形式的优化问题:$$\min_{x} \quad c^Tx + d \\ \text{s.t.} \quad Ax \le b \\ Px = q$$ 简单来说,就是目标函数和约束函数都是仿射函数的优化问题。

由于仿射函数既是凸函数又是凹函数,所以优化问题是 min 还是 max 问题不大;由于常数 $d$ 对优化问题的解没有影响,一般也可以去掉。课堂上讨论的 LP 问题是如下形式的问题 $$\max_{x} \quad c^Tx \\ \text{s.t.} \quad Ax \le b \\ Px = q \\ x \ge 0$$ 其实,$Ax \le b$ 这个约束,可以通过给每个不等式增加一个松弛变量进行松弛:对于 $a_1x_1 + a_2x_2 + \dots + a_nx_n \le b$ 这个约束,我们添加 $x_{n+1}$,把问题变为$a_1x_1 + a_2x_2 + \dots + a_nx_n + x_{n+1} = b$。注意到原来的约束取的是小等于号,所以 $x_{n+1} \ge 0$ 这个条件是满足的。

这样,我们就把 LP 问题特化为 $$\max_{x} \quad c^Tx \\ \text{s.t.} \quad Ax = b \\ x \ge 0$$

为了发掘 LP 问题的一些性质,我们进行一些定义。

极点(extreme point):设 $S$ 为凸集,若 $x \in S$ 无法表示为其它两个 $S$ 内元素的凸组合,那么 $x$ 是极点。

LP 问题的可行域实际上是很多超平面的交,最后组成的应该是一个超多面体。在这个超多面体有界的情况下,极点就是这些超多面体的顶点。对于 LP 问题而言,在超多面体有界的情况下,最优解一定可以在极点取到,且极点的数量是有限的(不过不知道怎么证明- -但是感性地想一想好像还是很有道理的,和函数的极值什么的有点像...)

基可行解(basic feasible solution):我们讨论 $Ax = b$ 有解且行满秩的情况(如果 $Ax = b$ 没有解那这个问题也没得做了,如果行不满秩,那么我们去掉线性相关的限制条件即可)。设 $A$ 是一个 $m \times n$ 的矩阵,根据线性代数的知识,我们可以从 $A$ 中选出最多 $m$ 列线性无关的列向量,其它列向量都和它们线性相关。我们把这 $m$ 个列向量调整到前面去,把 $A$ 分成两部分:$A = \begin{bmatrix} A_B & A_N \end{bmatrix}$,其中 $A_B$ 就是那 $m$ 个线性无关的列向量。我们容易构造出 $Ax = b$ 的一个解:$$x = \begin{bmatrix} A_B^{-1}b \\ 0 \end{bmatrix}$$ 称这种解为基可行解。显然,基可行解至多有 $C_n^m$ 种。

接下来我们要证明一个厉害的定理:每个极点都对应着一个基可行解,且每个基可行解都对应着一个极点。有了这个定理,再结合可行域有解情况下最优解一定可以在极点取到,我们只要枚举基可行解,就能找到最优解了(至于如何优雅地枚举下节课再说- -)。

首先证明一个引理:若 $x = \begin{bmatrix} x_1 & x_2 & \dots & x_k & 0 & 0 & \dots \end{bmatrix}$ 不是基可行解,那么 $x$ 中非 0 元素对应的 $A$ 中的 $k$ 列是线性相关的。如果 $k > m$ 显然这 $k$ 列线性相关;如果 $k \le m$ 但这 $k$ 列线性无关,那么我们就可以把这 $k$ 列当作 $A_B$(如果 $k < m$ 就再选几个线性无关的列,凑成 $m$ 个),$x$ 就成为了一个基可行解。所以这 $k$ 列一定是线性相关的。

首先我们用反证法证明:若 $x$ 为极点,那么 $x$ 也是基可行解。假设 $x$ 并不是基可行解,我们把 $x$ 里的非 0 元素(假设有 $k$ 个)都调整到前面去(相应地,也要把 $A$ 中这 $k$ 个非 0 元素对应的列调到前面去),那么我们可以把 $x$ 写为 $x = \begin{bmatrix} x_1 & x_2 & \dots & x_k & 0 & 0 & \dots \end{bmatrix}$。根据引理,$A$ 中对应的 $k$ 列是线性相关的。

记线性相关的 $k$ 列为 $p_1, p_2, \dots, p_k$,我们就有不全为 0 的 $\lambda_i$,使得 $\sum_{i=1}^k \lambda_i p_i = 0$。记辅助向量 $v = \begin{bmatrix} \lambda_1 & \lambda_2 & \dots & \lambda_k & 0 & 0 & \dots \end{bmatrix}^T$,令 $x' = x + \epsilon v$,$x'' = x - \epsilon v$,显然我们有 $x = (x' + x'') / 2$。由于 $x_1$ 至 $x_k$ 均大于 0,当 $\epsilon$ 充分小时,$x' \ne x''$,且 $x' \ge 0$ 和 $x'' \ge 0$ 的性质也能得到保证。另外,$Ax' = A(x + \epsilon v) = Ax = b$,$Ax'' = A(x - \epsilon v) = Ax = b$,说明 $x'$ 与 $x''$ 都是可行解。这就是说,$x$ 可以表示为可行域内其它两点的凸组合,与 $x$ 是极点的假设矛盾,反证法结束。

我们继续用反证法证明:若 $x$ 为基可行解,那么 $x$ 为极点。假设 $x$ 不是极点,那么有 $x = (x' + x'') / 2$,而且 $x' \ne x''$,以及 $x' \ge 0$ 与 $x'' \ge 0$。设 $x_i = 0$,注意到 $x'$ 与 $x''$ 元素非负,那么 $x'_i = x''_i = 0$。设 $x$ 中有 $k$ 个非 0 元素,根据基可行解的定义,这些元素所对应的 $A$ 的列向量是线性无关的,那么想从这些列向量得到 $b$,线性组合的方式也是唯一的。这就说明了 $x = x' = x''$,则 $x$ 是极点,反证法结束。

这次课上还遇到了一个有趣的转换。给定 $m \times n$ 的矩阵 $A$ 和 $m$ 维向量 $b$,考虑以下优化问题:$$\max_{x} \min_{j} \quad \sum_{i=1}^m b_ix_i - \sum_{i=1}^m a_{i,j}x_i \\ \text{s.t.} \quad x \le q \\ x \ge 0$$ 这个问题第一眼看上去并不像一个线性规划,因为这是一个 max 再套 min 的问题。我们把它改写一下:$$\max_{x} \quad \sum_{i=1}^m b_ix_i - (\max_{j} \quad \sum_{i=1}^m a_{i,j}x_i) \\ \text{s.t.} \quad x \le q \\ x \ge 0$$ 注意到第二个 max 针对的变量 $j$ 的取值是有限的(只有 1 到 $n$),我们就可以把它提出来,变成下面的问题:$$\max_{x,y} \quad \sum_{i=1}^m b_ix_i - y \\ \text{s.t.} \quad x \le q \\ x \ge 0 \\ y \ge \sum_{i=1}^m a_{i,j}x_i \quad \forall j = 1, 2, \dots, n$$ 一下子就变成了线性规划问题,感觉这个操作非常厉害...

转载于:https://www.cnblogs.com/tsreaper/p/aop1.html

应用运筹学基础:线性规划 (1) - 极点与基可行解相关推荐

  1. 【运筹学】线性规划数学模型 ( 单纯形法原理 | 单纯形法流程 | 查找初始基可行解 )

    文章目录 一.单纯形法原理 二.单纯形法流程 三.初始的基可行解查找 一.单纯形法原理 单纯形法的理论基础 : 定理 111 ( 可行域是凸集 ) : 如果线性规划的问题 存在可行解 , 其 可行域 ...

  2. 深入理解线性规划中的基可行解

    线性规划问题常被化归为一个非齐次线性方程组与所有未知数>=0的描述,我们要做的就是在可行域中求出使目标函数取max的解.运筹学的书上给了基可行解的定义以及一系列线性空间的理论,但读者可能会觉得这 ...

  3. 【运筹学】线性规划 人工变量法 ( 人工变量法案例 | 第二次迭代 | 中心元变换 | 检验数计算 | 最优解判定 | 选择入基变量 | 选择出基变量 )

    文章目录 一.第二次迭代 : 中心元变换 二.第二次迭代 : 单纯形表 三.第二次迭代 : 计算检验数 四.第二次迭代 : 最优解判定 五.第二次迭代 : 选择入基变量 六.第二次迭代 : 选择出基变 ...

  4. 【运筹学】线性规划 人工变量法 ( 人工变量法案例 | 第一次迭代 | 中心元变换 | 检验数计算 | 选择入基变量 | 选择出基变量 )

    文章目录 一.第一次迭代 : 中心元变换 二.第一次迭代 : 单纯形表 三.第一次迭代 : 计算检验数 四.第一次迭代 : 最优解判定 五.第一次迭代 : 选择入基变量 六.第一次迭代 : 选择出基变 ...

  5. 【运筹学】线性规划 人工变量法 ( 人工变量法案例 | 初始单纯形表 | 检验数计算 | 入基变量 | 出基变量 )

    文章目录 一.生成初始单纯形表 二.计算非基变量检验数 三.最优解判定 四.选择入基变量 五.选择出基变量 六.更新单纯形表 上一篇博客 [运筹学]线性规划 人工变量法 ( 单纯形法总结 | 人工变量 ...

  6. 【运筹学】线性规划 单纯形法 案例二 ( 第一次迭代 | 矩阵变换 | 检验数计算 | 最优解判定 | 入基变量 | 出基变量 )

    文章目录 一.第一次迭代 : 进行行变换 二.第一次迭代 : 计算检验数 三.第一次迭代 : 最优解判定 四.第一次迭代 : 入基变量 五.第一次迭代 : 出基变量 [运筹学]线性规划 单纯形法 ( ...

  7. 【运筹学】线性规划 单纯形法 案例二 ( 案例解析 | 标准形转化 | 查找初始基可行解 | 最优解判定 | 查找入基变量与出基变量 | 第一次迭代 )

    文章目录 一.线性规划示例 二.转化成标准形式 三.初始基可行解 四.列出单纯形表 五.计算检验数 六.选择入基变量与出基变量 七.第一次迭代 : 列出单纯形表 一.线性规划示例 线性规划示例 : 使 ...

  8. 【运筹学】线性规划数学模型 ( 单纯形法 | 第一次迭代 | 方程组同解变换 | 计算新单纯形表 | 计算检验数 | 入基变量选择 | 出基变量选择 )

    文章目录 一.初始基可行解后第一次迭代 二.迭代后新的单纯形表 三.方程组同解变换 四.生成新的单纯形表 五.解出基可行解 六.计算检验数 σj\sigma_jσj​ 并选择入基变量 七.计算 θ\t ...

  9. 【运筹学】线性规划数学模型 ( 知识点回顾 | 可行解 | 最优解 | 阶梯型矩阵 | 阶梯型矩阵向量 | 基 | 基向量 | 基变量 | 非基变量 )

    文章目录 一.知识点回顾 1.线性规划三要素 2.线性规划一般形式 3.线性规划标准形式 二.线性规划解.可行解.最优解 三.阶梯型矩阵 四.阶梯型矩阵向量 五.基.基向量.基变量.非基变量 一.知识 ...

最新文章

  1. 将Unreal4打包后的工程嵌入到Qt或者桌面中
  2. Android中的表格布局
  3. C++重载>>和<<输入和输出运算符)
  4. 初识设计模式(装饰者模式)
  5. VUE2 第五天学习--过渡效果
  6. android api文档中文版_什么骚操作,用Android能写后台服务?
  7. JEECG 树列表操作总刷新列表,需要重新展开问题 【官方补丁,适用所有版本】
  8. hdfs和日志业务系统
  9. onsyscommand
  10. 字节流通向字符流的桥梁:InputStreamReader
  11. 牛客国庆集训派对Day3: G. Stones(博弈+SG)
  12. 彼得.泰尔:认知未来是投资人的谋生之道
  13. Microsoft Dynamics 365咨询服务研究报告-Microsoft Dynamics 365咨询服务生产基地、总部、竞争对手及市场地位
  14. 攻防世界web新手-easyphp
  15. 机器学习期末考试满分试卷答案
  16. 数学与计算机学院校友会,忆青春成长路 话数计奋斗情——数学与计算机学院校友会...
  17. win10系统脚本批处理开启和停止服务器,批处理命令一键彻底关闭WIN10自动更新...
  18. Twitter 启动“毒丸计划”,与马斯克“拼死一战”
  19. oracle日期函数,转换函数
  20. 【一元多项式算法】设一个一元多项式采用带头结点的单链表存储,所有结点 按照升幂方式链接。设计一个算法,求两个多项式 A 和 B 的乘积,结果多项式 C 存放在新辟的空间中。

热门文章

  1. Trunk和Access分析
  2. Java—String类的intern方法的学习
  3. js中的内存溢出和内存泄漏
  4. ZLiTE Lightweight Clients for Shielded Zcash Transactions using Trusted Execution
  5. javabeans基础
  6. Java String 格式化示例
  7. 如何关闭135端口、139端口、445端口
  8. 404页面该怎么做?
  9. 病毒分析报告-熊猫烧香
  10. 解决ERROR: distribution port 25672 in use by another node: rabbit@