mobile wallpaper 1
2037 字
5 分钟
第 6 章 整数规划
2026-06-29

整数线性规划问题的分类与特点#

在很多实际决策中,决策变量代表不可分割的实体数量(如机器台数、车辆数、员工人数等),因此变量必须取整数值。我们称此类数学规划为整数线性规划Integer Linear Programming,简称 ILP)。

1. 整数规划分类#

  • 纯(全)整数线性规划:所有决策变量都限制为非负整数。
  • 混合整数线性规划MILP):仅有一部分变量限制为整数,其余可取连续实数值。
  • 0-1 整数线性规划:所有决策变量只能取 0 或 1。

2. 舍入凑整法的失效性#

通常不能简单地将松弛后的普通线性规划(即舍去“变量为整数”约束后的 LP 问题,称为松弛规划)的最优解进行四舍五入凑整:

  • 凑整后的点极有可能超出可行域,变成非可行解
  • 即使凑整后仍是可行解,它往往也不是最优整数解(整数最优解不一定是松弛解邻域内的点)。

求解算法 1:分支定界解法(Branch and Bound)#

分支定界法是求解纯整数和混合整数规划的标准有效算法(隐枚举法的一种)。

1. 算法核心原理#

  • 上界与下界: 对于极大化 maxz\max z 整数规划问题,其松弛规划的最优目标值 z0z_0 构成了整数规划最优解 zz^*上界(即 zz0z^* \le z_0)。任意已知的整数可行解的目标值则构成 zz^*下界
  • 分支(Branching): 若当前松弛解中某变量 xk=vx_k = v 不是整数,则以两个不重叠的不等式为约束分裂为两个子问题: xkvxkvx_k \le \lfloor v \rfloor \quad \text{和} \quad x_k \ge \lceil v \rceil
  • 定界(Bounding)与剪支(Pruning): 对新生成的子问题求解松弛规划:
    • 若子问题的松弛最优值小于等于当前已知的下界,则该支不可能包含更好的整数解,予以剪支(抛弃)。
    • 若子问题无可行解,予以剪支
    • 若子问题的松弛解刚好全部满足整数约束,则用其更新下界,并对该支进行剪支(因已找到该分支的最优整数解,无需再分)。
    • 否则,用子问题的最优值更新该支的本地上界,继续对其分支。
  • 重复上述过程直到所有分支被剪除,当前下界对应的整数解即为最优解。

求解算法 2:割平面解法(Gomory Cutting Plane)#

1. 算法核心思想#

先求解不含整数约束的松弛规划,若最优解为非整数,则通过数学代数关系构造一个割平面约束Gomory 切割)并添加到模型中。该约束会割去包含当前非整数最优解的部分可行域,但保证不割掉任何整数可行解。新问题求解后通常会得到非可行解(右端项出现负数),需使用对偶单纯形法快速重新求解,重复此过程直至解为整数。

2. 切割方程的代数推导步骤#

在最终单纯形表中,设某个基本变量 xix_i 的值为非整数: xi+kNαikxk=bix_i + \sum_{k \in N} \alpha_{ik} x_k = b_i 将系数和常数项拆分为整数部分 NN 与非负真分数部分 ff(满足 0f<10 \le f < 1): bi=Ni+fi(0<fi<1)b_i = N_i + f_i \quad (0 < f_i < 1) αik=Nik+fik(0fik<1)\alpha_{ik} = N_{ik} + f_{ik} \quad (0 \le f_{ik} < 1) 带入方程移项整理: xi+kNNikxkNi=fikNfikxkx_i + \sum_{k \in N} N_{ik} x_k - N_i = f_i - \sum_{k \in N} f_{ik} x_k 由于左侧各项在整数约束下必须是整数,故右侧的值也必须是整数。又因为 fikxk0\sum f_{ik} x_k \ge 0,且 fi<1f_i < 1,所以右侧的整数最大只能为 0。由此得到切割方程: kNfikxkfi-\sum_{k \in N} f_{ik} x_k \le -f_i 引入非负松弛变量,使用对偶单纯形法求解,即可在不损失任何整数解的前提下排除非整数最优解。


0-1 变量的应用与建模技巧#

引入 0-1 决策变量 yj{0,1}y_j \in \{0, 1\} 能够为复杂的逻辑关系进行线性建模。

1. 互斥项目选择(投资场所选定)#

  • A1,A2,A3A_1, A_2, A_3 中至多选两个:y1+y2+y32y_1 + y_2 + y_3 \le 2
  • A4,A5A_4, A_5 中至少选一个:y4+y51y_4 + y_5 \ge 1
  • 前提条件约束:选择项目 5 的前提是选择项目 1,则有:y5y1y_5 \le y_1 (若 y1=0y_1=0,则 y5y_5 必须为 0;若 y1=1y_1=1y5y_5 可为 0 或 1)。

2. 互斥约束条件建模#

