3 班员工排班 24/7 模式

3-Shift Employee Scheduling 24/7 Pattern

我在为我的 运行 基于 .Net C# 的应用程序创建三班制调度时遇到问题。

要定义问题,我们需要确定班次和 employee/s(eN) 的数量。

现在客户端只有3个默认班次,分别是:

  1. 早上 - 8:00am 到 4:00pm
  2. 摆动 - 4:00pm 到 12:00am
  3. 墓地 - 12:00am 到 8:00am

他们的员工总数是最少 7 名员工

现在我如何在一周或 7 天内安排所有员工,无论员工人数如何,每天都有一个平衡轮班人员,并且每次当一名员工休息一天时,每个人都应该洗牌。我希望每个员工每周都应该休息一天。

为了澄清问题,这里是我的插图:

在这种情况下,我们整周每天都有 7 名员工。每当一名员工休假时,员工应该洗牌以平衡健康的轮班过程。

DAY 1 - 7
---------------------------
Morning     |  2 Employees
Swing       |  2 Employees
Graveyard   |  2 Employees
Day-Off     |  1 Employee

另一个例子:

现在我们将有 8 名员工。为了平衡轮班人员,我想采用这种模式:

DAY 1
---------------------------
Morning     |  3 Employees
Swing       |  2 Employees
Graveyard   |  2 Employees
Day-Off     |  1 Employee

DAY 2
---------------------------
Morning     |  2 Employees
Swing       |  2 Employees
Graveyard   |  3 Employees
Day-Off     |  1 Employee

DAY 3
---------------------------
Morning     |  2 Employees
Swing       |  3 Employees
Graveyard   |  2 Employees
Day-Off     |  1 Employee

DAY 4
---------------------------
Morning     |  2 Employees
Swing       |  2 Employees
Graveyard   |  2 Employees
Day-Off     |  2 Employee

DAY 5
---------------------------
Morning     |  2 Employees
Swing       |  3 Employees
Graveyard   |  2 Employees
Day-Off     |  1 Employee

DAY 6
---------------------------
Morning     |  3 Employees
Swing       |  2 Employees
Graveyard   |  2 Employees
Day-Off     |  1 Employee

DAY 7
---------------------------
Morning     |  2 Employees
Swing       |  2 Employees
Graveyard   |  3 Employees
Day-Off     |  1 Employee

但系统不能仅限于 7 或 8 名员工,无论员工数量如何,它都应该动态适应。

这里是轮班的逻辑顺序:

            Morning   |   Swing   | Graveyard   |   Day-Off
Morning        ✔                                      ✔
Swing          ✔           ✔                         ✔
Graveyard      ✔           ✔           ✔             ✔
Day-Off        ✔           ✔           ✔              

NOTE: I don't ask for code for to create such a pattern, I would like you to help me comes up with a solution or dynamic helpful pattern that will help me solve this one.

我用谷歌搜索了每个日程安排网站,但它没有提供必要的想法或答案。'

非常感谢您的帮助

当我与一个 OPS 团队密切合作时,他们有一个简单的模式,但他们手动完成了调度。他们的工作方式是:

Employee 1: 
  Week 1: Morning
  Week 2: Swing
  Week 3: Graveyard

Employee 2:
  Week 1:  Morning
  Week 2:  Graveyard
  Week 3:  Swing

这意味着员工不会连续 2 周与某人一起工作,并且有固定的模式。

