粗排引擎 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

角色LSDLeanPlay 完工
C1 下料上游(拉動 N-x)2026-06-082026-06-031
B1 下料上游(拉動 N-x)2026-06-092026-06-042
C2 沖孔上游(拉動 N-x)2026-06-092026-06-043
B2 折床上游(拉動 N-x)2026-06-102026-06-054
C3 去毛邊上游(拉動 N-x)2026-06-102026-06-055
A ★N 組裝節拍點 N2026-06-112026-06-076
D1 焊接下游(推動 N+y)2026-06-132026-06-087
D2 噴漆下游(推動 N+y)2026-06-142026-06-098
D3 包裝出貨下游(推動 N+y)2026-06-152026-06-109

邊界值:早交期但 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-0606-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

角色LSDLeanPlay 完工
C1 下料上游(拉動 N-x)2026-06-132026-06-031
B1 下料上游(拉動 N-x)2026-06-142026-06-042
C2 沖孔上游(拉動 N-x)2026-06-142026-06-043
B2 折床上游(拉動 N-x)2026-06-152026-06-054
C3 去毛邊上游(拉動 N-x)2026-06-152026-06-055
A ★N 組裝節拍點 N2026-06-162026-06-079
D1 焊接下游(推動 N+y)2026-06-182026-06-0812
D2 噴漆下游(推動 N+y)2026-06-192026-06-0913
D3 包裝出貨下游(推動 N+y)2026-06-202026-06-1015

投產單 #5002 prioritySeq 2 交期 2026-06-11 產品 LeanPlay 交期 2026-06-12

角色LSDLeanPlay 完工
C1 下料上游(拉動 N-x)2026-06-042026-06-056
B1 下料上游(拉動 N-x)2026-06-052026-06-067
C2 沖孔上游(拉動 N-x)2026-06-052026-06-068
B2 折床上游(拉動 N-x)2026-06-062026-06-0710
C3 去毛邊上游(拉動 N-x)2026-06-062026-06-0711
A ★N 組裝節拍點 N2026-06-072026-06-0914
D1 焊接下游(推動 N+y)2026-06-092026-06-1016
D2 噴漆下游(推動 N+y)2026-06-102026-06-1117
D3 包裝出貨下游(推動 N+y)2026-06-112026-06-1218

全單混排序(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

角色LSDLeanPlay 完工
C1 下料上游(拉動 N-x)2026-05-252026-06-031
B1 下料上游(拉動 N-x)2026-05-262026-06-042
C2 沖孔上游(拉動 N-x)2026-05-262026-06-043
B2 折床上游(拉動 N-x)2026-05-272026-06-054
C3 去毛邊上游(拉動 N-x)2026-05-272026-06-055
A ★N 組裝節拍點 N2026-05-282026-06-076
D1 焊接下游(推動 N+y)2026-05-302026-06-087
D2 噴漆下游(推動 N+y)2026-05-312026-06-098
D3 包裝出貨下游(推動 N+y)2026-06-012026-06-109

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。

投產單節拍點製程-工作站prioritySeq節拍點佔用日
5201LASR-L12026-06-03
5202LASR-L22026-06-03

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:總產能高估了受限零件的可用量。

投產單節拍點製程-工作站prioritySeq節拍點佔用日
5301LASR-L212026-06-03
5302LASR-L222026-06-04

eligibility 異常值:eligible 空集 → 拋例外(§RCS-FS-19

input:投產單 = [{poNo:5401, proc:LASR-L9}](無任何機台有 LASR-L9 能力)。→ 拋「無可用資源」例外、中止該次粗排(fail-fast,視為資料/設定錯誤;與 §RCS-FS-8 空批次容忍不同)。