Skip to content

算法Algorithm

Seidel 二维线性规划

Seidel linear programming · Seidel randomized LP · Seidel 低维线性规划

随机加入半平面,在当前最优点被排除时降为边界上的一维区间问题,并用符号框区分不可行、有限最优和目标无界。

形式陈述 ​

三种输出,不能只返回一个点 ​

输入有理数半平面 aix+biy≤di 和目标 cxx+cyy,求二维线性规划的最大值。允许没有约束、重复约束、平行边界、零法向量,以及退化成直线、线段或单点的可行域。输出分别是:

  • infeasible:原系统无可行点,同时给出至多三条已矛盾的输入约束 ID;
  • optimal:一个满足原系统的点及有限最优目标值;
  • unbounded:可行起点 p 和方向 v,满足 aivx+bivy≤0 且 c⋅v>0,所以 p+tv 对所有 t≥0 可行并持续改进。

可行域无界并不意味着目标无界,例如 x≤0 上最大化 x,最优值仍为零。算法必须按照目标方向分类。

不选“大数”,保留形式参数 ​

先研究额外受 [−M,M]2 限制的问题,其中 M 是趋于正无穷的形式参数。每个中间坐标写成

u+Mv,

只保存两个有理系数。比较 u1+Mv1 与 u2+Mv2,先比较 v1,v2,相同才比较 u1,u2,这恰是对所有充分大 M 的数值次序。没有把某个有限机器数冒充无穷。

在可行区域中按 (c⋅p,px,py) 的字典序取最大点。这使每个约束集合都有唯一规范答案;目标并列时再取最大的 x、再取最大的 y。字典序只规定输出选择,不移动输入半平面。形式框保证每个有限 M 的问题不是不可行就是取得规范最优点。[1, §2 与 Appendix]

随机增量与一维修复 ​

把约束 ID 均匀随机排列。尚无约束时,形式框的最优角点可由目标两个系数的符号得到:正系数取 M,负系数取 −M,零系数按坐标并列规则取 M。保持当前点是已处理前缀的规范最优点。

读入半平面 h:ax+by≤d。若当前点满足它,答案不变;若违反,则新的最优点一定在直线 ax+by=d 上。取该线一个有理点 p0 和非零方向 v=(−b,a),写

p(t)=p0+tv.

每条旧半平面 αx+βy≤γ 化为

(αvx+βvy)t≤γ−α(p0)x−β(p0)y.

系数为正给上界,为负给下界,为零则检查右端非负。还要加入形式框的四条约束;它们的右端含 M,所得上下界仍是仿射式。扫描求最大的下界 ℓ(M)、最小的上界 u(M)。若 ℓ>u 或出现矛盾常数行,就返回不可行;否则看

(c⋅v,vx,vy)

中首个非零分量的符号:正则取上端,负则取下端。方向 v≠0,所以总能作出选择。这样一次二维失败只需一遍一维边界扫描,不必构造整个多边形。

直觉

为什么只需在新边界上找 ​

旧最优点 z 违反新约束。假如新最优点 z′ 严格位于新半平面内部,沿 z′ 朝 z 移动一小段仍满足新约束;旧约束和框也因凸性保持满足。z 的字典序目标优于 z′,而每个比较分量都是线性的,所以这段移动会严格改进第一个不同的分量,矛盾。

证明可先对每个足够大的有限 M 作出,再用仿射式的最终次序实现。它并不要求新的可行域有正面积:若交集只剩点或线段,区间上下界相等的情况仍被保留。

违反后的边界修复

把符号答案变回真实点 ​

设最终形式点为 p(M)=u+Mw。对每条原约束 ai⋅p≤di,记

si=ai⋅w,ri=ai⋅u−di.

最终可行性保证 si≤0,且 si=0 时 ri≤0。对 si<0 的行,只需 M≥ri/(−si)。因此可取

M0=⌈max(1,maxsi<0ri−si)⌉,p0=u+M0w.

这个 p0 对全部原约束真实可行。即使目标不随 M 增长,也不能直接返回 u:某些约束可能正是靠 M0w 才得到满足。

若 c⋅w>0,p0,w 就给出严格改进射线。若 c⋅w=0,目标恒为 c⋅u,而任意原系统可行点在充分大的框中都出现,故其目标不超过这个值;p0 达到该值,证明有限最优。c⋅w<0 不会出现,因为扩大框不会降低最优目标。判断依据是 c⋅w,不是 w 是否为零。

例子与边界

三次修复到达 (3,2) ​

最大化 3x+2y,约束为

x≤4,y≤3,x≥0,y≥0,x+y≤5,2x+y≤8.

按输入 ID 从零编号。附件种子7给出顺序 [4,0,5,3,1,2]。初始点为 (M,M),前三次修复如下:

新约束 降维后的选择 新规范最优点
x+y≤5 在线上最大化 x+10,取框允许的最大 x (M,5−M)
x≤4 在 x=4 上取最大 y≤1 (4,1)
2x+y≤8 令 y=8−2x,目标 16−x,由 x+y≤5 得 x≥3 (3,2)

