C# 三班制员工安排24/7模式

C# 三班制员工安排24/7模式,c#,schedule,C#,Schedule,我在为运行在.Net C#之上的应用程序创建三班制时遇到问题 为了确定问题,我们需要确定班次和员工人数(eN) 现在客户端只有3个默认班次,分别是: 上午8:00至下午4:00 秋千-下午4:00至凌晨12:00 墓地-上午12:00至8:00 员工总数为至少7名员工 现在,我如何在一周或7天内容纳所有员工,每天安排一名平衡轮班人员,而不考虑员工人数,并且每次有一名员工休息一天时,每个人都应该洗牌。我希望每个员工每周都有一天的假期 为了澄清这个问题,我举了一个例子: 在这种情况下,我们将在一周内

我在为运行在.Net C#之上的应用程序创建三班制时遇到问题

为了确定问题,我们需要确定班次和员工人数(eN)

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

  • 上午8:00至下午4:00
  • 秋千-下午4:00至凌晨12:00
  • 墓地-上午12:00至8:00
  • 员工总数为至少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        ✔           ✔           ✔              
    

    注意:我不需要代码来创建这样一个模式,我希望您能帮助我提出一个解决方案或动态有用模式来帮助我解决这个问题

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


    非常感谢您的帮助。

    当我与一个OPS团队密切合作时,他们有一个简单的模式,但他们是手工安排的。他们的工作方式是:

    Employee 1: 
      Week 1: Morning
      Week 2: Swing
      Week 3: Graveyard
    
    Employee 2:
      Week 1:  Morning
      Week 2:  Graveyard
      Week 3:  Swing
    
    这意味着员工连续两周没有和某人一起工作,并且有固定的模式

    在我们的案例中,情况更复杂,因为他们工作了5天,然后休息了2天,除了夜班/墓地工作了4天(由于需要额外的时间来恢复,额外的疲劳,在墓地工作后,你不能工作到第二天(所以墓地摇摆或早晨意味着你有额外的一天)

    无论你的轮班模式是什么,你需要的人数都是最小的,最多的。在最大值之后,人们会有更多的休息时间。 那么你需要考虑其他因素,如疾病、假期等。 在我们的案例中,我们所做的是,我们有额外的人员来覆盖这些因素。因此,Swing&Graveyard的人数最多(2人),任何“剩余”的人都被安排在白班,因为在我们的案例中,白天有更多的工作,所以无论如何都需要超过2人

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

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

    您可能还需要一种手动覆盖的方法,例如,在生病的情况下,将employee1更改为employee7。然后您将面临重新安排日程的噩梦,以确定这会产生什么影响

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

    在这里,我突出显示了“Fred”,你可以看到他一周一周的工作模式。但是,对于每一个超过你最低要求(7)的员工,你最终会有更多的休息日和更长的时间。例如,9人=3人休息和9周的工作模式

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


    当然,你可以根据需要将其调整为每周6天或每周5天。与其给员工放一整周的假,还不如在这几周给白班分配“额外”资源。

    以下是我的一些想法,希望对您有所帮助

    配置

  • 七天名册的配置
  • 日程安排

  • 假设一轮作业为期一周
  • 了解年假申请和公众/公司假期
  • 获取每个员工每周应轮班的员工数量

    Employee Shift
    A        6
    B        7
    ...
    
    • 对于全职员工,每周可能有6个员工轮班
    • 对于兼职员工,可能是一周4个员工轮班
    • 它可能是员工信息的配置
    • 例如,对于全职员工,如果该员工的第5周员工轮班(6-1)有公共假日
    • 如果他申请一天的年假,则该员工的4个员工班次(5-1)
  • 员工可以申请固定休假/轮班(预先安排)

  • 对于其他的自由班和自由班,用公平的方式来安排。在那个时候,你可以考虑这样的表格:

    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)
    
    • 日复一日地考虑填补空缺
    • 每个时段的分配将影响下一个分配,因为(员工轮班),(当天的可用员工)和(分数)发生了变化
  • 管理一段时间内(例如每月)分配给每个班次的每位员工的分数

  • 根据评分方案分配轮班时间

  • 通过考虑逻辑顺序,防止墓地和第二天早上的情况。根据分数筛选可分配的候选人
  • 对于一轮分配后未分配的员工班次,请将其随机或按其他规则分配到其他时间段
  • 其他考虑因素

  • 考虑可用员工数量少于配置中某个日期的员工需求

  • 因为只有15名雇员,我会使用蛮力。在夏娃的一些漂亮的循环中尝试每一种可能性
    Employee   Shift      Count
    A          Morning    10
    A          Swing      3
    A          Graveyard  5
    B          Morning    2
    B          Swing      2
    B          Graveyard  0 (selected)
    ...