若两个约束条件 f1(X)b1f_1(X) \le b_1f2(X)b2f_2(X) \le b_2互斥的(即只需满足其中一个即可,另一个自动失效)。 引入一个 0-1 变量 y{0,1}y \in \{0, 1\} 和一个极大常数 MMf1(X)b1+yMf_1(X) \le b_1 + y M f2(X)b2+(1y)Mf_2(X) \le b_2 + (1 - y) M

  • y=0y=0,第一式有效,第二式由于加上 MM 自动失效。若 y=1y=1,则反之。
  • 推广到 mm 个互斥约束中必须满足 kkfi(X)bi+yiM(i=1,,m)f_i(X) \le b_i + y_i M \quad (i=1,\dots,m) i=1myi=mk(yi{0,1})\sum_{i=1}^m y_i = m - k \quad (y_i \in \{0, 1\})

3. 固定费用(Fixed Charge)建模#

生产产品 xjx_j 时,若产量 xj>0x_j > 0,需支付固定设备成本 KjK_j;若不生产(xj=0x_j = 0)则不支付。总成本为: Cost=j(Kjyj+cjxj)\text{Cost} = \sum_{j} (K_j y_j + c_j x_j) 必须建立产量 xjx_j 与 0-1 状态变量 yjy_j 的关联约束: xjyjM(j)x_j \le y_j M \quad (\forall j) 其中 MM 为该产品产量的物理上限。


指派问题与匈牙利法(Hungarian Method)#

1. 指派问题数学模型#

nn 项任务指派给 nn 个人分别完成,每人只能做一项。设 xij{0,1}x_{ij} \in \{0, 1\} 表示是否指派第 ii 人做第 jj 项任务,效率矩阵为 C=(cij)C=(c_{ij})。要求总时间或总成本最小: minz=i=1nj=1ncijxij\min z = \sum_{i=1}^n \sum_{j=1}^n c_{ij} x_{ij} s.t. {j=1nxij=1,i=1,,n(每人做一项工作)i=1nxij=1,j=1,,n(每项工作由一人做)xij{0,1}\text{s.t. } \begin{cases} \sum_{j=1}^n x_{ij} = 1, & i = 1, \dots, n \quad \text{(每人做一项工作)} \\ \sum_{i=1}^n x_{ij} = 1, & j = 1, \dots, n \quad \text{(每项工作由一人做)} \\ x_{ij} \in \{0, 1\} \end{cases}

2. 匈牙利法求解步骤#

匈牙利法基于的核心矩阵定理是:“在效率矩阵的某行(或列)同加减一个常数,最优解不变”。

  1. 矩阵归零:每行减去该行最小值;随后每列减去该列最小值。使各行各列均出现 0 元素。
  2. 试指派与独立零元素寻找
    • 从含 0 元素最少的行(或列)开始,给唯一的 0 加圈(◎),并划去同行、同列的其他 0 元素(标为 Φ\Phi)。
    • 重复直至所有 0 被处理。
    • 若圈出的 ◎ 个数 m=nm = n,则这些 ◎ 对应的变量为 1,即得最优解。若 m<nm < n,进入第 3 步。
  3. 覆盖打勾与覆盖线绘制(寻找最少覆盖直线 ll):
    • 对没有 ◎ 的行打“\checkmark”。
    • 对已打“\checkmark”的行中所有含 Φ\Phi 的列打“\checkmark”。
    • 对已打“\checkmark”的列中含有 ◎ 的行打“\checkmark”。
    • 重复上述两步。
    • 划线:对没有打“\checkmark”的行画横线,对打“\checkmark”的列画纵线。最少直线数即为 ll。若 l=nl = nm<nm < n,说明试指派有误,重新寻找独立零;若 l<nl < n,进入第 4 步。
  4. 矩阵重构(增加零元素): 在没有被任何覆盖线压住的元素中找出最小值 Δ\Delta
    • 所有未被覆盖的元素减去 Δ\Delta
    • 线与线交叉点的元素加上 Δ\Delta
    • 其余只被单线压住的元素保持不变。得到新矩阵后返回第 2 步重新试指派。
  5. 注:极大化指派问题,可先令 bij=Mcijb_{ij} = M - c_{ij}MM 为原矩阵中最大元素),转化为极小化问题再用匈牙利法求解。

复习思考题#

  1. 为什么线性规划松弛最优解直接凑整后,往往得到的不是整数规划的最优解,甚至可能是非可行解? 请画出或用文字描述一个简单的几何反例来说明。
  2. 割平面法中 Gomory 切割方程是如何推导出来的? 为什么切割约束能够保证割去当前松弛的非整数最优解,而绝不会割去任何一个合法的整数解?
  3. 指派问题使用匈牙利法求解时,为什么要进行“作最少直线覆盖所有 0 元素”的操作? 这一操作在数学矩阵理论中对应的核心定理是什么?
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

第 6 章 整数规划
https://blog.sopak.space/posts/study/economics-management/mo/9/
作者
Xxxhite
发布于
2026-06-29
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录