一、引言:一个经典的组合优化问题
如果你上过《组合数学》或《运筹学》课程,一定听过装箱问题(Bin Packing Problem):给定若干个物品,如何把它们放进最少数量的箱子里?
今天我们要聊的平面排版问题(2D Packing Problem),就是装箱问题的二维版本:给定一块矩形板材和若干个零件(矩形或异形),如何在板材上排列这些零件,使得材料利用率最高?
这个问题听起来简单,但它是一个典型的 NP-hard 问题------这意味着,当零件数量很多时,我们无法在多项式时间内找到全局最优解。
💡 为什么这个问题对数学专业有吸引力?
- 它连接了计算几何 (碰撞检测、轮廓计算)和组合优化(排序、搜索)两大领域
- 它是NP-hard 问题,有丰富的近似算法和启发式算法可供研究
- 它有明确的工业应用背景,理论成果可以直接落地
二、问题的数学建模
让我们先把问题用数学语言精确地描述出来。
2.1 形式化定义
给定:
- 一块矩形板材,尺寸为 W × H(宽度 × 高度)
- n 个零件,每个零件 i 有面积 Si ,形状为多边形 Pi
要求在板材上放置这 n 个零件,满足:
- 不重叠约束:任意两个零件 i 和 j,它们的内部不相交
- 边界约束:所有零件都在板材内部
- 旋转约束:零件可以旋转 90° 或 180°(具体取决于工艺要求)
目标函数:最大化材料利用率

2.2 与经典问题的关系
平面排版问题可以看作是多个经典问题的组合:
- 装箱问题(Bin Packing):一维版本,物品放进箱子
- 子集和问题(Subset Sum):选择哪些零件放上去
- 旅行商问题(TSP):切割路径的优化
三、算法的数学原理
由于平面排版问题是 NP-hard 的,我们无法找到全局最优解。那么,我们通常用哪些方法来近似求解呢?
3.1 贪心算法(Greedy Algorithm)
最直观的思路是贪心策略:每次选择当前最优的零件,放在当前最优的位置。
常见的贪心规则:
- 从大到小:先放最大的零件,再放小的零件
- 从左到右:零件从左到右依次排列
- 从下到上:零件从下到上依次排列
数学性质:贪心算法的时间复杂度是 O(n log n),非常快,但通常只能得到局部最优解。
贪心算法流程图

3.2 左下策略(Bottom-Left Algorithm)
左下策略(BL 算法)是最经典的启发式算法之一:
- 把零件从下往上、从左往右排列
- 每个零件都尽量放在最左下的位置
- 如果放不下,就往上一层放
几何意义:左下策略本质上是在板材上维护一条"轮廓线",零件沿着轮廓线依次排列。
左下策略流程图

3.3 遗传算法(Genetic Algorithm)
遗传算法是一种全局优化方法,它模拟生物进化的过程:
- 选择:从当前种群中选择适应度高的个体(利用率高的排版方案)
- 交叉:两个个体的基因组合,产生新的个体
- 变异:随机改变个体的某些基因,增加多样性
数学模型:每个个体对应一个排版方案,适应度函数就是材料利用率 η。通过不断进化,最终收敛到接近最优的解。
遗传算法流程图

3.4 模拟退火(Simulated Annealing)
模拟退火是另一种全局优化方法,它模拟金属退火的过程:
- 从一个初始解开始,随机扰动得到新解
- 如果新解更好,就接受;如果新解更差,以一定概率接受
- 这个概率由 Metropolis 准则决定:P = exp(-ΔE / T)
- 温度 T 逐渐降低,最终收敛到局部最优
模拟退火流程图


🎯 算法对比 
四、现代流行的算法设计
在工业实践中,我们通常不会只用一种算法,而是把多种算法组合起来,形成一个混合算法。
4.1 矩形排样:shelf 算法 + 轮廓优化
对于矩形零件,最常用的方法是 shelf 算法(货架算法):
- 把零件按高度排序,分成若干个"货架"(每一层就是一个货架)
- 在每个货架上,零件从左到右依次排列
- 如果当前货架放不下了,就往上开一个新的货架
轮廓优化 :shelf 算法的缺点是货架之间会有空隙。为了解决这个问题,我们可以用轮廓线来优化:每个零件都放在当前轮廓线的最低点。
4.2 异形排样:包围盒 + 碰撞检测
对于异形零件(非矩形),问题就复杂多了。我们通常用包围盒来简化:
- 给每个异形零件找一个最小的矩形包围盒
- 先用矩形排样的方法排列包围盒
- 然后用碰撞检测来判断两个异形零件是否真的重叠
计算几何基础:碰撞检测的核心是判断两个多边形是否相交,这涉及到点在多边形内、线段相交等计算几何问题。
4.3 优先级排序:排序问题与权重设计
在实际生产中,我们可能需要优先处理某些零件(比如大批量的、特殊形状的)。这就涉及到优先级排序的问题:
- 大批量优先:数量多的零件先排
- 大面积优先:面积大的零件先排
- 特殊形状优先:异形零件先排
数学模型:我们可以给每个零件一个权重 wi,然后按权重排序。权重的设计通常是一个多目标优化问题。
五、关键技术的数学细节
5.1 旋转与镜像:刚体变换的数学表示
在排样时,零件通常可以旋转 90° 或 180°。从数学上讲,旋转就是一个刚体变换:

