干货 | 10分钟给上万客服排好班,携程大规模客服排班算法实践

员工到岗排班算法实现 1、需求描述 每周5个工作日,每个工作日只要求全员的部分员工到岗,实现公平下的自动排班,给出一个月的排班明细。 2、代码实现 /** * 自动排班 **/ public class ScheduleAutoJob { public static void main(String[] args) { //员工数组 String[] employeeArray = {"张三", "李四", "王五", "李丽", "孙萌", "张凯", "李炜", "赵明" 阅读详情

作者简介

 

博天,携程高级研发经理,关注大规模约束优化问题的建模和算法设计。

一、背景

客户服务部门是携程以服务质量赢得客户信赖的基石,其拥有上万名一线的客服,每天进线量巨大;且伴随着业务量的起伏,每一周甚至每一天的不同时段都有需求量上的巨大变化。

如何在各个时段满足客户服务指标,同时尽量提高客服的工作体验,提升整体工作效率?这里自然而然就产生了对智能排班的需求。排班问题的核心是用更少的客服资源,既保证用户的服务质量,又尽可能保障客服班次体验。在这样的背景下,今天我们要探讨的排班算法就成了优化服务质量与成本的一个重要课题。


二、应用效果

携程的客服团队历史悠久,在很长一段时期里,排班使用人工调整的方式,已经形成了一整套完整的更新流程。但是各个部门的逻辑又有很大的区别,比如欧洲的客服需要核对时区的变化;有些部门以人为单位排班,而有些部门的管理架构要加一层小组的概念来排班。这些不同的逻辑和概念,是为了更好的管理和协调整个服务部门的资源,在携程几十年的历史中发挥了重要的作用。但也为算法的落地带来了大量不一的约束。

现在智能排班已经为携程的多个部门提供班表生成服务,在十分钟内提供优质的班表,并且符合各部门各个工种对不同工作场景的约束需求。

某段指定时期的验证数据


三、问题分析

排班问题,实际上就是一个带大量软硬约束的超大规模最优化问题。这是一个整数规划问题,这类问题一般都是NP难的。

解决这类问题,传统的方法有:

1)精确算法,主要有割平面法,分支定界法。这类算法解决的问题有一些特点:一般针对的问题规模都较小;优势是求解出来的必定是最优解。不过我们遇到的问题规模极其庞大,此方法的效率太低,无法满足业务需求。

2)近似算法,根据问题使用一些技巧自己设计出来。需要给出算法的近似比,复杂度分析,具有很强的推理能力。这类算法放弃获得最优解,提升了一些性能,不过同1一样,这类算法所能求解的问题规模依然比较受限制。在我们这个场景下,问题规模依然过于庞大,无法满足业务需求。

3)启发式算法,和前两种算法相比,启发式算法没有足够严格的理论分析,是算法设计者们根据经验或者观察性质设计出来的。没有严格的理论分析,通过启发式算法获得解,我们无法知道其是否是最优解,甚至无法精确得到其离最优解还有多远的距离,但是其性能上的优势十分明显,即使我们这种大规模的问题,也可以在数十分钟内获得非常令人满意的结果。

 

由于携程客服数以万计,再加上数十种基本班次,整体问题规模十分庞大。传统方法在可接受的时间范围内无法给出可接受的解。因此我们最终选择了启发式算法来解决问题。

       

针对这类启发式优化问题,问题的建模是个十分重要的步骤,这一步的好坏将直接决定问题最终的解决效果。


3.1 Nurse Rostering Problem

       

遇到问题,首先想要找类似的问题。我们找到了一个有一些相似的护士排班问题(Nurse Rostering Problem,后文简称NRP),NRP可以很好地帮助我们理解问题。

护士排班问题是说在给定的时间内为特定的一组护士安排班次,并使该排班方案满足各种硬性约束条件,同时尽量满足各种软性约束条件。但为了方便后续理解,这里以the International Nurse Rostering Competition 2010的规则为例,简要介绍一下这个问题,这部分规则约束十分核心。

