“在完全二分图上,完美匹配向量排列成矩阵就是置换矩阵。Birkhoff–von Neumann 分解会把任意双随机矩阵实际拆成若干这样的匹配,给出比存在性更具体的排班实现。”
形式陈述
一份分数排班表可能要求每个人把时间分给多项任务。能否把它排成一组时间片,使每个时间片里每个人只做一件任务、每件任务也只由一个人承担?
设
就称为双随机矩阵。Birkhoff–von Neumann 定理说,存在置换矩阵
置换矩阵每行、每列恰有一个一,其余为零;它正是完全二分图上一份完美匹配的矩阵表示。由二分图匹配多胞形也可看出,双随机矩阵组成的多胞形以置换矩阵为极点。本页进一步给出实际找到这份凸分解的扣减算法。
算法初始化残余矩阵
输出
直觉
把行当作工作人员、列当作任务,一条正边说明某人仍欠该任务一段服务时间。匹配让每个人和每项任务恰出现一次;沿匹配找最小剩余时间,就知道这一整份排班可以连续运行多久。最先用完的边归零,下一轮换一份匹配继续安排。
为什么每轮总能找到完美匹配?不变量是残余矩阵非负,且每行、每列和都等于同一个
扣除一份匹配时,每行每列都恰减去
例子与边界
一份四人四任务计划
取
行、列和均为一。第一次选对角匹配
第二次选循环移位匹配
最后选
例如第三行第一列只在最后一份匹配中出现,所以重构为
若一天分为六个等长时段,就安排三段对角匹配、两段移位一格匹配、一段移位两格匹配。每个时段都是真正的一对一分配,而长期比例恰好等于原分数表。
不要混淆绝对权重与归一化权重
第一轮后也可以把残余除以
本页采用不归一化残余的版本,始终显示当前
输入条件各自负责什么
只有行和一而列和不等于一的随机矩阵不一定能这样分解。例子
若有禁止配对,用零元表达即可,算法永远只走正支撑,不会引入原来为零的位置。矩阵条目为有理数时,可以用精确分数表示权重;浮点输入则要说明何时把一个接近零的数当作零,并检查剩余行列和,不宜随意截断后仍声称逐项精确重构。
推论与应用
若初始有
每轮可以用Hopcroft–Karp在正支撑上求完美匹配,成本
分解不重新优化一项费用。若原分数矩阵已经是某个线性指派目标的最优解,任何正权重分量也必须同优:否则它们的加权平均不可能等于最优值。匈牙利算法则从费用矩阵直接寻找一份最优指派,目标与“把给定计划实现成排班”不同。
该分解还可用于交换机调度:每个时间片选择一份输入端口到输出端口的一对一连接,权重决定运行比例。实际系统若另有限制切换次数、连续时段长度或时延,便增加了新的优化目标,不能由凸分解的存在性直接保证。
参考资料
- Karthik Chandrasekaran, IE 511 Lecture 9, Spring 2021, §9.1:官方讲义。Birkhoff 定理的匹配多胞形形式及极点证明。
- Cheng-Shang Chang and Duan-Shin Lee, Principles, Architectures and Mathematical Theories of High Performance Packet Switches, 2006 draft, §2.3, Algorithm 2, printed pp. 38–39, and §2.3.4:作者公开教材。正支撑匹配、逐轮扣减与时分实现。