AI 自動排班在算什麼?排班引擎作者的第一手拆解
「AI 自動排班」這五個字現在到處都是,但很少有人講清楚裡面到底在算什麼。我是好排班排班引擎的開發者,這篇用白話拆解一顆排班引擎的內部構造。看完你會知道 AI 排班系統能做到什麼、做不到什麼,以及怎麼判斷一套系統是真的在排班,還是只是把亂數穿上 AI 的外衣。
排班是一個「約束滿足」問題
對引擎來說,排班的本質是:在幾百個「人 × 日 × 班別」的組合裡,找出一組不違反任何硬規則、又盡量滿足所有偏好的解。這在電腦科學裡叫約束滿足問題(Constraint Satisfaction Problem)。
關鍵在把規則分成兩層。硬約束是絕對不能踩的線:員工標記不可排班的日子絕對不排、連續上班不超過六天(勞基法第 36 條七休一)、前後班之間至少 11 小時(第 34 條輪班間隔)、一個人一天只能一個班。違反硬約束的組合,引擎連考慮都不考慮,這就是「排不出違法班表」的意思。
軟偏好則是加分扣分:員工勾了「想上早班」加分、勾了「盡量避開」扣分、某人這期班數已經比別人多就降低優先度。引擎替每個候選人選打分數,每一格都挑分數最高的人。
為什麼每次按,排出來的班表不一樣?
好的引擎會刻意這樣設計。同分的候選人如果永遠按名冊順序挑,排出來的班表會固定偏袒名冊前面的人;所以引擎在同分時隨機打散,然後把整個排班流程跑很多輪,每一輪算一個全局分數(人力缺口扣最多、踩到避開日扣一些、工時不均也扣),最後只留分數最好的那一輪。
這就是為什麼 AI 排班表每次產生都略有不同,但每一版都合規。對店長的實際意義是:不滿意就再按一次,成本是幾秒鐘。
比排班更難的:把配額花在對的日子
實際開發中,最難的不是把班排滿,是「時機」。舉一個我們真實踩過的坑:正職月休 8 天等於全月要上 23 天班,如果引擎月初大方地讓三個正職天天同時上班,月底就會發生正職額度用罄、某天整天只剩工讀生的災難。
解法是替「超額人力」記一本預算:全月可以有幾天三個正職同時上班,是算得出來的固定數字,引擎按日期進度慢慢釋放這個預算,月初不超花,月底不斷糧。這種「跨時間的資源分配」是人工排班最容易失手、也是 AI 排班真正省力的地方。
好的 AI 排班系統,警告比排班重要
條件不可能永遠排得滿:人力就是不夠的月份、某週怎麼排都會超過 40 小時。這時系統的品格就顯現了。差的系統默默給你一張有問題的表;好的系統用白話告訴你「8/31 總人力低於下限」「這位員工當週工時 48 小時,請確認加班安排」,把決定權還給你。
挑選 AI 排班工具時,我建議直接問供應商:排不滿的時候,系統會怎麼告訴我?答案的具體程度,等於這套系統的誠實程度。
導入前要準備的三件事
- 把班別定清楚:早班幾點到幾點、有沒有休息時間。班別是排班的積木,積木不清楚,AI 排出來也是模糊的。
- 把規則說出口:每天最少幾個人、正職月休幾天、誰只能上哪些班。這些平常放在店長腦中的默契,要變成系統裡的設定。多數店家第一次做這件事會花一個晚上,之後每個月都在收成。
- 讓員工自己報意願:AI 排班的輸入是員工的可上班時段與偏好。與其店長代收,不如選一套員工在 LINE 上就能自己填的系統,資料新鮮度差很多。
想實際感受 AI 自動排班的話,好排班首頁有一顆可以按的「智能配班」按鈕,按下去會現場演算出一間六人飲料店的整月班表:正職精準月休 8 天、每天營業時段人力無空窗、零違規。那組數字不是文案,是引擎真的算出來的。