问题定义
仓储 AGV 调度需要同时回答三个问题:哪台车执行哪个任务、选择哪条路径,以及发生阻塞时如何重新规划。局部最优的路径不一定带来全局最优的吞吐量。
可以把系统状态表示为车辆位置、电量、载荷、任务队列、地图占用和时间。约束不仅来自静态障碍,还包括路口互斥、窄通道方向、充电站容量、取放货服务时间与安全距离。
目标函数也往往不止最短路:
cost = α × 总完成时间
+ β × 迟到惩罚
+ γ × 空驶距离
+ δ × 冲突与重规划次数
权重必须对应真实运营目标。只优化平均完成时间,可能让少数任务长期饥饿;只追求设备利用率,也可能造成主通道拥堵。
分层求解
上层调度器根据距离、电量和队列负载分配任务;下层规划器基于时空图搜索无冲突路径。执行过程中持续收集位置和任务状态,在滚动时间窗内重新优化。
任务分配
简单场景可以使用匈牙利算法求车辆与任务的最小费用匹配。费用不应只有欧氏距离,还应包含到达取货点的预计时间、剩余电量、当前载荷、任务优先级和区域拥堵。
持续到来的任务适合滚动优化:每隔固定时间或在关键事件发生时重新计算未锁定任务,已经进入执行阶段的任务则设置切换成本,避免车辆频繁改派。
无冲突路径
单车 A* 只保证不撞静态障碍。多车系统需要在“位置 + 时间”空间中规划,并建立顶点与边的预约表,阻止两辆车同时进入同一节点或沿同一边对向交换。
优先级规划实现简单、实时性好,但高优先级车辆可能堵死低优先级车辆;CBS(Conflict-Based Search)能通过冲突约束寻找更优解,但车辆多时计算成本较高。工程上常采用分区、时间窗和优先级规划组合,在局部拥堵区域再使用更精细的冲突搜索。
执行与重规划
真实车辆不会严格按仿真时间到达。定位误差、装卸延迟和临时障碍都可能使预约失效,因此执行器要持续比较计划状态与实际状态。
并非每次偏差都要全局重算。轻微延迟可以局部顺延预约;路径被阻断时重算受影响车辆;只有吞吐明显下降或出现死锁风险时才触发全局调度。频繁重规划本身也会造成系统震荡。
死锁与拥堵
死锁常见于窄通道和环形等待。除了运行时检测等待图,还可以在地图层预先标记单向通道、会车点和禁止停留区。调度器应限制热点区域同时进入的车辆数,并为充电、停车与异常车辆保留缓冲位。
比“检测到死锁再后退”更好的策略,是让预约系统提前识别循环等待,并在进入关键区域前调整优先级。
Agent 化的可能性
语言模型不适合直接替代确定性的路径搜索,但可以参与异常解释、策略选择与人机协同。让模型负责“理解情境”,让算法负责“保证约束”,通常更可靠。
一个合理的分工是:优化器输出可行计划和指标,规则引擎守住碰撞与设备约束,LLM 读取结构化状态和历史事件,生成异常摘要、推荐策略或操作员可理解的解释。模型提出的“封锁区域”“降低任务优先级”等动作仍要经过权限校验和仿真验证。
评估方法
调度算法至少应在以下场景中回放:正常峰值流量、任务突发、单车故障、通道封闭、定位延迟、充电站排队和网络抖动。观察吞吐量、P95 完成时间、空驶率、能耗、停车次数、死锁次数和重规划耗时。
离线仿真需要保留随机种子和完整事件日志,才能比较两版策略。上线时先做影子计算:新调度器只生成计划不控制车辆,与现网决策对比,确认稳定后再逐步接管低风险区域。
仓储调度的难点不是找到一条最短路径,而是在持续变化的共享空间中,让局部决策服从全局吞吐、安全与可恢复性。