在我们的案例中,情况更复杂,因为他们工作了 5 天,然后休息了 2 天,除了晚上 shift/graveyard 工作了 4 天(由于需要额外的时间来恢复、额外的疲劳和工作后墓地直到第二天你才能工作(所以墓地到秋千或早上意味着你有额外的一天)。

无论您的轮班模式是什么,都会有您需要的最少人数和最多人数。在最大值之后,人们最终会有更多的休息时间。 然后你需要考虑其他因素,比如疾病、假期等

在我们的案例中,我们所做的是有额外的人员来处理这些因素。因此,Swing & Graveyard 的人数达到了上限(2 人),任何 'left over' 都被安排到白班,因为在我们的案例中,白天的工作量更大,所以无论如何都需要 2 个人以上。

所以您需要决定如果您的员工人数超过最大人数,或者您生病、休假等情况下会发生什么(向企业提问)

我的建议是计算出轮班模式的最小和最大人数,然后在笔和纸上绘制出来(或 excel!),然后添加额外的人并查看如何安排他们.一旦你知道了这一点,你就拥有了你的模型并可以对其进行编码。

您可能还需要一种手动覆盖它的方法,例如,在生病时将 employee1 更改为 employee7。然后你就有了重新安排的噩梦,以确定这有什么影响。

如果我将其映射到 Excel,使用 8 名员工,那么我得到以下结果;

在这里,我突出显示了 "Fred",您可以看到他在这几周内的表现模式。但是,对于每名超过最低限额 (7) 的员工,您最终会得到更多的假期和较长的休假时间。例如。 9 人 = 3 人休息和 9 周模式。

最后,您知道必须应用的业务规则,例如轮班间隔时间、每周休息天数、生病时该怎么做、假期等

您当然可以根据需要将其调整为每周 6 天或 5 天。而不是给人们整整一周的假期,然后在这几周他们 'extra' 分配给白班的资源。

以上是我的一些思考,希望对你有帮助。

配置

  1. 7天花名册配置

计划

  1. 考虑一轮作业为期一周
  2. 注意年假申请和public/company假期
  3. 获取每个员工一周应该有多少员工轮班

    Employee Shift
    A        6
    B        7
    ...
    
    • 对于全职员工,一周可能需要 6 个员工轮班
    • 对于兼职员工,可能一周轮班4人
    • 可能是员工信息的配置
    • 假设是一名全职员工,如果该员工的第 5 周员工轮班 (6-1) 有 public 假期
    • 如果他请了一天年假,那么这个员工的4个员工轮班(5-1)
  4. 员工可以申请固定leave/shift(预排班)

  5. 对于其他空闲轮班和免费员工轮班,使用公平的方式安排。到时候可以考虑这样一个table:

    Shift      Mon      Tue    Wed        Thu      ...
    Shift 1    ?        ?      ?          ?(Not B as AL)
    Shift 2    ?        ?      B(Fixed)   ?(Not B as AL)
    Shift 3    ?        ?      ?          ?(Not B as AL)
    Dayoff     A(Fixed) ?      ?          ?(Not B as AL)
    
    • 考虑一天一天来填补空缺
    • 每个slot的分配都会影响下一次分配,因为(employee-shift),(当天可用的员工)和(score)发生了变化。
  6. 管理在一段时间内(例如每个月)分配到每个轮班的每个员工的分数。

    Employee   Shift      Count
    A          Morning    10
    A          Swing      3
    A          Graveyard  5
    B          Morning    2
    B          Swing      2
    B          Graveyard  0 (selected)
    ...
    
  7. 根据评分方案分配轮班时间。

  8. 通过考虑逻辑顺序来防止墓地和下一个约会早上的情况。根据分数筛选可分配的候选者。
  9. 一轮分配后取消分配employee-shift,随机或按其他规则分配到其他时间段

其他考虑

  1. 考虑可用员工的数量少于配置中约会所需的员工数量

因为它只有 15 名员工,所以我会使用蛮力。为每位员工尝试一些不错的循环中的每一种可能性。评估每一种可能性。如果您在评估步骤中发现第一个为真,请跳过并采用此调度。如果你到达终点,你会遇到一个问题,因为它不可能找到一个调度器。
在每个可能的计划的评估步骤中,您需要检查是否满足每个人的每个条件。这在计算中可以是none多项式。但是对于只有15个人来说,PC应该没有时间。