整数线性规划问题的分类与特点
在很多实际决策中,决策变量代表不可分割的实体数量(如机器台数、车辆数、员工人数等),因此变量必须取整数值。我们称此类数学规划为整数线性规划(Integer Linear Programming,简称 ILP)。
1. 整数规划分类
- 纯(全)整数线性规划:所有决策变量都限制为非负整数。
- 混合整数线性规划(
MILP):仅有一部分变量限制为整数,其余可取连续实数值。 - 0-1 整数线性规划:所有决策变量只能取 0 或 1。
2. 舍入凑整法的失效性
通常不能简单地将松弛后的普通线性规划(即舍去“变量为整数”约束后的 LP 问题,称为松弛规划)的最优解进行四舍五入凑整:
- 凑整后的点极有可能超出可行域,变成非可行解。
- 即使凑整后仍是可行解,它往往也不是最优整数解(整数最优解不一定是松弛解邻域内的点)。
求解算法 1:分支定界解法(Branch and Bound)
分支定界法是求解纯整数和混合整数规划的标准有效算法(隐枚举法的一种)。
1. 算法核心原理
- 上界与下界: 对于极大化 整数规划问题,其松弛规划的最优目标值 构成了整数规划最优解 的上界(即 )。任意已知的整数可行解的目标值则构成 的下界。
- 分支(Branching): 若当前松弛解中某变量 不是整数,则以两个不重叠的不等式为约束分裂为两个子问题:
- 定界(Bounding)与剪支(Pruning):
对新生成的子问题求解松弛规划:
- 若子问题的松弛最优值小于等于当前已知的下界,则该支不可能包含更好的整数解,予以剪支(抛弃)。
- 若子问题无可行解,予以剪支。
- 若子问题的松弛解刚好全部满足整数约束,则用其更新下界,并对该支进行剪支(因已找到该分支的最优整数解,无需再分)。
- 否则,用子问题的最优值更新该支的本地上界,继续对其分支。
- 重复上述过程直到所有分支被剪除,当前下界对应的整数解即为最优解。
求解算法 2:割平面解法(Gomory Cutting Plane)
1. 算法核心思想
先求解不含整数约束的松弛规划,若最优解为非整数,则通过数学代数关系构造一个割平面约束(Gomory 切割)并添加到模型中。该约束会割去包含当前非整数最优解的部分可行域,但保证不割掉任何整数可行解。新问题求解后通常会得到非可行解(右端项出现负数),需使用对偶单纯形法快速重新求解,重复此过程直至解为整数。
2. 切割方程的代数推导步骤
在最终单纯形表中,设某个基本变量 的值为非整数: 将系数和常数项拆分为整数部分 与非负真分数部分 (满足 ): 带入方程移项整理: 由于左侧各项在整数约束下必须是整数,故右侧的值也必须是整数。又因为 ,且 ,所以右侧的整数最大只能为 0。由此得到切割方程: 引入非负松弛变量,使用对偶单纯形法求解,即可在不损失任何整数解的前提下排除非整数最优解。
0-1 变量的应用与建模技巧
引入 0-1 决策变量 能够为复杂的逻辑关系进行线性建模。
1. 互斥项目选择(投资场所选定)
- 从 中至多选两个:。
- 从 中至少选一个:。
- 前提条件约束:选择项目 5 的前提是选择项目 1,则有: (若 ,则 必须为 0;若 , 可为 0 或 1)。
2. 互斥约束条件建模
若两个约束条件 与 是互斥的(即只需满足其中一个即可,另一个自动失效)。 引入一个 0-1 变量 和一个极大常数 :
- 若 ,第一式有效,第二式由于加上 自动失效。若 ,则反之。
- 推广到 个互斥约束中必须满足 个:
3. 固定费用(Fixed Charge)建模
生产产品 时,若产量 ,需支付固定设备成本 ;若不生产()则不支付。总成本为: 必须建立产量 与 0-1 状态变量 的关联约束: 其中 为该产品产量的物理上限。
指派问题与匈牙利法(Hungarian Method)
1. 指派问题数学模型
有 项任务指派给 个人分别完成,每人只能做一项。设 表示是否指派第 人做第 项任务,效率矩阵为 。要求总时间或总成本最小:
2. 匈牙利法求解步骤
匈牙利法基于的核心矩阵定理是:“在效率矩阵的某行(或列)同加减一个常数,最优解不变”。
- 矩阵归零:每行减去该行最小值;随后每列减去该列最小值。使各行各列均出现 0 元素。
- 试指派与独立零元素寻找:
- 从含 0 元素最少的行(或列)开始,给唯一的 0 加圈(◎),并划去同行、同列的其他 0 元素(标为 )。
- 重复直至所有 0 被处理。
- 若圈出的 ◎ 个数 ,则这些 ◎ 对应的变量为 1,即得最优解。若 ,进入第 3 步。
- 覆盖打勾与覆盖线绘制(寻找最少覆盖直线 ):
- 对没有 ◎ 的行打“”。
- 对已打“”的行中所有含 的列打“”。
- 对已打“”的列中含有 ◎ 的行打“”。
- 重复上述两步。
- 划线:对没有打“”的行画横线,对打“”的列画纵线。最少直线数即为 。若 且 ,说明试指派有误,重新寻找独立零;若 ,进入第 4 步。
- 矩阵重构(增加零元素):
在没有被任何覆盖线压住的元素中找出最小值 。
- 所有未被覆盖的元素减去 。
- 线与线交叉点的元素加上 。
- 其余只被单线压住的元素保持不变。得到新矩阵后返回第 2 步重新试指派。
- 注:极大化指派问题,可先令 ( 为原矩阵中最大元素),转化为极小化问题再用匈牙利法求解。
复习思考题
- 为什么线性规划松弛最优解直接凑整后,往往得到的不是整数规划的最优解,甚至可能是非可行解? 请画出或用文字描述一个简单的几何反例来说明。
- 割平面法中 Gomory 切割方程是如何推导出来的? 为什么切割约束能够保证割去当前松弛的非整数最优解,而绝不会割去任何一个合法的整数解?
- 指派问题使用匈牙利法求解时,为什么要进行“作最少直线覆盖所有 0 元素”的操作? 这一操作在数学矩阵理论中对应的核心定理是什么?
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时

