3 班员工排班 24/7 模式
3-Shift Employee Scheduling 24/7 Pattern
我在为我的 运行 基于 .Net C# 的应用程序创建三班制调度时遇到问题。
要定义问题,我们需要确定班次和 employee/s(eN) 的数量。
现在客户端只有3个默认班次,分别是:
- 早上 - 8:00am 到 4:00pm
- 摆动 - 4:00pm 到 12:00am
- 墓地 - 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' 分配给白班的资源。
以上是我的一些思考,希望对你有帮助。
配置
- 7天花名册配置
计划
- 考虑一轮作业为期一周
- 注意年假申请和public/company假期
获取每个员工一周应该有多少员工轮班
Employee Shift
A 6
B 7
...
- 对于全职员工,一周可能需要 6 个员工轮班
- 对于兼职员工,可能一周轮班4人
- 可能是员工信息的配置
- 假设是一名全职员工,如果该员工的第 5 周员工轮班 (6-1) 有 public 假期
- 如果他请了一天年假,那么这个员工的4个员工轮班(5-1)
员工可以申请固定leave/shift(预排班)
对于其他空闲轮班和免费员工轮班,使用公平的方式安排。到时候可以考虑这样一个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)发生了变化。
管理在一段时间内(例如每个月)分配到每个轮班的每个员工的分数。
Employee Shift Count
A Morning 10
A Swing 3
A Graveyard 5
B Morning 2
B Swing 2
B Graveyard 0 (selected)
...
根据评分方案分配轮班时间。
- 通过考虑逻辑顺序来防止墓地和下一个约会早上的情况。根据分数筛选可分配的候选者。
- 一轮分配后取消分配employee-shift,随机或按其他规则分配到其他时间段
其他考虑
- 考虑可用员工的数量少于配置中约会所需的员工数量
因为它只有 15 名员工,所以我会使用蛮力。为每位员工尝试一些不错的循环中的每一种可能性。评估每一种可能性。如果您在评估步骤中发现第一个为真,请跳过并采用此调度。如果你到达终点,你会遇到一个问题,因为它不可能找到一个调度器。
在每个可能的计划的评估步骤中,您需要检查是否满足每个人的每个条件。这在计算中可以是none多项式。但是对于只有15个人来说,PC应该没有时间。
我在为我的 运行 基于 .Net C# 的应用程序创建三班制调度时遇到问题。
要定义问题,我们需要确定班次和 employee/s(eN) 的数量。
现在客户端只有3个默认班次,分别是:
- 早上 - 8:00am 到 4:00pm
- 摆动 - 4:00pm 到 12:00am
- 墓地 - 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' 分配给白班的资源。
以上是我的一些思考,希望对你有帮助。
配置
- 7天花名册配置
计划
- 考虑一轮作业为期一周
- 注意年假申请和public/company假期
获取每个员工一周应该有多少员工轮班
Employee Shift A 6 B 7 ...
- 对于全职员工,一周可能需要 6 个员工轮班
- 对于兼职员工,可能一周轮班4人
- 可能是员工信息的配置
- 假设是一名全职员工,如果该员工的第 5 周员工轮班 (6-1) 有 public 假期
- 如果他请了一天年假,那么这个员工的4个员工轮班(5-1)
员工可以申请固定leave/shift(预排班)
对于其他空闲轮班和免费员工轮班,使用公平的方式安排。到时候可以考虑这样一个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)发生了变化。
管理在一段时间内(例如每个月)分配到每个轮班的每个员工的分数。
Employee Shift Count A Morning 10 A Swing 3 A Graveyard 5 B Morning 2 B Swing 2 B Graveyard 0 (selected) ...
根据评分方案分配轮班时间。
- 通过考虑逻辑顺序来防止墓地和下一个约会早上的情况。根据分数筛选可分配的候选者。
- 一轮分配后取消分配employee-shift,随机或按其他规则分配到其他时间段
其他考虑
- 考虑可用员工的数量少于配置中约会所需的员工数量
因为它只有 15 名员工,所以我会使用蛮力。为每位员工尝试一些不错的循环中的每一种可能性。评估每一种可能性。如果您在评估步骤中发现第一个为真,请跳过并采用此调度。如果你到达终点,你会遇到一个问题,因为它不可能找到一个调度器。
在每个可能的计划的评估步骤中,您需要检查是否满足每个人的每个条件。这在计算中可以是none多项式。但是对于只有15个人来说,PC应该没有时间。