使用Python优化劳动力规划

372 阅读5分钟

使用Python和ErlangC优化劳动力规划

了解如何找到管理入站流量所需的最佳职位数量

照片:LisantoonUnsplash

寻找队列系统中使用的职位数量已经是一个研究案例了;它在多个领域和行业都有应用,例如,寻找呼叫中心代理的最佳数量,决定支持站的银行家数量,网络流量分析等等。

有几种方法可以分析这个问题;在这篇文章中,我们将看看如何使用Erlang C与Python的Pyworkforce包来解决这个问题。

1.队列系统

在最基本的Erlang C方法中,我们将系统表示为一个队列,其假设如下。

  • 有恒定速率的入站流量;入站流量遵循泊松过程
  • 系统有一个固定的容量;通常,一个资源在同一时间只能处理一个事务。
  • 在一个时间区间内有固定数量的可用位置
  • 当所有的位置都有总容量时,存在一个无限的队列长度,请求在这里等待一个位置的空闲。
  • 指数分布描述了队列中的保留时间
  • 队列中没有辍学现象。

一个具有这些特征的队列系统可能看起来像这样。

队列系统。图片由作者提供。

在这个表示中,我们可以看到几个有助于我们描述系统的措施;这里有它们的定义,以及我们从现在开始要如何称呼它们。

  • 交易。传 入请求的数量
  • **资源。**处理一个交易的元素
  • 到达率。在 一个时间间隔内传入交易的数量
  • 平均回答速度(ASA)。一 个交易在队列中等待被一个资源关注的平均时间
  • 平均处理时间(AHT)。 单个资源处理一个交易的平均时间。

图中还有其他变量,但这些变量对模型很重要,它们是。

  • 收缩率。 服务器不可用的预期时间百分比,例如,由于休息、预定培训等。
  • **占用率。**一个资源处理一个交易的时间的百分比
  • 服务水平。 在目标ASA之前到达资源的交易的百分比

Erlang C找到这个系统中的资源数量的方法是找到一个交易在队列中等待的概率,而不是立即被处理,它需要一个目标ASA和服务水平,并使用其他变量作为系统参数,如果你想知道更多关于Erlang公式的细节,你可以在文章的最后看到其他资源。

2.Python实例

作为一个例子,我们将找出一个呼叫中心所需的座席数量,以处理来电的流量。

在给定的惯例下,资源将是座席,而交易将是这种情况下的呼叫。

让我们假设在30分钟的时间间隔内,平均有100个来电,AHT是3分钟,预期缩减率是30%。

作为呼叫中心的管理者,我们希望事务在队列中等待的平均时间为20秒,并达到80%的服务水平。我们还想确保座席的最大占用率不超过85%。

为了解决这个问题,我们将使用Pyworkforce,这是一个用于劳动力管理、日程安排和优化问题的python包,所以我们来安装它。建议使用一个虚拟环境。

pip install pyworkforce 

这个包的使用非常简单,我们导入ErlangC,用给定的参数初始化这个类,然后用 "required_positions "方法找到处理事务的最小资源数量。考虑到该类希望所有的时间变量都是以分钟为单位。

medium.com/media/c2283…

这段代码的输出应该是这样的。

medium.com/media/da527…

这个字典给我们的是。

**raw_positions。**假设收缩率=0,找到的位置数

positions:根 据用户提供的缩减量找到的位置数

service_level:在 队列中等待时间不超过目标ASA的交易的预期百分比

占用率。 系统将有的预期占用率

**waiting_probability。**一个交易在队列中等待的概率

注意: 这个例子以30分钟的时间间隔对系统进行建模。Erlan C的假设可能适用;如果你想延长时间间隔,你可以用Erlang C的每个间隔的参数多次使用。

3.运行多次的Erlang C

如果你想同时尝试不同的参数,pyworkforce附带了一个MultiErlangC类,它允许你定义一组参数来进行迭代。

首先,创建一个参数网格;它必须是一个dict,并且每个参数选项必须在一个可迭代的列表中。

然后MultiErlangC要使用ErlangC方法,提供所有可能的参数组合。

例如,如果网格有三个交易值选项和两个收缩率选项,就会有六个不同的模型。

medium.com/media/446ca…

如果你有一个庞大的网格,你也可以使用参数 "n_jobs "来控制并发运行的作业,"-1 "意味着使用计算机中所有可用的CPU。

对于这个例子,我们只尝试三种不同的服务水平选项。

medium.com/media/48e89…

输出是每个方案的列表,结果与单独的Erlang C方法相同。

medium.com/media/308b9…

如果你喜欢表格格式的输出,你可以使用pandas,例如。

表格式的MultiErlangC。图片由作者提供。

4.最后说明。

Pyworkforce是一个让劳动力管理优化问题更容易理解的软件包;除了规模问题,还有其他的子问题,比如轮班安排和轮岗。想了解更多这方面的信息,你可以在Github上查看这个项目,我是这个项目的作者。任何建议或对软件包的贡献都非常欢迎:https://github.com/rodrigo-arenas/pyworkforce

5.参考资料

[1] Pyworkforce软件包:pypi.org/project/pyw…

[2] Erlang C公式:https://en.wikipedia.org/wiki/Erlang_(单位)


使用Python的劳动力规划优化最初发表在Medium上的Towards Data Science,在那里人们通过强调和回应这个故事继续对话。