NRP问题的核心约束分软硬两类:

硬约束:

  • 班次全部分配:每个班次都需要分配给一名员工。

  • 班次不能冲突:员工每天只能轮班一次。

 

软约束:

这些约束实际情况中经常违反,因此这里决定将这些约束定义为软约束。

工作感受约束:

  • 班次分配范围分配:每位员工需要工作超过a个班次且少于b个班次(取决于合同或约定)。

  • 连续工作天数:每位员工需要连续工作c至d天(取决于合同或约定)。

  • 连续休息天数:每位员工需能连续休息e到f天(取决于合同或约定)。

  • 连续工作周末数:每位员工可以连续工作的周末数在g到h间(取决于合同或约定)。

  • 尽量保持周末完整:员工如果需要在周末上班,那就周末两天都值班,放休就要尽量两天都放休。

  • 周末上班班次一致:同一个员工在周末两天都上班的情况下,周末班次尽量保持一致。

  • 不人性化的排班模式:尽量避免前后班次间隔时间太短,或连续上太辛苦的班次。例如:第一天上晚班,第二天接着上早班;或者连续上3天早晚班。

员工对班次的一些临时期望:

  • 要求安排班次:某位员工想在指定的一天进行工作,尽量不要放休。

  • 希望放休:某位员工指定某一天希望能给其放休,不要安排班次。

  • 希望指定班次:员工希望能分配给其特定的班次。

  • 希望避免班次:员工不希望被分配到特定的班次。

技能要求:尽量安排上班的护士已熟练掌握该班次所需的技能。

 

看完约束,NRP问题的描述就很明了了。即在数值化定义好各个约束的重要性后,在尽量平衡所有约束的情况下,不停调整班表,获得最好的排班。

如下图,是一个最为简单的调整示例:

       

而最终的目标是得到一份最终班表,表示所有护士每天的班次安排。要注意在NRP问题中,调整的最小颗粒度是班次,这里将引出携程客服排班问题和NRP问题的最大不同。

3.2 携程集团客服排班

如开篇所述,携程的业务量每天都有着巨大的变化,加之我们的用户电话进线等待时间按秒计算,为了保证服务质量,对业务的控制需要细化到15分钟级别,才能保证服务质量,给用户带来最好的客服体验。

       

因此我们无法像NRP问题将排班简化为一天3个班次,而是细化到每天96个时段。由于整体安排的颗粒度细化到分钟级,就不能再仅仅安排班次,需要提高一个维度,额外计算员工的会议,休息,加班,放休等对每分钟业务量和应答量的影响。这导致整个问题复杂程度成指数级上升。

       

而且现实中的核心约束远比NRP复杂地多,总共近百条各种规则约束,对约束设计也提出了挑战。

       

约束设计需要数值化,但是数十上百的约束,两两之间的比例关系要恰当。这就要求数千的比例关系都要详细论证并且恰当,才能得到最终合适的班表,如若不然,很容易导致约束失衡,最终导致班表的不可用。比如,如果我们设计不合理,可能在业务量无法满足的基础上,安排部分员工超时加班,这将导致这部分员工的工作体验极差;或者在不需要的情况下,安排员工进行意义很小的加班,导致人员的浪费。


货币化约束设计

       

约束的数值化设计是问题的重点,但是问题的复杂性导致整个约束设计几乎非人力可为。

针对这一问题,我们提出了一种货币化的思路。所谓货币化,就是将单独的分数设计转换为一种标准分值(在这个场景下就类似于货币),统一货币化后,我们就可以直接将约束进行对比。

很多约束是天然可以货币化的,比如加班成本、津贴等等。余下无法天然货币化的部分,积极沟通,从业务角度给出一个初始的设计,再在算法使用中做微调,即可得到可用的约束设计与最终结果。

 

四、建模与设计


4.1 基础结构