最后三个约束都已满足。最优值为 13;把 x+y≤5 与 2x+y≤8 各乘一后相加,得到 3x+2y≤13,而 (3,2) 取等号。这份两行对偶证书可脱离随机轨迹单独核验。

w≠0,目标仍有限 ​

约束 x≤0,y≥100,目标最大化 x。规范形式答案是 (0,M),故 u=(0,0),w=(0,1)。这里 u 违反 y≥100;按全部约束计算得到 M0=100,输出真实最优点 (0,100),目标为零。

若没有任何约束且目标为零,形式答案为 (M,M),w 同样非零,但任意点的目标都是零。若改成最大化 x,同一形式方向的目标斜率变为一,才得到无界。这两个测试能直接抓出“见到非零 w 就报无界”的错误。

空集、平行与低维 ​

零法向量约束 0x+0y≤d 在 d≥0 时恒真,在 d<0 时单独证明不可行。x≤0 与 x≥1 是两条平行矛盾约束;x≤0 与 x≥0 却只是把可行域压成直线,不能因为平行就报空。

三条 x≤0,y≤0,x+y≥1 共同不可行,任意两条都可行,展示了为何一般二维不可行证书可能需要三条。边界扫描发现上下界矛盾时,返回当前边界与两条产生冲突界的约束;若涉及形式框,只保留其中的原输入行。为什么把当前边界等式改回原不等式后仍然矛盾?旧规范点满足那两条旧行,却违反当前半平面;如果保留的原行还有一个新可行点,两点间的线段必在当前边界上相交,并仍满足两条旧行,反而得到被区间检查排除的边界可行点。若涉及形式框,先取足够大的 M,让假定的新可行点也在框内;旧规范点本就在框内,同一线段论证仍成立。

推论与应用

修复很贵,为什么总期望仍线性 ​

在一个固定的可行前缀集合里,规范最优点可以由至多两条原约束加固定背景框决定。退化时基可能不唯一,但任何删除后会改变答案的约束必须属于每一份基,所以至多两条。不可行前缀则由 Helly 定理得到至多三条原约束的矛盾证书;任何删除后恢复可行的约束也必须在该证书中。

把进入第 i 项之后的前缀集固定,其最后一个 ID 均匀分布于这 i 项。触发昂贵修复时,删去最后一项会改变规范答案或可行状态,所以概率至多 3/i。一次修复扫描 i−1 条旧约束及四条框约束,因而

E[边界扫描工作]≤C∑i=1n3i(i+3)=O(n+1).

加上打乱、普通违反测试和计算 M0,二维核心期望为 O(n+1) 次算术操作,存储为 O(n+1)。遇到不可行立即停止只会减少成本;分析时可以把此后状态视为一直不可行。随机性只改变工作量,返回的三类结果都满足精确规格,这是 Las Vegas 算法。

在一般 d 维中,违反一条约束后进入 d−1 维,经典分析出现 d/i 的概率因子及递归求解成本,固定维数期望线性的常数呈阶乘量级。[1, Theorem 1] 本页实际执行器只实现二维,不能把二维的区间扫描直接当作任意维的常数时间子程序。

核心、证书提取与位成本分别计 ​

不可行时的小矛盾 ID 在边界扫描中直接留下;无界射线直接来自 w。有限最优值还可另求非负乘子 λi,使 ∑λi(ai,bi)=c 且 ∑λidi=c⋅p0。附件的额外证书器枚举最优点处的单条/成对紧法向量,最坏 O(n2) 次算术操作;这项可选的通用提取不能藏进线性核心时间里。

所有分支采用 精确有理谓词。每个候选点由至多两条原边界或形式框边界求交得到,二维公式与每条原行的比较只涉及常数个输入系数。输入每数至多 L 位时,约分后的几何数、形式系数和 M0 都为 O(L) 位;若含约分的有理运算成本为 A(L),核心期望几何成本为 O((n+1)A(L)),还须计 ID、打乱和随机位操作。

完整执行器附有直接枚举形式框顶点的独立小实例解法。其三重枚举和逐前缀审计用于检查,均没有包含在核心线性界中。终结任务要求同时交出有限目标、空集和严格改进射线实例,而不是只测一个漂亮多边形。

参考资料
  1. Raimund Seidel,“Small-Dimensional Linear Programming and Convex Hulls Made Easy”,Discrete & Computational Geometry 6,1991,§2 印刷 pp.424–426;Appendix pp.432–433:随机约束降维、规范选择及仿射符号框。本文最终分类显式核目标斜率,并扫描原约束构造有限可行起点。
  2. Kenneth L. Clarkson,“Las Vegas Algorithms for Linear and Integer Programming When the Dimension Is Small”,1995,§2.1,印刷 pp.489–490:可行性、规范解与无界射线需分别定义。
关系图谱7 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系