作者简介
博天,携程高级研发经理,关注大规模约束优化问题的建模和算法设计。
一、背景
客户服务部门是携程以服务质量赢得客户信赖的基石,其拥有上万名一线的客服,每天进线量巨大;且伴随着业务量的起伏,每一周甚至每一天的不同时段都有需求量上的巨大变化。
如何在各个时段满足客户服务指标,同时尽量提高客服的工作体验,提升整体工作效率?这里自然而然就产生了对智能排班的需求。排班问题的核心是用更少的客服资源,既保证用户的服务质量,又尽可能保障客服班次体验。在这样的背景下,今天我们要探讨的排班算法就成了优化服务质量与成本的一个重要课题。
二、应用效果
携程的客服团队历史悠久,在很长一段时期里,排班使用人工调整的方式,已经形成了一整套完整的更新流程。但是各个部门的逻辑又有很大的区别,比如欧洲的客服需要核对时区的变化;有些部门以人为单位排班,而有些部门的管理架构要加一层小组的概念来排班。这些不同的逻辑和概念,是为了更好的管理和协调整个服务部门的资源,在携程几十年的历史中发挥了重要的作用。但也为算法的落地带来了大量不一的约束。
现在智能排班已经为携程的多个部门提供班表生成服务,在十分钟内提供优质的班表,并且符合各部门各个工种对不同工作场景的约束需求。
某段指定时期的验证数据
三、问题分析
排班问题,实际上就是一个带大量软硬约束的超大规模最优化问题。这是一个整数规划问题,这类问题一般都是NP难的。
解决这类问题,传统的方法有:
1)精确算法,主要有割平面法,分支定界法。这类算法解决的问题有一些特点:一般针对的问题规模都较小;优势是求解出来的必定是最优解。不过我们遇到的问题规模极其庞大,此方法的效率太低,无法满足业务需求。
2)近似算法,根据问题使用一些技巧自己设计出来。需要给出算法的近似比,复杂度分析,具有很强的推理能力。这类算法放弃获得最优解,提升了一些性能,不过同1一样,这类算法所能求解的问题规模依然比较受限制。在我们这个场景下,问题规模依然过于庞大,无法满足业务需求。
3)启发式算法,和前两种算法相比,启发式算法没有足够严格的理论分析,是算法设计者们根据经验或者观察性质设计出来的。没有严格的理论分析,通过启发式算法获得解,我们无法知道其是否是最优解,甚至无法精确得到其离最优解还有多远的距离,但是其性能上的优势十分明显,即使我们这种大规模的问题,也可以在数十分钟内获得非常令人满意的结果。
由于携程客服数以万计,再加上数十种基本班次,整体问题规模十分庞大。传统方法在可接受的时间范围内无法给出可接受的解。因此我们最终选择了启发式算法来解决问题。
针对这类启发式优化问题,问题的建模是个十分重要的步骤,这一步的好坏将直接决定问题最终的解决效果。
3.1 Nurse Rostering Problem
遇到问题,首先想要找类似的问题。我们找到了一个有一些相似的护士排班问题(Nurse Rostering Problem,后文简称NRP),NRP可以很好地帮助我们理解问题。
护士排班问题是说在给定的时间内为特定的一组护士安排班次,并使该排班方案满足各种硬性约束条件,同时尽量满足各种软性约束条件。但为了方便后续理解,这里以the International Nurse Rostering Competition 2010的规则为例,简要介绍一下这个问题,这部分规则约束十分核心。
NRP问题的核心约束分软硬两类:
硬约束:
班次全部分配:每个班次都需要分配给一名员工。
班次不能冲突:员工每天只能轮班一次。
软约束:
这些约束实际情况中经常违反,因此这里决定将这些约束定义为软约束。
工作感受约束&#x