其中 θ 是旋转角度。90° 旋转就是 θ = 90°,180° 旋转就是 θ = 180°。
5.2 利用率计算:积分与面积的数值方法
材料利用率 η = Sparts / Splate。其中,零件的面积 Sparts 怎么计算呢?
对于矩形零件,面积就是长 × 宽。对于异形零件(多边形),我们可以用shoelace 公式(鞋带公式)来计算面积:

5.3 路径优化:最短路径问题的近似求解
排样完成后,我们还需要优化切割路径:从哪里开始切、先切哪个零件、后切哪个零件。这本质上是一个旅行商问题(TSP)。
由于 TSP 也是 NP-hard 的,我们通常用最近邻算法 或2-opt 算法来近似求解。
六、学术价值与研究前沿
6.1 NP-hard 问题的近似算法理论
平面排版问题是 NP-hard 的,这意味着我们无法在多项式时间内找到全局最优解。那么,我们能找到什么样的近似解呢?
近似算法理论研究的就是:对于 NP-hard 问题,我们能在多项式时间内找到多好的近似解?比如,能不能找到一个解,它的利用率至少是最优解的 80%?
6.2 多目标优化:Pareto 最优解
在实际生产中,我们往往不是只追求一个目标。比如,我们既要利用率高,又要切割路径短,还要保证加工时间短。这就是多目标优化问题。
多目标优化没有唯一的最优解,而是一组Pareto 最优解:在这组解中,不可能在不牺牲一个目标的情况下改进另一个目标。
6.3 计算几何与组合优化的交叉领域
平面排版问题是计算几何 和组合优化的交叉领域。它既需要计算几何的知识(碰撞检测、轮廓计算),又需要组合优化的知识(排序、搜索)。
6.4 当前研究热点:深度学习、强化学习
近年来,深度学习 和强化学习在组合优化问题上取得了很大的进展。比如,用图神经网络(GNN)来学习零件的排列模式,用强化学习来搜索最优的排版方案。
七、应用价值与工业实践
7.1 数学理论如何指导工业应用?
很多同学可能会问:这些数学理论在工业上真的有用吗?答案是肯定的。
比如,我们知道贪心算法只能得到局部最优解,遗传算法能得到接近全局最优的解。那么,在工业上,我们就可以用贪心算法快速得到一个初始解,然后用遗传算法来优化这个初始解。
7.2 典型行业:钣金、服装、木材、玻璃
平面排版问题在很多行业都有应用:
- 钣金行业:钢板切割,零件排列
- 服装行业:布料裁剪,衣片排版
- 木材行业:木板切割,家具零件排版
- 玻璃行业:玻璃切割,窗户排版
7.3 真实案例:某钣金厂的利用率提升
举个真实的例子:某钣金厂以前用手工排版,材料利用率大约是 70%。后来用上了智能套料系统,材料利用率提升到了 85% 以上。
这意味着什么?假设一块钢板的成本是 1000 元,利用率从 70% 提升到 85%,每块钢板就能节省 150 元。一年下来,节省的成本是非常可观的。
八、前景展望
8.1 数学在智能制造中的角色
随着智能制造的发展,数学在工业中的角色越来越重要。从排样问题到调度问题,从质量控制到预测性维护,数学无处不在。
8.2 AI 与组合优化的结合
近年来,AI 和组合优化的结合是一个非常热的研究方向。比如,用深度学习来学习零件的排列模式,用强化学习来搜索最优的排版方案。
8.3 结语:从数学之美到工业之效
平面排版问题是一个经典的组合优化问题,它既有数学之美,又有工业之效。希望这篇文章能让数学专业的同学们看到:数学不是纸上谈兵,它可以真正地改变生产方式,创造价值。
如果您觉得本文有用,欢迎点赞、收藏和分享!
已落地发布的桌面版软件《 Mynesty平面排版套料系统》下载。