学校有一门课叫《应用运筹学基础》,是计算机学院唯一教优化的课程,感觉上得还行,这里简单记录一下上课学到的知识。第一节课是线性规划(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. windows下给定多个openNi的Uri,匹配与uri对应的Uvc RGB设备
  2. JDOM是JAVA中最常用的一种解析XML的工具
  3. windows系统共享文件夹访问无需验证(输入用户名和密码)即可进入
  4. tv英语域名注册_企业邮箱十万个为什么——域名篇
  5. iOS开源项目周报0316
  6. C++struct和class区别
  7. python画爱心原理_程序员式优雅表白,教你用python代码画爱心
  8. ECS 游戏框架背景知识
  9. react Link跳转无效_react常见的问题及解决办法
  10. Android Studio NDK报错:mips64el-linux-android-strip 找不到
  11. [LeetCode]Ugly Number
  12. Zigbee 2006介绍+资料+源代码下载
  13. 链游知识4:以太坊浏览器的使用
  14. 已解决Visit python.org to download an earlier version of Python.
  15. css 水平居中和垂直居中
  16. python测试脚本 进制转换器_进制转换(用Python实现进制转换器)
  17. STM32CubeIDE用DAP调试的超级无敌简单方法——2022.01.07
  18. 【stm32f103】引脚功能、工程简介与添加步骤
  19. 商店销售某一商品,商店每天公布统一的折扣(discount)
  20. 益聚星荣:B站成“今年最亏视频平台”?爱奇艺都甘拜下风

热门文章

  1. 虚拟机NAT模式的网络设置
  2. PreTranslateMessage和TranslateMessage区别
  3. request.setAttribute()
  4. 百度地图API 2014年 v3.0.0版本缩放控件、比例尺控件、指南针控件【控制方法】
  5. Intellij IDEA插件--Key Promoter X
  6. matlab坐标系无穷大,在 Matlab 中无穷大用 _______________ 表示
  7. java反转函数_在JAVA中,下列哪个函数可用于字符串的反转?
  8. IK分词器-自定义分词
  9. 使用Aspose.Words设置word文档多倍行距
  10. select下拉选项禁用