aps-agent/docs/algorithm/scheduling-v1.md

3.0 KiB
Raw Blame History

排产算法 v1(已落地 · RULE)

代码:server/engines/rule_engine.py
测试:tests/golden/test_rule_engine.py
定位:构造启发式(策略排序 + 顺排占槽),毫秒级;不是最优解求解器。


1. 输入 / 输出

内容
输入 世界状态 world + EngineParams(策略、展望期、起算日、订单子集、引擎类型名等)
写出 DRAFT scheduleVersion、生产订单 PO、工单 WO、conflicts、版本 KPI 字段
权力 由工作流以 P1 调用;本引擎只改传入的内存 world

请求的 engineType 可为 RULE/CP/GA/HYBRID;工厂在 M5 前对非 RULE 仍跑本引擎,但版本上如实留下请求类型(诚实留痕)。


2. 主流程

① 收集待排订单项(过滤 CANCELLED/COMPLETED 订单与 COMPLETED 明细)
② 按 strategyTemplate 排序
③ 创建 DRAFT 版本(版本链 parentVersionId)
④ 逐项:选产线 → 按工艺步骤拆 WO → 在班次窗内找槽(可跨天)→ 齐套检查
⑤ 版本内冲突扫描(产能/维保等只扫本版新 WO,避免历史污染)
⑥ 汇总 KPI(延期、利用率等)

与 legacy aps-frontend 的刻意偏差(已测固化):

  1. 容量/维保冲突只扫本版新工单
  2. 利用率只按本版工单统计

3. 策略模板(排序键)

strategyTemplate 排序逻辑(实现)
DELIVERY_FIRST (deliveryDate, priority) ≈ EDD
FIFO (orderDate,)
CAPACITY_BALANCE (priority,);选线时偏好累计占用少的线
COST_FIRST (priority,)(成本目标尚未单独建模,与均衡同序)
其他 / COMPREHENSIVE (priority, deliveryDate)

纠偏:COST_FIRST 名称表示产品意图,v1 没有真实成本目标函数,勿写成「已实现成本最优」。


4. 占槽与资源

  • 产线:由产品-产线关系 find_product_lines;无可用线 → NO_LINE
  • 工位:工序资格 find_workstation_for_operation;无 → NO_WORKSTATION
  • 时间:班次日历内找连续可用分钟;长工单可跨天拼接
  • 展望期:默认 planningHorizonDays(种子参数 14)
  • 齐套:BOM vs 库存/在途逻辑;不足 → MATERIAL_SHORTAGE(可推迟或标冲突,见代码分支)

5. 冲突类型(引擎实际产出)

conflictType 含义
NO_LINE 产品无可用产线
NO_WORKSTATION 工序无合格工位
MATERIAL_SHORTAGE 齐套不足
DELAY 相对交期延误
CAPACITY 产线日产能/占用冲突
EQUIPMENT 维保等设备不可用

前端可高亮超期/冲突;一键修复工作流未落地。


6. 明确未做(勿在对外材料写成已有)

  • CP-SAT / GA 真实求解与 optimality gap
  • 可配置约束注册表(C1–C13 产品化)
  • 换线矩阵优化排序
  • 插单 LNS 局部修复 / 全量重排决策表(plan §9.11)
  • 影子价、Tornado、蒙特卡洛鲁棒性

见 roadmap.md。