如前所述,排班问题是一个超大规模的优化问题,解决这种问题我们选用启发式算法。根据以往经验,用启发式算法解决现实复杂问题的时候,最核心的是对问题进行建模,模型建立的好坏将直接决定后续系统的整体效果。

       

客服排班实际上就是要安排员工在每个时间段的工作状态(可能包括工作,休息,开会,加班等等),以及每个时段员工所做的技能工种。

       

因此,我们先抽象出一个最基础的模型,包含三个维度:员工,工种以及时间,这样就形成了一个三维度的空间。

 

三维空间中的每一块就是最小的工作状态安排单元

       

如上图所示,在这个模型下我们的目标就是填满整个空间,在尽量满足约束条件的情况下,给每个最小单元安排上工作状态(工作,下班,休息等),这样就获得了班表。

       

这样的结果逻辑上可行,但实际呢?


4.2 结构优化

       

我们先不考虑吃饭,开会等等复杂的设定条件,简单设定每个最小单元的工作状态为三种:工作,下班,休息。

       

按照基本结构直接进行排班是否可行呢?答案是肯定的。只需要通过算法调整每个最小单元的状态,在这三种状态中选择一个,然后设定合理的约束条件就能开始跑起来了,理论上也可以得到我们想要的结果。

不过设定好一切你会发现,根本得不到一个优秀的解,甚至一个合法的解都很难得到。这是因为按照这个模型去启发式搜索,搜索空间太广。我们可以简单算一下,设排班人数为100人,有2种不同的工种可以安排,安排一周的班次,时间颗粒度为30分钟,那整个任务的搜索范围高达:。

作为对比,宇宙中所有粒子总数大约在,围棋一共个19×19=361点,每个点由3种状态(黑,白,空),围棋所有的可能性也不过。

而真实情况远比这假设要复杂的多,整个问题的复杂度也是指数上升,无法算出合适的结果。

       

因此需要在基础结构上做一些优化,加一层结构。首先,变量由每个最小时间单元改为工作区间,设上班时间都是整点,那一天最多24个班次,加上本休不上班,一共25种可能。休息开会等可以抽象为上班时间内的整点“中断”,这样整体复杂度可以下降为大约:,这样总体看起来就是一个可解决的问题了。

五、算法流程

       

在有了模型的前提下,需要做一些算法选择与流程设计。我们首先做了一些基准测试,然后对整个算法流程做一个统一的规划与设计。


5.1 基准测试

我们获取了一个简化的业务场景,保存下来后,以此为基准搭建了一个基准测试。

首先测试了常见的算法,包括:FirstFit,Hill Climbing,Tabu Search,Late Acceptance,Great Deluge,Simulated Annealing。

以下是几个算法的部分测试结果:

硬约束结果对比

 

软约束结果对比

     

可以看到几种主要算法总体能得到的效果差异不大。从理论上来说,即使采用暴力搜索(Brute Force)的方式,只要时间够长,也总能得到一个不错的解。

而在实际的业务场景中,对于班表的计算速度是有很严苛的要求的。有时我们发现预测的业务量产生偏差,这时候就需要立刻重新生成当天之后的班表,并及时下发。对时间的要求是分钟级的,因此也要测试一下算法的运行速度。

几个重要算法的部分测试结果:

算法时间测试结果

       

而几个算法的提升速度,测试下来短期Tabu Search的结果提升较快,不过后续乏力,整体略逊于另外两个算法。


5.2 应用

这里的算法基准测试只是初步筛选一下可能有用的算法,整个计算流程中,从班次的确定,再到休息,加班,放休等的安排,实际是分多个层次的。从逻辑上讲,顺序应该是:

  • 确定班次

  • 确定加班放休安排

  • 确定休息,吃饭等当天安排

  • 确定周会安排

我们算法流程设计上也必须遵循一定的顺序,毕竟在班次没确定的情况下,我们也没办法安排当天的餐休。

