应用运筹学-线性规划应用
- 我在大三春夏学期上了张国川老师的《应用运筹学基础》这门课。
- 张国川老师坚持板书讲解,课上干货满满,是不可多得的好老师。
- 我本来是在 TSR 学长的博客 的基础上补充知识点的。张老师在期末时把“上课笔记整理”也作为了考核方式之一,于是我把 TSR 学长的部分内容也结合进来了。
- 这篇文章是系列之二,还有两个系列分别是:
原始对偶方法
-
基本思想:
- 灵活运用了互补松弛条件 且 .
- 给出一组对偶的解,强行去满足互补松弛条件。每次观察 是否满足原问题的约束,若不满足就不断地修正 。
-
原始对偶算法 流程
- 我们先列出原问题(P)的对偶问题(DP),并找到 的一组可行解。
- 如果 ,直接取 即可。
- 否则我们给原问题增加一个变量与一条约束 ,其中 需要足够大,至少要大等于 可能的最大值。
- 加入新约束后,对偶问题的约束变成了 ,目标函数变成了 。取可行解
- 现在我们需要寻找一个原问题的可行解 满足互补松弛定理。设 表示矩阵 的第 列,定义 。根据原问题的定义和互补松弛定理,我们想要找到符合要求的 使得 且 。
- 构造一个带限制的原问题(RP)。如果 RP 的目标值取 ,我们就找到了符合要求的 。
- 再构造 RP 的对偶问题(DRP),设 是DRP的最优解。显然 是一组可行解,若其也是最优解,则当前对偶可行的 就是对偶问题的最优解。
- 若 目前不是最优解,则 ,我们想办法用 改进 :设 (其中 )。注意到, 仍然需要是对偶可行的,即 仍要满足。
- 考虑 的取值范围。对于 ,因为 ,无论 取多大,都不会超过 的限制,所以这些项不会限制 的取值;对于 ,我们选择 。这样就能让 中的一条限制变紧,且其它限制则不会超过。
- 将 调整为 之后,进入下一轮迭代调整,直到 DRP 的最优解让目标函数值为 0
- 我们先列出原问题(P)的对偶问题(DP),并找到 的一组可行解。
-
经典例子:最短路问题
- 我们用图的点 - 弧关联矩阵表示 到 的线性规划问题。因为矩阵 是全幺模矩阵,解出的实数最优解必然是整数解。下面我们尝试用原始对偶方法解这个线性规划。
- 矩阵显然是线性相关的(把 的每一行加起来得到零向量)不妨从 中去掉代表终点 的那一行,得到新矩阵 。即新的线性规划是原问题(P)。
- 我们写出对偶问题(DP)(它其实就是差分约束系统)和带限制的对偶问题(DRP)。
- 这个 DRP 非常得清晰。如果想要让 取成 ,必须保证 也在和 相关的连通块(右 的 组成的连通块)里。所以我们不断更新 ,每次把 里的点的 集体提升到尽可能的大。每次提升 里的元素单调增加,复杂度为 。
-
对偶问题 DP 优化的函数值就是最短路的直接证明(作业题)
- 找到 到 的任意一条最短路。向量 满足: 是这条最短路从 到 经过的边的权值和,同时记 .
- 设向量 是该对偶问题取到最大值时的一组解,记 为最大值。
- 因为 表示一条最短路,由最短路性质,我们发现 是满足上述线性规划限制的一组可行解。由 是一组最优解,所以 .
- 现在只需证明 即可说明 。反证,假设 .
- 由 , 表示的最短路径上必然存在一条边 ,满足 . 所以 . 因为 表示最短路径,所以 ,即 ,这和 是该线性规划的一组可行解矛盾。所以假设不成立,即 。
- 最终我们得到 ,原命题得证。
整数线性规划
-
TSP 问题
- 考虑如何用线性规划表示
- 其中 , 当且仅当 是环上的相邻两点。
- 尝试更形式化地表达
- 构成环的必要条件: 且 。
- 若只有这两个限制,会导致多个不相交圈的情况:要强制让所有点都与 号点同圈。
- 因此,新增 这 个辅助变量并加一个新约束:,其中 .
- 证明以上约束的正确性
- 对于一个多圈的解,必然存在一个圈不包含 。沿圈上走一圈,上述限制 都会取 。将这些不等式全部加起来,会得到 ( 是圈的长度),产生矛盾。说明必然有约束不能满足。
- 对于一个单圈的解,一种 的可行取法是:,其中 表示TSP问题里从 出发顺次访问到的第 个点。对比上一条,约束能满足的原因是: 是从 开始取的, 到 是没有限制的。
- 对于不在圈上的边,,即 。审视上一条,最大的 也是 ,所以可行。
- 就像是每个点在环上的“势”,可以集体地增减。我认为只要限制 就能正确地求出一组解(无需 是整数的限制,因为也可以 全体是实数)。如果加一条适当的限制(如 ),跑出来的最优解必然是整数。
- 考虑如何用线性规划表示
-
01 背包
- 线性规划模型
- 贪心解及其近似度分析
- 朴素贪心做法:将物品按 从大到小排序,依次塞入背包直到装不下。
- 该算法近似比是无穷大,分析如下:
- 我们求上述线性规划的实数解,记为 。
- 观察 解的结构:性价比前 大的物品一定是完整地取走,剩下的某一个物品取了“分数”个(可以用调整法证明)。不妨设前 个物品的总价值是 ,剩下取的那个物品价值是 ,我们可以得到
- 基于以上分析,贪心解近似比
- 若前 个物品体积和是 、单位价值是 ,剩下选的物品是 、,则
- Trick:我们修改一下上述贪心做法:当 时我们只取后者。这样 ,近似比为 ,即近似比为 .
- 近似做法
- 朴素反向背包算法:设 表示前 个物品中,选的价值总和恰好是 ,最少需要的空间。直接做的复杂度是 ,能得到最优解。
- 现在对价值进行 Scaling:把每个物品的价值调整成 后再DP, 是某个常数。
- 下面证明:该 Scaling 做法是完全多项式算法。
- 完全多项式算法:既是读入规模的多项式,也是近似比 的多项式。
- 设原问题最优集合是 ,答案是 ;小规模问题最优集合是 ,答案是 .
- 令 ,则 ,且复杂度是
- 线性规划模型
-
匹配问题
- 设图的点集为 ,边集为 , 表示从第 个点连到第 个点的一条有向边, 表示这条边是否为匹配边。那么一般无向图的最大匹配问题可以写成:
- 且
- 其中 。
- 我们也可以用图的点 - 边关联矩阵来描述匹配问题。设图中有 个顶点, 条边,那么图的点 - 边关联矩阵是一个 的矩阵。该矩阵每列对应一条边,每行对应一个顶点。若第 个顶点是第 条边的端点,那么矩阵第 行第 列为 1,否则为 0(可以看出,这个矩阵描绘的是无向边)。这样,一般无向图的最大匹配问题写为:
- ,其中 .
- 注意,用线性规划求解二分图的最大匹配问题,最优解的 取值非 0 即 1。因为可以证明(数学归纳法),二分图的点-边关联矩阵是全幺模矩阵。
- 二分图最大匹配的对偶问题是二分图的最小点覆盖。
- 设图的点集为 ,边集为 , 表示从第 个点连到第 个点的一条有向边, 表示这条边是否为匹配边。那么一般无向图的最大匹配问题可以写成:
-
Gomory 割平面法
- 基本思想:不断增加限制平面,直到某一次求得的最优解为整数。
- 若我们用单纯形法求解后获得的不全是整数解,选择一个非整数的变量 ,其必然满足:
- 既然 不是整数且 ,说明 一定不是整数,则加入以下限制不会影响原来的整数解空间:
- 现在我们就多了②这个限制,把它加进约束里进一步求解即可。一般我们会加入①-②,这样限制更简单些:
- 现在我们就多了②这个限制,把它加进约束里进一步求解即可。一般我们会加入①-②,这样限制更简单些:
-
分枝定界法
- 分枝定界法的思想和最优性剪枝或者 min-max 搜索树类似。
- 我们先解实数线性规划,得到了整数规划最优解的上界。假设最优解中 不是整数,就会有两种可能: 或 ,对两种情况分别进行搜索。
- 如果在某一枝内算出了一个整数解,我们就得到了原整数规划最优解的下界。
- 某个搜索分支结束有三种可能:
- 当前线性规划无可行解(死枝)。
- 当前(实数)最优解未超过下界(枯枝)。
- 当前已经是整数解(活枝)。
基于线性规划的近似算法
-
带权点覆盖问题的LP解法
- 设 表示第 个点是否选,我们可以列出一个整数线性规划问题;每条边 即为一个限制 ,目标函数即为 .
- 将这个线性规划一般化: 。这样能在多项式内求出一个最优解 ,其优于原来的最优解。
- 现在我们把 对应的 做这样的改动:(四舍五入)。
- 显然, 也是符合该线性规划的一组解(对于任意一组限制,至少存在一个 ;这时候对应的 取成 ,满足限制要求)
- 然后,每一个取 的 增幅最多只有 ,即新的 满足 。
- 所以该做法的近似度是 。
-
带权点覆盖问题的对偶解法
- 接下来这种 2-近似做法只需用到原始对偶的思想,可以避开线性规划求解。
- 原问题的对偶问题是:求 ,使得对于所有的 , 且 .
- 列出互补松弛条件
- PCS:
- DCS: 其中
- 在整数线性规划上考虑一个弱化后的互补松弛条件:
- PCS成立: 或 且
- DCS不太差: 或 且
- 首先我们证明:若该条件成立,近似比为 ( 表示原问题的最优解)。
- 算法
- 初始设 ,所有边未标记。此时 不可行但是 可行。
- 任选一条未标记的边 ,增加 的值直到某一端点 约束变紧。
- 设 ,将 放入顶点覆盖集,并把与 相关的边都标记。
- 重复以上两步直到所有边都被标记。
- 引用 MCL 大佬的图
-
Unrelated Parallel Machine Scheduling 问题
- tsr 的 UPMS问题讲解
- 有 台机器和 件物品,每件物品都要在一台机器上加工,第 台机器加工第 件物品的时间为 。求一种把物品分配给机器的方案,使得加工总时长最长的机器加工时间最短。
- 优化模型很简单:
- 注意到 有二分性。现在我们二分 ,每次直接解实数线性规划来判是否存在可行解。设最终稳定的值是 ,对应的实数解是 。显然 是答案的一个下界,即 .
- 对于第 件物品,若 那么称该物品为“整数物品”,否则称为“分数物品”。设共有 个“整数物品”, 个“分数物品”,显然有
- 若第 件物品为“分数物品”,那么 中至少有两个非零值。原问题有 条限制,根据单纯形法,非零的变量至多有 个,那么 ,得到 。
- 下面我们给每台机器分配物品,使得每台机器的加工总时长都不超过 ,以此说明近似比是 。
- 先做一个小处理:把用时大于 的物品都移除(显然是等价的)。
- 构造一张二分图:左边有 个点,每个点表示一台机器;右边有 个点,每个点表示一件物品。若 则连接第 台机器和第 件物品。
- 一个重要的性质:该二分图边数不超过点数。
- 首先考虑“整数物品”。很显然,每个“整数物品” 都只和一台机器 有连边 ,那就把“整数物品” 放在机器 中加工,并去掉物品 和边 。由于每次恰好去除一个点和一条边,性质依然成立。
- 这样,图中就只剩机器和“分数物品”了。考虑所有度数为 的机器 。假设唯一连接机器 的边是 ,那么我们把“分数物品” 放在机器 中加工,并去掉机器 、物品 和物品 的所有连边。由于每件“分数物品”都有至少两条连边(度数至少为 2),所以我们每次都会去掉两个点以及至少两条边,性质依然成立。
- 反复操作直到最后不存在度数为 的机器为止,剩下的图一定是由若干个偶环构成。所以从始至终,我们总能通过合理分配,使得每台机器至多分配到一个“分数物品”。每台机器在完成原来若干整数任务的同时,独立地把分配给自己的那个“分数物品”做完。注意一件物品的加工时间至多为 ,所以现在的用时最多是 。
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.