手工排:快,但越改越乱
我先用最笨的办法,6个人排7天,每天早晚两班,每班至少2人,每人一周休1天。刚开始十分钟就能填满,看着挺顺。
问题出在检查。A连续上了4天晚班,B一周只休了半天,周六晚班又少一个熟手。手工排适合规则少的时候,一旦加上公平、技能、休息,脑子就像同时拎五个袋子,迟早掉一个。
运筹学怎么用,光讲概念没味道。我用一个7天排班小表实测了一遍:同样的人员、工时和休息限制,手工排、Excel试排、求解器建模,体验完全不一样,坑也很明显。
我先用最笨的办法,6个人排7天,每天早晚两班,每班至少2人,每人一周休1天。刚开始十分钟就能填满,看着挺顺。
问题出在检查。A连续上了4天晚班,B一周只休了半天,周六晚班又少一个熟手。手工排适合规则少的时候,一旦加上公平、技能、休息,脑子就像同时拎五个袋子,迟早掉一个。
第二轮我用Excel,把人名放行,日期班次放列,用1表示上班,0表示不上。再用SUM统计每班人数、每人工时。这个办法立刻比手工清楚,哪里缺人、谁超时,一眼能扫出来。
但它只是帮我看见问题,不会自动替我解决问题。我把C调去周六晚班,周三早班又空了;补上D,D的工时又超。Excel适合做台账和校验,真要找更优方案,要配规划求解。
第三轮我把变量、目标、约束写出来。变量是某人某天某班上不上;目标是缺人次数为0,同时夜班分配尽量平均;约束包括每天最多一班、每班人数够、每人至少休一天、晚班不能连续太多。
前面花时间最多,不在软件,而在想规则。比如“尽量平均”要变成数字,“不能太累”要变成连续班次数上限。模型一旦搭好,再改需求很快。多一个人、少一个班,改参数就行。
我也试了OR-Tools这类工具。好处是表达复杂约束更顺手,适合排班、路线、装箱这类问题。比如限制某两个人不能同班,或者某员工只能上白班,写进去并不难。
坏处是门槛更高。数据要整理干净,结果要会解释,出错时也要懂得排查。小团队第一次用运筹学,别急着写代码,先用纸和Excel把模型想明白。代码只是把思路跑快。
这次实测后,我对“运筹学怎么用”的理解很简单:先把问题写成表,再把规则写成约束,最后让工具找方案。最费劲的一步永远是前两步。
它不会替你判断业务对不对,但会把矛盾暴露出来。比如人手明明不够,却要求不加班、不缺岗、人人公平,模型会直接告诉你不可行。这一点很有价值,能少开很多没结果的会。
先挑重复发生的安排问题,比如排班、派车、补货。列目标、列限制、整理数据,再用Excel规划求解或Python工具跑一个初版,不要一开始就追求大系统。
能。小规模问题用Excel规划求解就够入门。编程适合数据量大、规则多、需要反复运行的场景。
先检查约束是不是写得太死,比如人数不足却限制不能加班。再分清硬约束和软约束,硬约束必须满足,软约束可以加惩罚而不是一刀切。