因此流程上:

  • 先安排了First Fit,快速得到一个不太差的初始解。

  • 接下来选择能够短时快速提升的Tabu Search,仅仅针对班次,快速搜索找到一片高分区域。

  • 最后利用LAHC或Simulated Annealing等算法针对全部变量搜索一个较优解。


5.3 性能优化

       

在我们的业务场景中,问题规模很大,正常计算需要数小时甚至数天才能得到最终的结果,这一场景下是不可接受的。

一般的算法系统框架都是单机甚至单核的,这里首先要对算法系统进行多核支持,启发式算法的流程分为:

  • 选择待选步骤

  • 各步骤尝试

  • 确定下一步(或者找不到下一步)。

对整个流程进行梳理后,我们判断整个算法性能消耗最多的地方是第二步,也就是各个步骤的尝试部分,在这一步加入多线程的支持,在选择了待选步骤后,对各个待选项进行多线程的并行尝试。

事实证明,这一步将性能提升10倍以上。


5.4 分布式多机并行

       

但在有些场景下依然不能满足目标性能的需求,无法在30分钟内得到班表。因此我们不得不利用分布式计算的思想,将问题进行切分,尝试在多机上进行并行计算,最后将结果汇总,在主机上进行汇总计算。

了解启发式算法的同学应该清楚,这样每台单机都获得的是问题的一个子集,缺点是无法全局考虑问题,最终结果和单机运算相比会略有下降。但是性能确实成倍的提升,在多工种的特殊场景中,我们通过这种思路,实现了复杂工种技能下的混合排班。并且最终效果也依然能够达到我们对拟合度的要求。在启发式搜索问题中,这是一种损失少量效果而大幅提升速度的有效技巧。


六、平台结构

在算法的基础上,我们搭建了一套智能排班中台作为项目目标,使用户可以轻松访问服务,得到灵活的班表。

整体架构示意图:

整个系统包含多个模块,互相协调保证携程各个部门的灵活调用。

总体调用流程如下:

1)各个BU通过系统对接排班系统,将数据做清洗和标准化

2)进行基本的数据校验,在实际环境中,各种各样隐藏的矛盾错误数据,都需要在这一步识别出来。

3)合并人工录入的部分数据,考虑到部分数据的时效性以及一些偶发需求,我们需要开放人工信息的录入平台,让用户可以录入部分数据

4)建立模型

5)算法求解得到优质解

6)生成班表

7)(可选)人工微调

8)生成班表,并对接回各个业务系统


七、结语

       

随着越来越多的BU接入到智能化排班的系统中,算法平台发挥着更大的作用。在不断接触不同部门的过程中,我们也发现了模型建立中和算法设计中的各种问题。在我们长期的开发过程中,也走过不少弯路和死胡同,最终发现,需要全局的去看待一个业务问题,并提出解决方案,抓住真实痛点,才能最终落地。

团队招聘信息

我们来自携程酒店研发机器学习应用开发团队,负责各类算法技术的落地实践。酒店研发在机器学习应用,大数据开发,高负载并发,用户体验提升等领域不断探索创新,攀登高峰。

在这里,你能遇见经验丰富、技术水平高超的技术大牛,也能遇到与你同龄的来自世界各地的技术新星。如果你热爱探索,热爱技术,热爱旅行,携程酒店研发团队期待你的加入。目前我们规划方向(APS),数据分析方向,AI工程方向都有职位开放。

简历投递邮箱:tech@trip.com,邮件标题:【姓名】-【携程酒店】-【投递职位】。

【推荐阅读】

 “携程技术”公众号

  分享,交流,成长

排班算法 java_【算法】基于优先级的排班算法实现 场景:在大学的里,有不少社团组织会要组织中的成员值班,当然这个值班时间是学生无课的时间才会被安排值班。假设现有如下需求:一天中有3个时间段要有人值班,每周周一到周五都要值班,就是共有15个值班段,每个时间段值班的人都不一样,现有40个学生,要求根据这些学生的无课表情况安排值班,要求每个值班段必须有两个人,每个人一周只值班一次(如果某一值班段只有一人无课,那该值班段就只能一人值班)。小插一题,做一排... 阅读详情

