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

91 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 排产算法 v1(已落地 · RULE)
> 代码:`server/engines/rule_engine.py`
> 测试:`tests/golden/test_rule_engine.py`
> 定位:构造启发式(策略排序 + 顺排占槽),毫秒级;**不是**最优解求解器。
---
## 1. 输入 / 输出
| | 内容 |
| --- | --- |
| 输入 | 世界状态 `world` + `EngineParams`(策略、展望期、起算日、订单子集、引擎类型名;可选 `deliveryBufferRatio` / `freezeWindowHours`) |
| 写出 | DRAFT `scheduleVersion`、生产订单 PO、工单 WO、`conflicts`、版本 KPI 字段 |
| 权力 | 由工作流以 P1 调用;本引擎只改传入的内存 `world` |
请求的 `engineType`:`RULE`→规则引擎;`CP`→OR-Tools CP-SAT(见 [scheduling-cp-v1.md](./scheduling-cp-v1.md));`GA`/`HYBRID` 仍由本引擎代跑并留痕。
---
## 2. 主流程
```text
① 收集待排订单项(过滤 CANCELLED/COMPLETED 订单与 COMPLETED 明细)
② 按 strategyTemplate 排序(OR-02:综合/均衡以 `-customerLevelWeight` 为第一键;交期优先仍以交期为主)
③ 创建 DRAFT 版本(版本链 parentVersionId)
④ 逐项:选产线 → 按工艺步骤拆 WO → 在班次窗内找槽(可跨天)→ 齐套检查
⑤ 版本内冲突扫描(产能/维保等只扫本版新 WO,避免历史污染)
⑥ 汇总 KPI(延期、利用率等)
```
与 legacy `aps-frontend` 的刻意偏差(已测固化):
1. 容量/维保冲突只扫**本版**新工单
2. 利用率只按本版工单统计
---
## 3. 策略模板(排序键)
| strategyTemplate | 排序逻辑(实现) |
| --- | --- |
| `DELIVERY_FIRST` | `(deliveryDate, -levelWeight, priority)` ≈ EDD 为主 |
| `FIFO` | `(orderDate, -levelWeight, priority)` |
| `CAPACITY_BALANCE` | `(-levelWeight, priority, deliveryDate)`;选线时偏好累计占用少的线 |
| `CHANGEOVER_MIN` | 贪心最近邻:按换型矩阵选下一单;选线偏好同族续排(SC-07) |
| `CAMPAIGN` | 同产品交期窗口合并为战役 PO,再走换型最小化序(SC-08) |
| `COST_FIRST` | 同 `CHANGEOVER_MIN`(以换型分钟为成本代理) |
| 其他 / `COMPREHENSIVE` | `(-levelWeight, priority, deliveryDate)`(OR-02 客户等级权重) |
`levelWeight` 来自 `scheduleParams.customerLevelWeights`(默认 VIP=3/A=2/B=1/C=1)。
**纠偏**:`COST_FIRST` 仍**不是**财务成本最优;当前以 MD-06 换型矩阵分钟为代理。真成本目标待后续切片。
---
## 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 Interval 全模型 / HYBRID·GA 真管线(产线级 CP 首切片见 [scheduling-cp-v1.md](./scheduling-cp-v1.md))
- 换型全局最优排序(当前为贪心最近邻)
- 战役可配窗口/最大批量与拆批回退
- 插单 LNS 局部修复 / 全量重排决策表(plan §9.11)
- 蒙特卡洛鲁棒性 / 参数推荐(Tornado one-at-a-time 已落地,见 SC-06)
见 [roadmap.md](./roadmap.md)。