資源篩選 (Resource Selection) Functional Spec
來源:resource-selection 下游:OOA(草稿) 性質:跨 feature 共用模組(Published Language);被 粗排 rough-cut-scheduler、細排 fine-grain-schedule 消費;消費 產能模組 capacity-module 驗證:
resource-selection.fp.validate.py(I/O 範例自洽性檢核,已通過;.py不上站)→ 執行結果 resource-selection.fp.validate-output.md 狀態:已簽核
概述
給一個 VSMNode(料號+製程+工作站),這個模組算出該節點真正的候選資源有哪些,整包回給呼叫方。能力自然推導、資源指派限定、限制關聯這三件事,只有它清楚;呼叫方(粗排/細排)只接結果,不碰指派參數、也不碰跨資源耦合。產出到「已排序的合格資源序列」為止,不做任何產能計算(§RS-UR-11)。
每一種「節點有宣告」的資源型別,模組各回一條序列:機台一定有,模具/操作員/技師要有宣告才有,不靠物理反推。每條序列都已套上該走的約束(能力路徑走能力過濾、指派路徑走韌性放行、機台再經 操作員→機台 耦合過濾),並帶明確順序值。
Use Cases
Actor 一律是呼叫方(粗排=節拍點;細排=每一 VSMNode),非人。四個 UC 是「同一套兩層篩選」套在不同情境/型別上的切面。
UC-A:能力匹配(VSMNode 無指派限定)
- Actor:呼叫方
- 觸發條件:給定一個 VSMNode,且其(對某資源型別)無指派限定
- 行為:
- 預期結果:一條「已排序的合格資源序列」(每元素帶順序值)
- 例外路徑:候選為空 → 見 UC-D /
§RS-FS-5
UC-B:指派覆寫(VSMNode 有指派限定)
- Actor:呼叫方(細排為主;粗排不走此路徑,只用能力匹配層,§RS-UR-8)
- 觸發條件:給定一個 VSMNode,且其(對某資源型別)有指派限定(外部設定檔已載入於模組內)
- 行為:
- 預期結果:以指派為準的「已排序合格序列」
- 例外路徑:(無)。指派路徑韌性放行、永不為空、永不拋 Exception(連耦合剔光也整批放行,§RS-FS-3/5)
BR-1(韌性放行)— 本模組最反直覺的設計,禁止下游「修正」回交集:
白話:現場若已硬指派某型別的資源(例如指定某幾台機台),模組就照單全收。就算那台機台能力上做不了這道製程、或配的操作員根本跑不了那台機台,模組都不擋,原樣放行。
精確規則:
- 指派優先:VSMNode 對某資源型別有指派限定時,以指派清單為準,不與能力匹配結果取交集。
- 不合理也放行:指派清單中的資源,即使能力不符、或耦合不相容(操作員跑不了該機台),一律保留、不在本模組排除。
- 耦合過濾只縮減、不清空:跨型別耦合(操作員→機台)只有在「還剩相容的替代資源」時才排除不相容者;若排到一個不剩,則整批放行、不清空。
- 能力匹配是 fallback:只有在「無指派」時才改用能力匹配挑資源(UC-A)。
例(耦合剔光仍放行):料號 Bz 指派機台
{M3}、需 OP1,但 OP1 只跑得了{M1,M2}(跑不了 M3)→ 模組仍回機台序列 = [(M3,序1)],不拋 Exception、不清空。
UC-C:限制資源的篩選與耦合過濾
- Actor:呼叫方(細排)
- 觸發條件:VSMNode 涉及限制資源(需某模具,或執行受操作人員/技師限制)
- 行為:
- 對每一種節點明確宣告的限制資源型別(模具/操作員/技師),各跑 UC-A 或 UC-B 同一套兩層篩選,產出該型別序列
- 模組內依單向限制關聯(操作員→機台,§CAP-UR-6)做跨型別耦合過濾:把機台序列中所需操作員跑不了的機台排除(排除規則見 BR-1)。例:料號 C 指派 {M1,M2,M3}、需 OP1,OP1 跑不了 M3 → 排除 M3 得 [M1,M2]
- 有宣告才回:節點未宣告的資源型別不回序列,且不靠物理事實反推(如料號 B 需 MOLD1 但未宣告技師 → 不回技師)
- 預期結果:{有宣告的資源型別 → 已排序合格序列} 的對應
- 例外路徑:(無)。指派路徑剔光則韌性放行、不為空(§RS-FS-3/4)
UC-D:能力路徑空集 → Exception
- Actor:呼叫方
- 觸發條件:**能力路徑(無指派)**下無任何資源能力涵蓋該 (製程,工作站)(能力空集)。指派路徑因韌性放行永不為空、不走此 UC(§RS-FS-3、BR-1)
- 行為:
- 偵測能力路徑候選為空
- 拋出 Exception(不回半套、不把空序列當正常結果)
- 預期結果:明確 Exception,中止該節點篩選
- 設計前提:資料正不正確,由模組外的前置檢查把關,不是本模組的職責。本模組只做一道防禦:能力路徑真的找不到任何資源時,就當場拋 Exception、中止該節點,不把空結果當正常往下傳(呼應
§RCS-FS-19:粗排遇空集中止排單)。此前提是 2026-06-11 Stage 2 對§RS-UR-4的修訂結論:「指派韌性放行、Exception 僅限能力空集」。
流程圖
對「單一資源型別」的篩選流程;模組對每個有參與的型別各跑一次,最後彙整。
flowchart TD Start[呼叫方給一個 VSMNode] --> PerType[取一個有宣告的資源型別] PerType --> HasAssign{該型別有指派限定?} HasAssign -- 有 --> Assign[指派覆寫·依指派順序值\n能力/耦合不符也放行 韌性 BR-1] HasAssign -- 無 --> Cap[能力匹配·依製程-工作站推導\n依能力順序值] Assign --> Prune[耦合過濾 操作員→機台\n排除規則見 BR-1] Cap --> Prune Prune --> Empty{能力路徑且候選為空?} Empty -- 是 --> Ex[拋 Exception 中止] Empty -- 否 --> Out[輸出一條已排序合格序列] Out --> More{還有其他有宣告型別?} More -- 有 --> PerType More -- 否 --> Done[彙整各型別序列回傳呼叫方]
I/O 範例
共用樣本資料(capacity-module):機台能力(某 (製程,工作站))涵蓋資源 = {M1, M2};限制關聯 OP1→{M1,M2}、MOP1→{MOLD1}。順序值欄位 =
resourceSelectionPriority(§RS-FS-9),以下以序N簡記。 下列為摘要;完整逐案計算結果由 script 自動產出、結果固定(每次跑都一樣) → §驗證執行結果。
UC-A(能力匹配 fallback)
正常值
- input:VSMNode 料號E@(P5,W5),無任何指派/限制;能力涵蓋資源 = {M1,M2}
- output:
機台序列 = [(M1,序1),(M2,序2)]
邊界值
- input:能力僅 {M2} 涵蓋該 (製程,工作站)
- output:
機台序列 = [(M2,序1)]
異常值
- input:無任何資源能力涵蓋該 (製程,工作站)
- output:Exception(必要型別「機台」候選為空,
§RS-FS-5)
UC-B(指派覆寫,含韌性放行)
正常值(料號 D)
- input:機台指派 {M1,M2,M3},無其他限制
- output:
機台序列 = [(M1,序1),(M2,序2),(M3,序3)]
邊界值①(韌性放行・能力不符)
- input:機台指派 {M1,M2,MX},其中 MX 能力不符該 (製程,工作站)
- output:
機台序列 = [(M1,序1),(M2,序2),(MX,序3)](MX 仍放行,BR-1)
邊界值②(韌性放行・耦合剔光不空)
- input:機台指派 {M3}、需 OP1(OP1→{M1,M2} 跑不了 M3)
- output:
機台序列 = [(M3,序1)]、操作員序列 = [(OP1,序1)](剔光 → 整批放行,不拋 Exception)
UC-C(限制資源篩選與耦合過濾)
正常值(料號 C:指派 {M1,M2,M3}、需 OP1;OP1→{M1,M2})
- input:機台指派 {M1,M2,M3};該節點需操作員 OP1
- output:
機台序列 = [(M1,序1),(M2,序2)] # M3 已剔(OP1 跑不了 M3) 操作員序列 = [(OP1,序1)]
邊界值(料號 A:能力機台 {M1,M2}、宣告需 MOLD1 + 技師 MOP1)
- input:無機台指派(能力 fallback);節點宣告需 MOLD1、且宣告 MOLD1 由 MOP1 換
- output:
機台序列 = [(M1,序1),(M2,序2)] 模具序列 = [(MOLD1,序1)] 技師序列 = [(MOP1,序1)]
補充(料號 B:指派 {M1,M2,M3}、需 MOLD1,未宣告技師)
- input:機台指派 {M1,M2,M3};宣告需 MOLD1(未提技師)
- output:
機台序列 = [(M1,序1),(M2,序2),(M3,序3)] 模具序列 = [(MOLD1,序1)] (無技師序列 ← 未宣告,不靠物理反推,§RS-FS-6)
UC-D(能力路徑空集 Exception)
異常值
- input:**能力路徑(無指派)**無任何資源涵蓋該 (製程,工作站)(能力空集)
- output:Exception,中止該節點篩選。(指派路徑因韌性放行不會到此)
邊界條件 / 異常情境
「編號」欄即全域碼
§RS-FS-{N}。RS見 spec-codes.md。append-only,不重編。
- §RS-FS-1
- 條件:VSMNode(對某型別)無指派限定
- 結果:走能力匹配 fallback,依能力順序值排序(UC-A)
- §RS-FS-2
- 條件:VSMNode(對某型別)有指派限定
- 結果:指派覆寫能力,依指派順序值排序(UC-B)
- §RS-FS-3
- 條件:指派資源能力不符、或耦合不相容(操作員跑不了該機台)
- 結果:仍放行、不擋(韌性放行;完整規則與例見 BR-1)
- §RS-FS-4
- §RS-FS-5
- 條件:**能力路徑(無指派)**無資源涵蓋 (製程,工作站) = 能力空集
- 結果:拋 Exception、中止(UC-D;呼應
§RCS-FS-19)。指派路徑韌性放行、永不為空、不拋 Exception
- §RS-FS-6
- 條件:某資源型別節點未宣告(如料號 D 無操作員、料號 B 未宣告技師)
- 結果:不回該型別序列;有宣告才回,不靠物理事實反推
- §RS-FS-7
- §RS-FS-8
- 條件:限制資源型別被指定時
- 結果:前提假設:不出現「同型別多選、且跨型別交叉耦合至不可行組合」(路 3)。此前提下各型別獨立序列即保證可組出可行解;跨型別組合不在模組職責
- §RS-FS-9
- 條件:—
- 結果:每個輸出元素帶一個明確順序值,欄名 =
resourceSelectionPriority(刻意避開既有 RCSprioritySeq命名碰撞);型別/放置 OOA 定
requirement 覆蓋對照
§RS-UR-1抽成共用模組- 對應:整份 spec
- 狀態:已涵蓋
§RS-UR-2兩層(能力 / 指派限定)- 對應:UC-A、UC-B
- 狀態:已涵蓋
§RS-UR-3覆寫式 cascade + 韌性放行- 對應:UC-B、BR-1、§RS-FS-2/3
- 狀態:已涵蓋
§RS-UR-4指派門檻例外行為§RS-UR-5限制資源=獨立資源- 對應:概述、UC-C
- 狀態:已涵蓋
§RS-UR-6key=VSMNode(料號+製程+工作站)- 對應:UC 前提、UC-A 步驟1
- 狀態:已涵蓋
§RS-UR-7配對 3/4=消費限制關聯- 對應:UC-C、§RS-FS-4
- 狀態:已涵蓋
§RS-UR-8消費契約(誰用哪層)- 對應:概述、UC-A/B Actor
- 狀態:已涵蓋
§RS-UR-9粗排前向註記、不動 tag/code- 對應:—
- 狀態:不在 FS 範圍(屬 RCS 演進,已於 RCS pseudo §7 註記)
§RS-UR-10不 spec 外部設定檔格式/維護- 對應:—
- 狀態:明確不做(scope 邊界)
- §RS-FS-7
- requirement 需求點:
§RS-UR-11不做產能計算 - 狀態:已涵蓋
- requirement 需求點:
§RS-UR-12與粗排共用同一機制- 對應:概述
- 狀態:已涵蓋
待裁定 / 未解問題
- Q1(已定,2026-06-11 Alan):輸出順序值欄名 =
resourceSelectionPriority,刻意避開既有 RCSprioritySeq(投產單順序)的同名兩義碰撞。型別/放置細節 → Stage 3 OOA。§RS-FS-9。 - Q2(OOA 時自動對齊,無需裁定):本 spec 用「VSMNode=料號+製程+工作站、工序不參與匹配」;[細排 §FGS-UR-5](../../requirement/fine-grain-schedule/index.md#q5) 措辭為「工序-製程-工作站節點」。兩者 substance 一致(工序是欄位、非匹配維度),純措辭差異,OOA 統一即可。
- Q3(不在本 spec,留 FGS 自行拍):細排是否一併消費本模組第 2 層(資源指派限定)=細排 scope 是否納入第 2 種匹配,屬 FGS 自己的 Stage 2,已於 [FGS §FGS-UR-4](../../requirement/fine-grain-schedule/index.md) 加註。本模組無論如何兩層都完整 spec,故不卡本 spec。
驗證 Script
- 路徑:
resource-selection.fp.validate.py(.py不上站;結果見下方 validate-output) - 跑法:
python resource-selection.fp.validate.py→ 已通過全部 assertion。 - 輸出:執行時另存一份人類可讀結果 →
resource-selection.fp.validate-output.md(自動產生、結果固定、請勿手改;spec 由此連結過去看實算結果)。 - 涵蓋:UC-A 能力 fallback(正常/邊界/能力空集)、UC-B 純指派/韌性(能力不符)/韌性(操作員不符仍回 M3)、UC-C 耦合排除/模具技師宣告/未宣告技師不回,外加順序值連續性。
- 定位:只驗證 I/O 範例自洽,非實作雛形(Stage 5 不照抄);跑得通 ≠ 設計正確。
簽核
- 編輯者:Alan / 日期:2026-06-12
- Reviewer:Alan / 日期:2026-06-12
- 簽核完成後,請把上方「狀態」欄改為「已簽核」。