应用运筹学基础:线性规划 (1)

学校有一门课叫《应用运筹学基础》,是计算机学院唯一教优化的课程,感觉上得还行,这里简单记录一下上课学到的知识。第一节课是线性规划(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$ 为极点,那么 $x$ 也是基可行解。假设 $x$ 并不是基可行解,我们把 $x$ 里的非 0 元素(假设有 $k$ 个)都调整到前面去(相应地,也要把 $A$ 中这 $k$ 个非 0 元素对应的列调到前面去),那么我们可以把 $x$ 写为 $x = \begin{bmatrix} x_1 & x_2 & \dots & x_k & 0 & 0 & \dots \end{bmatrix}$。

我们要说明,$x_1$ 到 $x_k$ 对应的 $A$ 中的列,是线性相关的。如果 $k > m$ 显然这 $k$ 列线性相关;如果 $k \le m$ 但这 $k$ 列线性无关,那么我们就可以把这 $k$ 列当作 $A_B$(如果 $k < m$ 就再选几个线性无关的列,凑成 $m$ 个),就能构造出一个基可行解。所以这 $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$$ 一下子就变成了线性规划问题,感觉这个操作非常厉害...

时间: 2024-08-03 22:33:02

应用运筹学基础:线性规划 (1)的相关文章

【运筹学基础】——宏观总结

宏观大图: 简单来说,运筹学这本书,理论挺好懂的,计算部分太多了,需要动手去做.在运筹学的科学理论指导下进行决策. 我将本书分为了三个部分:决策程序,库存管理,以及决策方法. 在决策程序阶段,一看步骤我就想起了信息系统开发管理编的知识网,系统开发步骤啥的.既然是步骤,那肯定都会有模板的,就例如这个决策程序步骤吧! 首先,我们要确定要决策的问题目标,然后针对这个问题拟定可行的解决方案,拟定好方案后,就要对这些方案进行预测,然而预测也要有一定的步骤(略过).无论是谁都会很在意盈亏的,预测完就要进行盈

【运筹学基础】——导论

导图: 总结: 第一章导论,主要讲了三部分.分别是: 一.什么是运筹学 在运筹学的解释中,我们定好3个关键词,就可以解决这个问题了. 利用,干什么,目的(通过--为--提供依据) (1)利用计划方法和有关学科要求 (2)把复杂功能关系转换为数学模型 (3)其目的是通过定量分析为决策和揭露新问题提供数量依据. 二.定量分析与定性分析 量与性的问题. 性通过主观经验来分析解决问题 量通过计量方法来解决问题,一般是复杂重要的问题,以及重复简单的问题. 三.用运筹学的知识去解决决策的六个步骤 我将六个步

【运筹学基础】——预测

本章的重点是在讲方法,这些方法基本上都是用计算去解决,所以我就总结了一下方法. 一.定性 简单来说,定性预测方法有两个,一个是背对背(特尔斐),另一个是面对面(专家小组) (1)特尔斐法:在专家群中取得比较一致的意见,匿名发表意见. 程序: 1.定课题 2.选专家 3.设计咨询表 4. 逐轮咨询,信息反馈 5.统计分析 适合长期或中期预测 (2)专家小组法:接受咨询的专家自由结合成小组讨论. 优:相互协商,讨论补充. 缺:被权威人士左右观点. 主要适合于短期预测. 二.定量 定量预测部分是需要用

应用运筹学基础:组合优化 (2) - 一类问题的贪心解法

这一节课讲解了被称为独立系统的一类问题,以及用贪心解决独立系统问题的近似比. 独立系统 考虑一个有限元素集合 $E$,给 $E$ 中的每个元素 $e$ 定义一个非负的费用 $c(e)$.再考虑 $\mathcal{F} \in 2^E$,那么对于 $F \in \mathcal{F}$,我们定义 $F$ 的费用 $c(F) = \sum\limits_{e \in F} c(e)$.现在我们要找出一个 $F$,使得 $c(F)$ 最大(或最小).这就是这节课我们需要考虑的一类问题. 独立系统 从

应用运筹学基础:组合优化 (6) - 近似算法选讲 (4)

这节课介绍了斯坦纳树问题(Steiner tree)与旅行商问题(TSP),并讲解了它们的近似算法. 平面上的斯坦纳树 平面上的斯坦纳树指的是这样的问题:平面上有 $n$ 个点,要用总长尽量少的线段把它们连通起来.要注意,线段不一定要在给定的 $n$ 个点相交(不然跑个最小生成树就没了),完全可以在平面上的其它点相交.最优解中,线段在平面上除了给定点外的交点称为斯坦纳点. 可以从上图看出 $n = 3$ 和 $n = 4$ 的情况,$S$.$S_1$ 和 $S_2$ 是斯坦纳点.$n = 3$

数学分支(转)

1数论 2代数学 3几何学 4拓扑学 5函数论 6泛函分析 7常微分方程 8偏微分方程 9数学物理 10概率论 11组合数学 12数理逻辑与数学基础 1-数论 a-初等数论 b-解析数论 c-代数数论 d-超越数论 e-丢番图逼近 f-数的几何 g-概率数论 h-计算数论 i-数论其他学科 2-代数学 a-线性代数 b-群论 c-域论 d-李群 e-李代数 f-Kac-Moody代数 g-环论包括交换环与交换代数-结合环与结合代数-非结合环与非结合代数等 h-模论 i-格论 j-泛代数理论 k-

数学&#183;包含学科

14 逻辑与基础 ? 1410:演绎逻辑学 ? 1420:证明论 ? 1430:递归论 ? 1440:模型论 ? 1450:公理集合论 ? 1460:数学基础 ? 1499:数理逻辑与数学基础其他学科       17 数论 ? 1710:初等数论 ? 1720:解析数论 ? 1730:代数数论 ? 1740:超越数论 ? 1750:丢番图逼近 ? 1760:数的几何 ? 1770:概率数论 ? 1780:计算数论 ? 1799:数论其他学科   21 代数学 ? 2110:线性代数 ? 211

数学·包含学科

14 逻辑与基础 ? 1410:演绎逻辑学 ? 1420:证明论 ? 1430:递归论 ? 1440:模型论 ? 1450:公理集合论 ? 1460:数学基础 ? 1499:数理逻辑与数学基础其他学科       17 数论 ? 1710:初等数论 ? 1720:解析数论 ? 1730:代数数论 ? 1740:超越数论 ? 1750:丢番图逼近 ? 1760:数的几何 ? 1770:概率数论 ? 1780:计算数论 ? 1799:数论其他学科   21 代数学 ? 2110:线性代数 ? 211

名校计算机科学与技术专业培养方案

PS:清华大学计算机科学与技术专业本科生培养方案 计算机科学与技术(0812) 一.研究方向 1.通信软件工程 2.网络技术与应用 3.分布计算理论与技术 4.信息安全与多媒体技术 二.课程设置 类别 课程编号 课程名称 学时 学分 学期 学位课 公共必修课 512.8*704 自然辩证法概论 54 2 秋 521.8*300 科学社会主义理论与实践 36 1 春 534.8*445 英语 144 4 秋/春 基础理论课(至少选1门) 813.8*279 近世代数及其应用 54 3 秋 513.