相关推荐

java排班算法-几班几倒

System.out.println(i + 1 + "号排班:"+ dutyArr[(j+a)-dutyNum]);System.out.println(i + 1 + "号排班:"+ dutyArr[j+a]);String[] classArr = {"早班","中班","晚班","休息","休息"};String[] dutyArr = {"A组","B组","C组","D组","E组"};* 获取某个月的天数。

半人玖 2753

医院排班算法 护士排班法

护士是医院日常运营的基础,科学合理地安排护士工作时间不仅能够缓解其压力,提高护理质量,而且能够降低医院的人力资源运营成本,因此护士排班已成为医院管理工作的重要内容之一。 一、周排班法   排班以周为周期的方法为周排班法。一般由病房护士长根据病房护理工作情况进行安排。周排班的特点是对护理人员的值班安排周期短,有一定灵活性,护士长可根据具体需要对护理人员进行动态

书写人生 3万+

FDTD仿真进阶:液晶偏振调控与双折射效应全解析

本文深入解析了在Lumerical FDTD仿真中如何对液晶材料进行偏振调控与双折射效应建模。通过单轴液晶和螺旋扭曲液晶(TN-LCD)两大实战案例,详细阐述了从各向异性材料参数设置、LC网格属性配置到偏振椭圆分析的全流程,帮助工程师精准模拟液晶的光开关行为,优化如显示器等器件的光学性能。

chair的专栏 745

客服排班算法

