粗排引擎 I/O 範例 — 驗證執行結果
⚙️ 本檔由
rough-cut-scheduler.fp.validate.py執行時自動產生,請勿手改。 上游 spec:rough-cut-scheduler.fp.md(§I/O 範例) 模型基準:今天 =2026-06-02;起排日(正推起點,預設今天+1)=2026-06-03;工作日 = 480 分;toy 忽略週末(行事曆屬可用產能輸入)。 拓樸:上游(拉動 N-x) =['B1', 'B2', 'C1', 'C2', 'C3'];下游(推動 N+y) =['D1', 'D2', 'D3'];節拍點 =A;sink =D3。 兩方向:LeanPlay 交期=以節拍點為節奏點求最早可完工(正推定錨求節拍點最早日 → 有限產能堆疊 → 上游 JIT 拉動 N-x/下游推動 N+y);LSD=自交期反推(不看產能)。多單處理先後依 prioritySeq(非交期)。 引擎只輸出日期(LSD/LeanPlay/投產順序),不比對 LeanPlay vs 交期、不判 overdue——逾期判定屬下游前端/應用。
正常值:單張、產能充足
節拍點為節奏點:先正推求 A 最早可開工日 06-06、定下 A 占 06-06~06-07,再往前拉動上游 JIT(B 分支短、被拉到緊鄰 A 開工:B2 06-05 完工、B1 06-04),往後推動下游。LeanPlay 交期 06-10(最早可完工日)早於交期 06-15——引擎只給日期,是否「準時/逾期」由下游比對。LSD 由交期 06-15 反推、不看產能(最晚開工)。序=該節點 LeanPlay 完工日在整批中的名次(單張單即 1..9);同完工日先後不具意義(如 B1、C2 同為 06-04,序 2/3 可互換)。
投產單 #5001 prioritySeq 1 交期 2026-06-15 產品 LeanPlay 交期 2026-06-10
| 站 | 角色 | LSD | LeanPlay 完工 | 序 |
|---|---|---|---|---|
| C1 下料 | 上游(拉動 N-x) | 2026-06-08 | 2026-06-03 | 1 |
| B1 下料 | 上游(拉動 N-x) | 2026-06-09 | 2026-06-04 | 2 |
| C2 沖孔 | 上游(拉動 N-x) | 2026-06-09 | 2026-06-04 | 3 |
| B2 折床 | 上游(拉動 N-x) | 2026-06-10 | 2026-06-05 | 4 |
| C3 去毛邊 | 上游(拉動 N-x) | 2026-06-10 | 2026-06-05 | 5 |
| A ★N 組裝 | ★節拍點 N | 2026-06-11 | 2026-06-07 | 6 |
| D1 焊接 | 下游(推動 N+y) | 2026-06-13 | 2026-06-08 | 7 |
| D2 噴漆 | 下游(推動 N+y) | 2026-06-14 | 2026-06-09 | 8 |
| D3 包裝出貨 | 下游(推動 N+y) | 2026-06-15 | 2026-06-10 | 9 |
邊界值:早交期但 prioritySeq 在後 → 被排擠、LeanPlay 晚於交期(§RCS-FS-2 + §RCS-FS-12 + §RCS-FS-15)
5002 交期 06-11 雖早於 5001 的 06-20,但 prioritySeq 在後(§RCS-FS-12:處理先後依 prioritySeq、非交期)。5001 先佔節拍點 A 06-06
06-07;5002 最早可開工 06-06 被佔 → §RCS-FS-2 節拍點往後到 06-0806-09,上游隨節拍點整段往後(§RCS-FS-15:JIT 拉動、不空等):5002 上游由 06-0305 改排到 06-0507。產品 LeanPlay 交期 06-12 晚於交期 06-11——引擎只輸出日期,是否逾期由下游比對判讀(§RCS-FS-7)。對照:若改用交期排序,5002 會先佔產能、LeanPlay 早於交期——本例正是 prioritySeq 決策的後果。
投產單 #5001 prioritySeq 1 交期 2026-06-20 產品 LeanPlay 交期 2026-06-10
| 站 | 角色 | LSD | LeanPlay 完工 | 序 |
|---|---|---|---|---|
| C1 下料 | 上游(拉動 N-x) | 2026-06-13 | 2026-06-03 | 1 |
| B1 下料 | 上游(拉動 N-x) | 2026-06-14 | 2026-06-04 | 2 |
| C2 沖孔 | 上游(拉動 N-x) | 2026-06-14 | 2026-06-04 | 3 |
| B2 折床 | 上游(拉動 N-x) | 2026-06-15 | 2026-06-05 | 4 |
| C3 去毛邊 | 上游(拉動 N-x) | 2026-06-15 | 2026-06-05 | 5 |
| A ★N 組裝 | ★節拍點 N | 2026-06-16 | 2026-06-07 | 9 |
| D1 焊接 | 下游(推動 N+y) | 2026-06-18 | 2026-06-08 | 12 |
| D2 噴漆 | 下游(推動 N+y) | 2026-06-19 | 2026-06-09 | 13 |
| D3 包裝出貨 | 下游(推動 N+y) | 2026-06-20 | 2026-06-10 | 15 |
投產單 #5002 prioritySeq 2 交期 2026-06-11 產品 LeanPlay 交期 2026-06-12
| 站 | 角色 | LSD | LeanPlay 完工 | 序 |
|---|---|---|---|---|
| C1 下料 | 上游(拉動 N-x) | 2026-06-04 | 2026-06-05 | 6 |
| B1 下料 | 上游(拉動 N-x) | 2026-06-05 | 2026-06-06 | 7 |
| C2 沖孔 | 上游(拉動 N-x) | 2026-06-05 | 2026-06-06 | 8 |
| B2 折床 | 上游(拉動 N-x) | 2026-06-06 | 2026-06-07 | 10 |
| C3 去毛邊 | 上游(拉動 N-x) | 2026-06-06 | 2026-06-07 | 11 |
| A ★N 組裝 | ★節拍點 N | 2026-06-07 | 2026-06-09 | 14 |
| D1 焊接 | 下游(推動 N+y) | 2026-06-09 | 2026-06-10 | 16 |
| D2 噴漆 | 下游(推動 N+y) | 2026-06-10 | 2026-06-11 | 17 |
| D3 包裝出貨 | 下游(推動 N+y) | 2026-06-11 | 2026-06-12 | 18 |
全單混排序(18 節點依 LeanPlay 完工日連續編號 1..18,tie-break 用 prioritySeq):5001 取得序 {1, 2, 3, 4, 5, 9, 12, 13, 15}、5002 取得序 {6, 7, 8, 10, 11, 14, 16, 17, 18}。節拍點 A:5001 = 序 9、5002 = 序 14。
甘特圖:早交期但 prioritySeq 在後 → 被排擠、LeanPlay 晚於交期(§RCS-FS-2 + §RCS-FS-12 + §RCS-FS-15)
LeanPlay 實際排程區間(節拍點為錨:上游 JIT 拉動、下游推動;已含 §RCS-FS-2 排擠後、§RCS-FS-15 上游隨之往後);條長 = 該節點佔用連續日數,橫軸為日曆日,toy 忽略週末。
gantt title 邊界值・5001 vs 5002(LeanPlay 實際排程・節拍點錨定) dateFormat YYYY-MM-DD axisFormat %m-%d section 投產單 5001 C1 下料 :2026-06-03, 1d B1 下料 :2026-06-04, 1d C2 沖孔 :2026-06-04, 1d B2 折床 :2026-06-05, 1d C3 去毛邊 :2026-06-05, 1d A★ 組裝 :2026-06-06, 2d D1 焊接 :2026-06-08, 1d D2 噴漆 :2026-06-09, 1d D3 包裝出貨 :2026-06-10, 1d section 投產單 5002 C1 下料 :2026-06-05, 1d B1 下料 :2026-06-06, 1d C2 沖孔 :2026-06-06, 1d B2 折床 :2026-06-07, 1d C3 去毛邊 :2026-06-07, 1d A★ 組裝 :2026-06-08, 2d D1 焊接 :2026-06-10, 1d D2 噴漆 :2026-06-11, 1d D3 包裝出貨 :2026-06-12, 1d
異常值 (a):空批次(§RCS-FS-8)
input:投產單 = []。
空粗排結果 [](§RCS-FS-8:不報錯,合法空輸入)。
異常值 (b):投產單交期早於今日(§RCS-FS-3、未解 #10)
交期 06-01 < 今天 06-02。正推不受影響:LeanPlay 排程仍自起排日 06-03 起、落在未來(06-03~06-10),節拍點由起排日定錨、永不把排程夾到過去。只有 LSD 反推從 06-01 起算落於過去(05-25 等、視為無意義)。產品 LeanPlay 交期 06-10 晚於交期 06-01——引擎照樣產出日期、不判逾期、不擋下(是否逾期由下游比對)。
投產單 #5005 prioritySeq 1 交期 2026-06-01 產品 LeanPlay 交期 2026-06-10
| 站 | 角色 | LSD | LeanPlay 完工 | 序 |
|---|---|---|---|---|
| C1 下料 | 上游(拉動 N-x) | 2026-05-25 | 2026-06-03 | 1 |
| B1 下料 | 上游(拉動 N-x) | 2026-05-26 | 2026-06-04 | 2 |
| C2 沖孔 | 上游(拉動 N-x) | 2026-05-26 | 2026-06-04 | 3 |
| B2 折床 | 上游(拉動 N-x) | 2026-05-27 | 2026-06-05 | 4 |
| C3 去毛邊 | 上游(拉動 N-x) | 2026-05-27 | 2026-06-05 | 5 |
| A ★N 組裝 | ★節拍點 N | 2026-05-28 | 2026-06-07 | 6 |
| D1 焊接 | 下游(推動 N+y) | 2026-05-30 | 2026-06-08 | 7 |
| D2 噴漆 | 下游(推動 N+y) | 2026-05-31 | 2026-06-09 | 8 |
| D3 包裝出貨 | 下游(推動 N+y) | 2026-06-01 | 2026-06-10 | 9 |
eligibility 場景(節拍點多機台「棋盤」・#17)
獨立 toy:工作站 L 兩台機台 —— LA01
{LASR-L}、LA02{LASR-L, LASR-L2};各單節拍點 L=1 天、最早可開工日 06-03、分配固定機台序(id 小先・§RCS-FS-18)。機台僅內部記帳、輸出不含機台。
eligibility 正常值:棋盤並行(§RCS-FS-16)
兩單皆 LASR-L(eligible {LA01, LA02})→ 各佔一台、同日 06-03 並行;對照木桶(N=1)第二單會被擠到 06-04。
eligibility 邊界值:受限零件排擠、總產能高估(§RCS-FS-16/§RCS-FS-17)
兩單皆 LASR-L2(eligible {LA02} only)→ 只能在 LA02 串行:5301 06-03、5302 06-04,LA01 於 06-03 整天空著。「總產能」視角(06-03 兩台空)會誤判兩單同日完工——這正是 #17:總產能高估了受限零件的可用量。
eligibility 異常值:eligible 空集 → 拋例外(§RCS-FS-19)
input:投產單 =
[{poNo:5401, proc:LASR-L9}](無任何機台有 LASR-L9 能力)。→ 拋「無可用資源」例外、中止該次粗排(fail-fast,視為資料/設定錯誤;與 §RCS-FS-8 空批次容忍不同)。