做激光加工这些年,我见过太多机器配置很高、但实际产出上不去的案例。切割头从A点移到B点,激光并没有在干活,这段空移路径看着不起眼,积累起来却是很多工厂沉默的效率杀手。今天想聊的,就是路径优化算法如何把一个"差不多就行"的加工顺序,变成实打实的机时节省。这篇文章适合做钣金切割、管材切割、PCB钻孔、飞秒激光刻蚀的朋友,不管你是操机师傅还是工艺编程员,理解了这套思路之后,回去打开自己的加工文件重排一遍,多半能直接挤出产能。
1. 激光加工里的时间黑洞:先算清空移这笔账
1.1 为什么切割速度很快,产出却上不去
很多做激光加工的朋友有个误区:觉得效率取决于激光功率和切割速度,功率够大、速度够快,产能自然就上去了。实际上设备越先进,空移速度和切割速度的差距越大,路径规划不合理造成的浪费就越刺眼。
我们看一组常见数据:切2mm不锈钢,切割速度大概在每分钟3到4米,穿孔时间大约0.3秒;而空移速度动辄可以拉到每分钟36米以上,有的设备甚至能到60米。单看差别不大,但一个加工文件里有几十上百个孔和轮廓时,情况就完全不同了。
这里面的核心问题在于,绝大多数CAM软件导出路径时,默认按图元生成顺序排列。绘图员画图的逻辑是按"图层"、"结构"分类,而不是按空间位置,于是切割头经常从板材左上角冲到右下角,再从右下角折回中间,空移路径大量交叉、迂回。激光真正干活的时间可能只有总时间的一半,甚至更少。
我做工艺那会儿,第一次把一台通快设备的加工日志拉出来,看到空移时间占比超过40%,自己都有点不信。后来用秒表掐了几个件,发现确实如此。空移快但架不住次数多、距离长,设备每秒钟都在烧电、占机时,这些成本最后全算在零件单价里。
1.2 一个直观的数学例子:50个孔的路径决策
用个简单的例子来算账。假设有一块板材上需要切割50个小孔(比如散热孔、安装孔),这些孔基本均匀分布在一个300mm×200mm的区域内,孔间距平均约15mm到20mm。
如果按画图顺序加工,很多CAM文件的路径是乱的,空移总距离很容易超过3000mm。如果我们用最简单的最近邻规则重排一下:每次从当前位置找最近的未切割孔,空移总距离可以压到900mm左右。再结合后面要讲的局部优化,700mm左右就能搞定。
3000mm和700mm,差了2300mm。按600mm/s的空移速度算,单件省下的空移时间只有约3.8秒,听起来不多。但一台设备每天加工1000个这种小件,那就是3800秒,超过1小时,一个月的机时浪费就是整整一天多。
如果这些孔尺寸不一样、分布更散,优化前后的差距会更夸张。我以前帮客户优化过一个表壳批量件,上面有80多个孔和刻字路径,原文件空移路径接近7000mm,优化后缩到1800mm,单件节拍直接减少8秒,客户一台机器一天多做两百多个件,而且没花一分钱硬件投入。
这就是路径优化算法的价值:它不改变任何物理参数,不换激光器、不调镜片、不换喷嘴,只是把"怎么走"重新规划了一下,效率却实实在在提上去了。
2. 把激光头当成快递车:路径优化本质是一个TSP问题
2.1 与物流配送路径同构的数学模型
在物流行业,配送路径是一个老话题。一辆快递车从仓库出发,要跑几十个配送点,怎么安排顺序,才能让总里程最短、油耗最低?这就是经典的物流配送路径问题。激光加工其实完全一样:切割头就是一个"快递车",每一个待加工的孔或轮廓就是"配送点",空移路程就是"行车里程"。
两者差异仅在于:快递车还有载重约束、时间窗口、多辆车协同,而单头激光切割是单车辆、无载重、无时间窗的最简版本。正规一点说,激光加工的空移路径规划就是旅行商问题,英文缩写TSP。给定n个待加工点,找一条经过每个点一次且仅一次、最终回到起点的路径,使总路程最短。
为什么说这个模型和物流配送路径同构?因为两者优化的目标函数都是距离最小化,求解方法也完全通用。物流行业里被验证过的智能优化算法,搬到激光头坐标上一样好用。这也是为什么很多做激光路径优化的工程师,去翻物流排线、城市配送路线的论文,会发现里面的思路可以直接抄作业。
2.2 教科书TSP解决不了的问题:轮廓级节点与工艺约束
但如果你真的直接套教科书里的TSP算法,又很容易栽跟头。激光加工里的"点"不是单纯的点,而是一个个轮廓、圆孔、异形腔。每个轮廓都有引入线位置、切割方向、穿孔点,这些细节直接影响切割质量。
打个比方,一个方孔由四条边组成,如果算法把四条边当成四个独立的点,路径可能会让切割头切完一条边就跳到别的轮廓,再回来切剩下的三条边。这在实际切割里是个灾难:切到一半跳走,材料冷却后再次穿孔,接刀痕明显,还可能因为热应力把薄壁拉变形。
所以实际的路径优化必须把整个轮廓作为一个节点,节点之间的距离也不是两个点之间的欧氏距离,而是"上一个轮廓切完后的当前位置"到"下一个轮廓引入线起点"的过渡距离。切割方向也得固定,外轮廓和内孔通常一个走顺铣一个走逆铣,不能因为优化路径把方向反了。
再加上微连接位置、夹具位置、热积累区域这些约束,问题从"经典TSP"变成了"带工艺约束的TSP变体"。这也是很多所谓智能优化算法在论文里跑得很好,到了车间里效果打折扣的原因——约束条件没写进去,算法再聪明也白搭。
我把这个建模过程拆成三步,实际做的时候可以照着来:
- 提取每个轮廓的工艺起点和终点,把轮廓整体看作一个带方向的节点;
- 计算任意两个轮廓之间的空移距离,生成距离矩阵;
- 在距离矩阵基础上,把工艺约束(方向、微连接、禁区)作为硬性条件,再进行排序优化。
3. 从最近邻到智能优化:激光加工路径算法选型逻辑
3.1 贪心与局部改进:2-opt是性价比之王
路径优化的算法很多,从最简单的贪心到复杂的深度学习,各有各的适用场景。我按实际工程中的推荐程度一个个说。
最基础的是最近邻算法:从起点开始,每次找离当前位置最近的未加工轮廓,走过去,直到全部走完。实现极其简单,几行代码就能写完,效果也不错,能把乱序路径大幅缩短。但它的毛病在于只看眼前,最后几个轮廓可能离得很远,形成一段跨越整个台面的长距离空移,反而得不偿失。
再往上一层是各类插入法:从一个轮廓开始,每次从未加工的轮廓里选一个插入到当前路径中,使插入后路径增量最小的位置。最远插入法在均匀分散的场景下效果往往比最近邻好,但计算量大一点。
真正让路径质量上一个台阶的是2-opt局部搜索,这是我最推荐的算法,没有之一。它的核心逻辑很直观:如果路径中有两条边交叉,那就把中间一段反向连接,相当于彻底解开交叉。反复试,直到任何两段交换都不能让总距离变短为止。
用大白话解释,2-opt就是不断问自己一个问题:"把这一段路径反过来走,是不是更短?"如果是,就换掉。这个算法配合最近邻作为初始解,在几百个轮廓的规模下效果非常好,能把最近邻基础上再优化个20%到40%,而且运行时间几乎可以忽略不计。
我在实际项目里的标准流程就是:先用最近邻生成一个初始排序,再用2-opt反复精修,通常循环几百次就能收敛。这一套代码用Python写,初始化加迭代,总共不到一百行。
3.2 智能优化算法何时值得上:模拟退火、遗传与蚁群
很多文章一谈路径优化就上遗传算法、模拟退火、蚁群,显得很高大上。确实,这些算法属于智能优化算法,在物流配送路径规划领域被大量验证过,放到激光加工场景里也是一样适用,但一定要分清场合。
拿遗传算法举例。它的思路是模拟生物进化:生成一组随机路径作为"种群",每个路径是一条"染色体",通过交叉和变异不断产生新路径,用适应度函数(总空移距离)筛选更优个体。适合在解空间很大的时候进行全局探索,避免陷入局部最优。我的实测感受是:在轮廓数量超过500个、台面上分布极不均匀时,遗传算法加2-opt的收敛质量明显好于单纯2-opt。
模拟退火的思路是借鉴金属退火过程:允许以一定概率接受比当前更差的解,这样"跳出"局部最优的坑,然后随着温度降低,接受差解的概率逐渐减小,最终稳定在较优解附近。实现上比遗传简单,调参直觉化,很多人在2-opt基础上做一轮模拟退火精修,效果也很好。
蚁群算法模拟蚂蚁找食物时通过信息素互相协作的过程,正反馈机制强,在动态变化的环境下效果不错,但参数多、计算量大,激光加工这种静态离线场景,优势体现得并不明显。
我的选型建议是:
- 100个轮廓以下:最近邻+2-opt就足够了,别折腾别的;
- 100到500个轮廓:2-opt基础上加一轮模拟退火或遗传算法,效果明显;
- 500个以上轮廓或分布极乱:直接上遗传算法加局部搜索的组合,计算时间也还能接受。
说白了,算法是工具,重要的是理解每种工具能解决什么问题。物流配送里那些动辄几千个网点的路线规划都能用智能算法跑,激光加工几百个点真不算什么。
3.3 算法选型决策表
| 算法类型 | 适合规模 | 实现难度 | 优化效果 | 典型场景 |
|---|---|---|---|---|
| 最近邻 | 任意 | 极低 | 中 | 初始解、临时排程 |
| 2-opt | 小于500节点 | 低 | 中高 | 日常加工文件重排 |
| 模拟退火 | 100-2000节点 | 中 | 高 | 配合2-opt做全局跳出 |
| 遗传算法 | 200以上节点 | 较高 | 高 | 大批量、复杂分布 |
| 蚁群算法 | 动态变化 | 较高 | 中高 | 动态调度、特殊场景 |
这里多说一句,算法效果不能只比"谁更短"。真正的评判标准是"给定时间内谁更实用"。车间里没人愿意等5分钟让电脑算路径,我一般要求优化计算时间控制在10秒以内,超过了就回到2-opt方案。
4. 一次真实落地:200个轮廓的路径重排实测
4.1 测试环境与数据采集
2023年下半年,我帮一个做电器机箱的客户做工艺优化,其中有块1200mm×800mm的不锈钢板,上面要加工大约200个孔和异形轮廓,有圆孔、方孔、腰型孔,还有几个用于定位的沉台。原CAM文件导出后,空移路径相当感人,光看代码里的G0指令就知道切割头在整个台面上来回穿梭。
具体做法是:把加工文件里的坐标全部解析出来,按轮廓分组,每个轮廓取引入线起点坐标和终点坐标,然后组成节点列表。这里有个关键步骤,节点之间的距离不能简单用起点到起点去算,而要用上一个轮廓的终点到下一个轮廓的起点去算,才是真实的空移距离。
我写了一个Python脚本,读取加工文件里的坐标数据后,做三件事:一是按轮廓分组并提取起终点;二是计算轮廓间距离矩阵;三是调用路径优化算法重排输出顺序。整个过程大概花了两个晚上,主要时间花在解析不同格式的加工文件上,算法本身反而很简单。
4.2 逐步优化带来的数据变化
这是当时实测的数据,同一块板子、同一套加工参数,只改变切割顺序:
| 排序方式 | 空移总距离 | 估算空移时间(600mm/s) |
|---|---|---|
| CAM默认导出顺序 | 9320mm | 15.5秒 |
| 最近邻算法 | 2800mm | 4.7秒 |
| 最近邻+2-opt | 1980mm | 3.3秒 |
| 遗传算法+2-opt | 1900mm | 3.2秒 |
从9320mm降到1900mm,单件空移时间节省约12秒。这个件每日计划做800件,日产能直接多出将近3小时的有效机时。而且加工质量还变得稳定了,因为切割头不再频繁从板材一侧冲到另一侧,热影响区分布更均匀,薄壁区域的变形也减少了。
顺手说一下遗传算法在这里的表现:我从最近的邻加2-opt方案继续跑到遗传算法优化,只比2-opt多省了80mm,约4%。这说明在200个节点这个规模下,2-opt已经逼近了这个实例的较优值,再上复杂算法收益不高。这个结论很重要——别一上来就上重武器,先用简单的算法跑通流程,看看还有多少优化空间,再决定值不值得上高级算法。
4.3 可以直接复用的代码思路
下面这段代码思路,我已经在多个项目里复用过,核心逻辑就是最近邻生成初始路径加2-opt精修。坐标从加工文件里提取后存成列表,格式是"轮廓编号,起点x,起点y,终点x,终点y"。
import math def dist(pts, i, j): # 上一个轮廓的终点到下一个轮廓的起点 return math.hypot(pts[i][3] - pts[j][1], pts[i][4] - pts[j][2]) def nearest_neighbor(pts, start=0): n = len(pts) visited = [False] * n route = [start] visited[start] = True cur = start while len(route) < n: best = -1 best_d = float('inf') for j in range(n): if not visited[j]: d = dist(pts, cur, j) if d < best_d: best_d = d best = j route.append(best) visited[best] = True cur = best return route def two_opt(route, pts): n = len(route) improved = True while improved: improved = False for i in range(n - 1): for j in range(i + 1, n): if j - i == 1: continue # 计算翻转后的路径长度变化 old_d = (dist(pts, route[i], route[i+1]) + dist(pts, route[j], route[(j+1) % n])) new_d = (dist(pts, route[i], route[j]) + dist(pts, route[i+1], route[(j+1) % n])) if new_d + 1e-9 < old_d: route[i+1:j+1] = reversed(route[i+1:j+1]) improved = True return route pts = [...] # 每个元素: [id, start_x, start_y, end_x, end_y] route = nearest_neighbor(pts) route = two_opt(route, pts)跑完之后,把重排后的轮廓顺序写回加工文件,把原轮廓的坐标段按新顺序排列输出。注意写回去之前一定要在仿真软件里过一遍,确认没有跨越禁区和异常抬刀。我第一次优化完直接上机,结果发现有个轮廓排序后和压板干涉,幸好只是空移,没有撞头,但吓得之后每次都先仿真。
5. 落地时的五个坑:坐标系、微连接与热变形
5.1 坐标系方向不一致
第一坑是坐标系方向。不同品牌的数控系统对Y轴方向的约定不一样,有些设备Y轴正方向朝上,有些设备面向操作者时正方向朝下。坐标提取到算法里计算距离时,欧氏距离本身不受坐标轴方向影响,但如果你的程序里做了旋转、镜像变换,就很容易出错。
更隐蔽的问题是坐标单位。有的加工文件用毫米,有的是英寸,还有的是脉冲数。我之前接过一个客户的程序,优化完路径后上机,空移路径明显异常,排查了半天发现坐标单位是1/100mm,而算法里当成了毫米,距离矩阵完全错误。
我的建议是:不管从什么格式的加工文件提取坐标,先做一个坐标系映射校验。随机取几个坐标对,在设备上手动移动切割头到对应位置,确认坐标方向和单位无误,再跑优化。这一步花10分钟,省下的是上机试切反复调试的时间。
5.2 微连接与夹具约束
第二个坑是微连接。厚板切割时,为了防止零件切完后掉落或偏移,工艺上会故意保留几个1mm左右的连接点,叫做微连接,最后统一敲掉。
问题在于,路径优化算法并不知道哪里有微连接。它可能把某个轮廓排在前面切完,把微连接所在边也顺带切断了,后面的工序里这个零件就已经松动,吹气时可能翘起来,轻则影响后续切割精度,重则撞坏切割头。
解决办法是在算法里把微连接位置设置为约束:微连接所在的那一段切割路径必须排在最后一个轮廓的最后一段。具体实现上,可以这样处理:先把非微连接轮廓全部重排优化,把微连接轮廓留在最后,在最后一段里再优化内部起止方向。这比硬塞进通用TSP模型里靠谱得多。
5.3 距离最短不等于时间最短
第三个坑是目标函数选错。激光切割追求的不应该只是空移距离最短,而是整个加工时间最短。很多设备空移有加减速过程,拐角处还要降速。一个路径虽然总距离短,但如果全是急转弯、之字形,切割头不断加减速,实际耗时反而更长。
我遇到过相反的情况:一个优化算法把空移距离缩短了20%,但实际节拍几乎没有变,因为重排后的路径里多了很多小角度折返。解决办法是在代价函数里加入拐角惩罚:对相邻三段路径之间的夹角做判断,如果夹角过小,就在代价里加一个惩罚项,迫使算法避开频繁拐弯的路径。
具体实现不复杂,距离矩阵的边权改成"距离+拐角惩罚系数×拐角度数",系数根据设备加速性能标定。我自己用过大约0.5到1.0倍的距离系数,效果比较理想。
5.4 热变形与局部过热
第四个坑是热变形。小间距多孔板,如果路径优化把所有靠得近的孔排在一起连续切割,热量会高度集中,板材局部膨胀,切出来的孔距偏差比允许公差还要大。很多工艺员抱怨"优化完精度反而差了",原因就在这里。
我的做法是在优化模型里增加一个约束:同一区域内连续切割的轮廓数量不超过某个阈值,或者说相邻切割轮廓之间的最小间距不能小于某值。这会让空移路径稍微变长,但换来的是热分布更均匀、尺寸精度更稳。对于薄板和铝板,这一条尤其重要。
5.5 不要忽视图形本身的判定规则
第五个坑,也是最隐蔽的一个:孔洞与外轮廓的包含关系。有些零件上有通孔,而通孔的切割顺序必须在外轮廓之前,否则外轮廓切完后板材就散了,孔没法切。路径优化算法只认坐标,不知道这些从属关系。
所以我在建模时会把所有轮廓分类:外轮廓、内孔、微连接轮廓、参考基准轮廓。优化时只在同类别内做TSP重排,跨类别的顺序保持原有工艺逻辑不变。这样既保住了质量,又拿到了路径优化的收益。
6. 从路径到全局:路径优化还能往哪里扩展
6.1 路径优化与排样联合考虑
路径优化做完之后,更大的一块蛋糕是排样与路径的联合优化。市面上很多排样软件只负责把零件紧密排列在板材上,排列完的路径效率不一定好。
反过来,如果你在排样阶段就把路径优化的目标考虑进去,让相邻零件之间的过渡距离尽量短,效果会非常可观。实际操作中,可以先生成几种不同的排样方案,对每个方案分别做路径优化,按"总节拍最短"来选优。计算量虽然大了,但现在电脑性能完全跑得动,尤其适合批量长期生产的固定件。
6.2 共边切割与飞行切割
再往上一层是共边切割。两个相邻零件共享一条边时,这条边只需要切一次,切割长度大大减少。但共边切割对路径规划的要求高得多,不仅要排顺序,还要规划共边段的切割时机,保证两侧零件都不松动。很多主流CAM系统都内置了共边切割功能,但自动化的共边路径优化仍然是热门的算法研究方向。
飞行切割是另一个常用功能:切割头在运动过程中直接开激光切割,不停顿不减速,适合连续的规则轮廓。路径规划如果能把飞行切割段安排得足够长、拐弯足够少,切割效率还能再上一个台阶。这个方向尤其值得做管材切割的朋友关注。
6.3 从单机路径到产线调度
把视野再放大一点,路径优化不只是单台设备内部的事。整个车间里,切割、折弯、焊接、上下料,每个环节都在排队等待。单机路径最优不等于产线节拍最优。
这和物流配送路径里的多车调度问题就非常像了:多台设备同时工作,如何分配任务、如何安排先后顺序,才能让整个厂区在制品流转最快。智能优化算法在这里也同样适用,只是目标函数从单机空移距离变成了整线完工时间。我见过一些厂开始用这类算法做APS排程,效果很直接。
6.4 我给工艺人员的一个实在建议
做了多年激光加工工艺,我最大的体会是:算法永远是在给工艺做辅助,而不是替代工艺。路径优化这类工具,最强的价值不是省多少秒,而是把工艺人员从繁琐的手动排序里解放出来,把精力放在真正影响质量的事情上——切割参数、气体选择、镜片状态、板材质量。
如果你现在正被乱序路径困扰,我建议先用最原始的办法验证一下:把你最常做的几个加工文件导出来,人工按区域就近排序,对比一下节拍。大概率你会发现,20%以上的机时浪费就在这种看不见的地方。我今天分享的路径优化算法,核心就一句话:把切割头每次移动的距离压缩到最小,把每一秒设备时间都用在有产出的地方。