1、需求描述 24小时全天候值守,一天三班倒,员工排班,全员每月相同休假。 2、代码实现 import lombok.*; import java.util.*; import java.util.concurrent.ConcurrentLinkedDeque; public class ScheduleTest { public static int days = 31;//下月天数 public static int employeeNum = 99;//员工人数

春风化雨 2545

电容式麦克风:从原理到实际电路波形解析

本文深入解析电容式麦克风的工作原理,从核心的振膜与背板结构、电荷锁定机制到场效应管放大器的作用。通过实物拆解与等效电路分析,阐明声音振动如何转换为电压信号,并指导如何用示波器实测波形,直观展现声电转换过程,适合电子爱好者和音频技术学习者。

Black的专栏 1080

WPS占用C盘空间解决方案与优化技巧

办公软件在长期使用过程中会产生大量缓存和历史文件,这些文件往往隐藏在系统目录中,导致磁盘空间被无声占用。以WPS为例,其版本历史备份、云同步缓存和模板库是主要空间占用源。通过分析文件存储机制,可以定位到具体的缓存路径,如AppData目录下的Kingsoft文件夹。针对这一问题,有效的解决方案包括手动清理、自动化脚本和注册表优化。对于需要持续监控的场景,可以结合PowerShell脚本和任务计划实现自动化管理。在实际应用中,这些技术不仅适用于WPS,也可迁移到其他办公软件的空间优化中,是每位IT运维人员和高

weixin_30788239的博客 455

2021-06-30

干货 | 10 分钟给上万客服排好班,携程大规模客服排班算法实践 https://www.infoq.cn/article/s7twkrUh2uE9sP42fcat 应用 这里的算法基准测试只是初步筛选一下可能有用的算法,整个计算流程中,从班次的确定,再到休息,加班,放休等的安排,实际是分多个层次的。从逻辑上讲,顺序应该是: 确定班次 确定加班放休安排 确定休息,吃饭等当天安排 确定周会安排 我们算法流程设计上也必须遵循一定的顺序,毕竟在班次没确定的

yangguoqi的专栏 464

2024年五大革新图像分割模型解析:架构创新与实战应用指南

本文深入解析2024年五大革新图像分割模型,包括SAM2、Mask2Former、DINOv2和Swin Transformer等,探讨其架构创新与实战应用。从多尺度处理、提示交互到自监督学习,这些模型在精度提升、效率优化和交互增强方面取得突破,广泛应用于医疗影像、工业质检和智慧城市等领域。

hadoop5ranger的博客 894

【智能排班系统】管理系统功能、操作说明(下篇)

本文介绍了智能排班系统的功能与使用方法,涵盖排班日历、任务管理等核心模块。通过月视图和周视图,用户可按职位或员工查询排班详情,并利用甘特图直观展示班次安排与统计信息。系统支持创建排班计算任务,设置规则、导入客流量数据,并通过两阶段算法完成班次制定与员工分配。管理员可查看、调整及发布排班结果,员工则能通过小程序接收通知。该系统优化了排班流程,提升了门店管理效率。

我只管埋头前行,剩下的交给时间。 6704

DeepMD-kit描述子机制解析:从原子坐标到不变性特征

本文深入解析DeepMD-kit描述子机制,详细阐述如何将原子坐标转换为具有平移、旋转和排列不变性的特征表示。探讨了se_e2_a、se_e3等不同描述子的适用场景及性能优化技巧,帮助读者掌握这一关键技术在分子模拟中的应用实践。

weixin_42520661的博客 340

Ubuntu使用cmake出现Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed

解决 Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed

qq_44225529的博客 1万+

【优化调度】基于matlab遗传算法求解公交车调度排班优化问题【含Matlab源码 2212期】

遗传算法求解公交车调度排班优化问题 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 6550

北斗导航 | 2023 PTTI会议论文 2023 ITM会议论文 2022 ION GNSS+ 会议论文下载:ION 美国导航学会

2023 国际技术会议(ITM) 2023 精密时间和时间间隔系统和应用会议(PTTI) 2022 美国导航学会国际会议(ION GNSS +)

尘世冰封的专栏 4612

【算法】基于优先级的排班算法实现

基于优先级的排班算法实现

LZGS_4的专栏 2万+

基于传统算法的半导体晶圆缺陷检测原理及代码(二)

了解基于传统算法的半导体晶圆缺陷检测原理和方法,对于深入理解半导体制造工艺和质量控制具有重要意义。在半导体制造技术持续创新的浪潮中,基于传统算法的缺陷检测技术也将不断演进,为半导体产业的高质量发展提供坚实可靠的技术支撑,确保在芯片制造的每一个环节都能精准识别和管控缺陷,推动半导体产业迈向更高的发展水平。基于传统算法的半导体晶圆缺陷检测技术在半导体制造的长期发展历程中扮演了重要角色,凭借其成熟的技术体系、较快的检测速度和相对较低的成本,在各个工艺阶段为保障晶圆质量发挥了关键作用。

m0_44975814的博客 2219

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

禁忌算法在智能排班的落地

背景: 复杂的排班规则: rule1: 员工每天工作时间不能超过8 小时 rule2: 员工连续工作时间不能超过2小时 rule3: 员工连续工作天数不能大于 5 天 rule4: 部门人员薪资要尽可能的最低 rule5: 员工总工作时长要尽可能的低 rule6: 员工每天排的班次数不能超过 3 次 rulen: 其他能想到的规则… 复杂的班次规则 rule7: 单个班次时长不能小于 2 小时 假设有A、B、C 三个部门,分别有员工 : A1、A2、…… An B1、B2、…… Bn C1、C2、…… Cn

weixin_38989369的博客 2347

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

基于遗传算法的护士排班问题(含Matlab源码)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分

qq_40755283的博客 9528

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

求个排班算法,感激不尽

c. 如果没有客流量的时候,至少需要1个店员值班.1为缺省值,可调整。d. 每天关店之后需要2小时做收尾工作(如盘点、清算、清洁)。e. 必须给工作时间完全覆盖午餐、晚餐时间的员工,安排午餐或晚餐。ii. 用户可以设置允许执行此类工作的职位。可以设置为所有职位,ii. 用户可以设置允许执行此类工作的职位。ii. 用户可以设置允许执行此类工作的职位。a. 午餐时间:时间范围(如11点到14点,半小时)b. 晚餐时间:时间范围(如17点到20点,半小时)职位,也可以限制特定职位(比如导购人员、收银,店经。

weixin_59279952的博客 1203

【优化调度】遗传算法求解公交车调度排班优化问题【含Matlab源码 2212期】

遗传算法求解公交车调度排班优化问题 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版)或下载付费资源,可赠送奶茶价版付费专栏指定代码1份; 2442

基于调度优先的排班系统

基于调度优先的排班系统 项目:学校有一个值班室,需要一天四班,一班两个人,一周值五天班。一个组织的学生需要为这个值班室值班,现要求,在学生无课的情况(不同班级,无课时间不同)下一周一人最多值两天班。 调度优先算法原理讲解:收集所有学生的无课表存入数据库,一天四班 x五天,需要20个班次,根据每班的无课人数进行升序排序,先对人数最少的班次进行排班,每排一个人要先对其查重处理,如果已经排过两次了,就跳过,如果不够两次,则写入数据库中的值班表中。接着、排数据库中这个班的下一个人,直至这个班次够两个人或者数据库中这

stop_here_find的博客 1612

【智能排班系统】雪花算法生成分布式ID

雪花算法是由Twitter公司设计的一种生成全局唯一ID的方法,适用于分布式系统环境。该算法通过组合时间戳、数据中心标识、机器标识以及序列号来生成64位的长整型ID,确保了ID的全局唯一性和趋势有序性。算法简单高效,具有高可用性和易于解析的特点,适用于数据库主键、消息队列、分布式事务等多种场景。通过使用如RandomWorkIdChoose或LocalRedisWorkIdChoose等策略,可以在有无Redis环境下生成非冲突的ID。

我只管埋头前行,剩下的交给时间。 1944

自动排班算法的设计与实现(日历算法)

你好,我是徐晓东,笔名燕云长风。大漠穷秋于 2019-03-16 21:22 赠此笔名。 寓意:结合李白著名的边塞诗《关山月》取【燕云长风】—— 长风几万里,吹度玉门关。 写这篇文章之前,酝酿了很久,希望把自己之前遇到的问题及解决方案分享给大家。 那年深秋,我接到了一个开发任务——XXX市公安交通智能化管控系统的排班管理系统。 最终我选择了angular技术栈来实践,天下武功,唯快不破。 为了大家...

weixin_34194087的博客 1万+

java 排班计划

根据排班次数对班组数量取余,得到应该执行任务的班组根据时间获取当前年 以及当年的每月天数每月天的序号数,对应班组则给出了排班结果然后三班倒就是正常往下捋班组就可以了两班倒的话,我这了采用的是翻转班组,这样就能实现: 月末那天晚班班组将继续下月第一天的白班 干24休息12。

学海无涯,我用JAVA 1555

1小时打造智能排班系统:蚁群算法实战

整个体验下来,最大的感受是平台确实大幅降低了算法原型的开发门槛。对于需要快速验证想法的场景特别实用,推荐给所有想做算法应用开发的朋友试试。算法目标是找到最优的路径组合,满足所有约束条件的同时最小化目标函数(比如员工满意度最高或人力成本最低)。的AI辅助和即时预览功能,可以快速验证算法效果,实时调整参数。特别是部署功能非常方便,一键就能把原型变成可分享的在线应用,省去了配置环境的麻烦。最近在做一个智能排班系统的原型开发,尝试用蚁群算法来解决这个经典的组合优化问题。蚂蚁数量:决定每次迭代的计算量。

AmberLeopard26的博客 736
上一篇: 干货 | Trip.com APP 启动优化实践
下一篇: 干货 | 一起聊聊技术与写作
携程技术
博客等级 码龄10年 3716粉丝 324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值