每月編更表

11 人・三更制・每人 8 天休息。此 prototype 以 deterministic heuristic 先安排 Rest Days,再安排 A/B/C,更表完成後會重新驗證全部硬性規則。
Prototype v0.1 · Scoring Inspector · 單一 HTML · 離線可用

1. 編更輸入

每名員工輸入 3 個指定休息日。指定日屬於每月 8 天休息日之內,可連續三天。Previous Shift / Streak 用於處理跨月 transition 及最多連續工作 6 天。
員工指定休息日 1 / 2 / 3上月最後更上月底已連續工作日
目前 Rest Day 排序偏好:保留 3 個指定日 → 優先把獨立指定日配成 RR → 優先休假人數較少的日子 → 打斷長工作期 → 再創造額外 RR → 避免系統主動形成不必要的 RRR / RRRR。
查看 v0.1 實際使用的計分權重Rule → Number

Rest candidate score 越高越好

新增一個 Preferred RR target+100
新增一個 2-day RR block+60
當日目前 0 / 1 / 2 / 3 / 4 人 R+40 / +35 / +25 / +10 / −30
最大 work streak 每減少 1 日+40
安排到目前最少 R 的月段+15
加劇月段集中−8
系統主動造成 RRR / 更長 block−30 / −50…

同一候選日可同時取得多項分數。例如把指定的 15 日變成 14–15 RR,可能同時得到 Preferred RR +100 及 RR block +60。

Rest repair quality 越高越好

Preferred RR targets achieved×1000
2-day RR blocks×80
5 個候選日的 staffing capacity逐日相加
System long-rest penalty直接扣除
Early/Mid/Late rest count range×−15

只有 greedy 產生的 8 個 R 會令最長連續工作超過 6 日時才啟動。它固定 3 個 Preferred R,窮舉可行的 5 個 System R 組合,再選 quality 最高者。

Hard constraints 不是分數

同日已有 5 人 R候選直接排除
Repair 後 max work streak > 6組合直接排除
B→A / C→A / C→B人選直接 filter
A / B / C 任一 < 2 人distribution 不成立
最後 validator 發現違規Schedule Invalid

Hard rule 不應靠「扣很多分」處理;它是 PASS / FAIL。這是 scoring optimization 與 constraint satisfaction 最重要的分別。

Shift assignment cost 越低越好

同一更 / R 後開始0
A→B、B→C+5 cost
A→C+10 cost
新 C block 為 2–3 晚−8 cost
C block 超過 3 晚每多 1 晚 +24
C 更人數差距 range×52
A / B 更人數差距 range×14
C totals 平方和×2.0
A / B totals 平方和×0.65

每日 A/B/C 人數的「imbalance」不是混入 cost,而是先作較高層的 lexicographic gate:先找最平衡而又可行的人數分布,再在該層中比較 cost。