形式陈述
单纯形法 公理库 单纯形法 Simplex method 沿可行多面体顶点与边枢轴移动求解线性规划的方法。 已经求出 LP 最优基,但某个应当取整数的基本变量却是分数。能否只看这一行,就自动构造一条保留全部整数解、却切掉当前基点的不等式?
考虑纯整数标准型:所有基本与非基本变量都要求非负整数。若原模型含整数系数不等式和整数右端,其松弛变量也必须一并视为整数变量。设当前一行写成
x B = β − ∑ j ∈ N a j x j , β ∉ Z . 定义分数部分 f ( t ) = t − ⌊ t ⌋ ∈ [ 0 , 1 ) 。对应的 Gomory 分数割 是
∑ j ∈ N f ( a j ) x j ≥ f ( β ) . 所有系数从精确的有理 tableau 行计算。公式中的 a j 是写在减号后面的系数,不能把等式右侧显示的带符号项不经转换就套入另一种约定。
当前基点令所有非基本变量为零,割左侧为零,右侧严格为正,所以必被切除。与此同时,原行的每个非负整数解都满足此割。
直觉
把系数拆成整数部分与分数部分,并把原行移项,可得
x B + ∑ j ⌊ a j ⌋ x j − ⌊ β ⌋ = f ( β ) − ∑ j f ( a j ) x j . 左边是整数,因此右边也是整数。令 s = ∑ j f ( a j ) x j ;由于 f ( a j ) ≥ 0 、x j ≥ 0 ,有 s ≥ 0 ,而 s − f ( β ) 是整数。既然 0 < f ( β ) < 1 ,s 不可能落在 [ 0 , f ( β ) ) 中,只能满足 s ≥ f ( β ) 。
这个推理有两根支柱:整数变量使分数余数只能按整步改变,非负变量阻止左侧落到负的一支。割并没有猜测某个未知整数最优解在哪里,而是对原行的全部整数解同时成立。
图片加载失败 tableau 分数部分给出割
例子与边界
一行、一个分数基点、一条新边界
取
x B = 3 2 − 1 2 x 1 − 1 4 x 2 , x B , x 1 , x 2 ∈ Z ≥ 0 . 当前基点为 ( x B , x 1 , x 2 ) = ( 3 / 2 , 0 , 0 ) 。分数割为
即 1 2 x 1 + 1 4 x 2 ≥ 1 2 , 即 2 x 1 + x 2 ≥ 2. 原行乘四后是 4 x B + 2 x 1 + x 2 = 6 。例如 ( x B , x 1 , x 2 ) = ( 1 , 1 , 0 ) , ( 1 , 0 , 2 ) , ( 0 , 3 , 0 ) , ( 0 , 2 , 2 ) , ( 0 , 1 , 4 ) , ( 0 , 0 , 6 ) 都合法,并满足割。当前非基本原点 ( 0 , 0 ) 却违反 2 x 1 + x 2 ≥ 2 ,所以重新求 LP 时不能再停在原分数基点。
这条割对当前行所允许的整数点有效,因而也对满足全部原约束的整数点有效。它可能没有描述完整整数包 公理库 整数多面体与整数包 Integral polyhedron · Integer hull 区分整数点、整数包和整数多面体,说明何时所有线性目标都能由整数解达到,以及无顶点情形为何需要额外小心。 ;排除一个基点之后,其他分数顶点仍可能留下。
负系数必须向下取整
若某个 a j = − 1 / 4 ,其分数部分是
f ( − 1 / 4 ) = − 1 / 4 − ( − 1 ) = 3 / 4 , 不是 − 1 / 4 ,也不是零。向零截断会破坏 f ( a j ) ≥ 0 ,原证明的关键一步随之失效。实现中应使用数学 floor,尤其注意编程语言的整数除法在负数上的约定。
若 f ( β ) > 0 ,却所有 f ( a j ) = 0 ,所得割是 0 ≥ f ( β ) ,直接证明该行没有整数解。这不是一条“太强”的错误割,而是整数等式右端与左端的同余冲突。
连续变量为何不能照搬
考虑 x B = 3 / 2 − ( 3 / 2 ) z ,其中 x B 要求非负整数,但 z 允许非负实数。取 z = 1 / 3 ,得到合法点 x B = 1 。若误用纯整数分数割,会要求 ( 1 / 2 ) z ≥ 1 / 2 ,即 z ≥ 1 ,反而删掉这个合法点。
失效原因是 ⌊ 3 / 2 ⌋ z = z 不再是整数,前面的整数同余推理不能成立。混合整数问题需要 Gomory mixed-integer 或其他适配连续变量的割,不能仅把纯整数公式里的变量类型注释改掉。
推论与应用
一条含 q 个非基本系数的行,提取割需要 O ( q ) 次分数部分计算和写出操作;有理数的位成本另计。把割加入 LP 后还要重新优化,其成本不能记作这 O ( q ) 的一部分。新割往往使当前基失去原始可行性,而可以利用对偶单纯形等方法重优化,具体仍取决于选取的标准型和基状态。
反复“选一行、加一刀”并不自动附带有限终止或多项式时间保证。Gomory 的有限算法需要规定选行、枢轴与防循环策略;只给出有效割公式,证明的是本次删点正确,而不是任意割序列都会快速到达整数最优。
LP 舍入 公理库 线性规划松弛与舍入 LP relaxation and rounding 放宽整数可行域获得可计算界,再把分数解舍入为可行组合解。 把一个分数解送回整数可行域,并分析目标损失;这里保持全部整数可行点不变,收紧的是松弛域。Chvátal–Gomory 闭包 公理库 Chvátal–Gomory 割与闭包 Chvátal–Gomory cut · CG closure · Chvátal rank 用全部整数法向的支持值取整定义表示无关的闭包,并以精确四轮例子同时证明 Chvátal rank 的上界和下界。 则把一整族有效取整割同时相交,研究多轮后还剩下什么几何区域。分支切割法 公理库 分支切割法与局部割作用域 Branch and cut 把有效割嵌入分支定界,在提高松弛上界的同时记录每条局部割的祖先作用域,交出可逐结点核验的最优证书。 在搜索树中选择性加入这些割,还必须记录它们是否依赖当前分支条件。
参考资料
Ralph E. Gomory, “Outline of an Algorithm for Integer Solutions to Linear Programs”, Bulletin of the American Mathematical Society 64(5), 1958, pp. 275–278,尤其 pp. 276–277 的分数行构造和有效性证明:原论文副本 。
Ricardo Fukasawa, “Gomory Cuts”, 2010 encyclopedia author proof, pp. 1–2, “Gomory’s Fractional Cuts”:作者稿 。非负纯整数条件、分数部分推导以及与混合整数割的区别。