具有季节性行为的应用程序的计划

时间:2016-06-06 06:09:50

标签: r date lubridate

我进行了超过一年的离散事件模拟。需要在第二时间范围内跟踪所有事件 现在,我想根据时间表安排事件,计算加班时间......并将其与最终的实际劳动时间进行比较。 我想是否有一种优雅的方式在R中实现计划,以便在一行代码中可以回答以下任务/问题:

  • 根据时间表安排工作。
  • 根据时间表,我们预计每天/每周/每月需要多少工时?计算每天/每周/每月的加班时间/ ...
  • 创建简单的图表以显示工作时间,加班时间......并将其与计划的工作量进行比较。

在抽象层面上,假设所有时间表都以下列方式给出或多或少

Name   Days_of_year     Available                             Time  
Name1  Jan-07 – Oct-18  Mon, Tues, Wed, Thurs, Fri, Sat, Sun  8:45 - 18:00  
Name2  Jan-01 – Dec-31  Mon, Tues, Wed, Thurs, Fri            20:00 - 7:00  

我不是在寻找明显的答案,例如“创建一个arry,不知怎的,你可以从中获取所有东西”,但实现

  • 使时间表独立于时间分辨率(天,小时,分钟,秒)。
  • 时间表/时间表不会存储冗余信息。
  • 任何结果(例如全年劳动力......)都应该很容易转移到任何给定的单位。
  • 按月,wday轻松过滤可能性......
  • 理想情况下,日历功能(假期,......)可以轻松使用。
  • 也许是作为lubridate的一部分?

用例视图(由s _表示的“调度函数”):

  • 时间:s_hm(“7:45”),s_md(“Jan-23”)或s_md(“01-23”)。请注意,那些“时代”并没有作为日期或日期时间,但在时间表的框架内,它们完美地显示出来!
  • 间隔:s_interval。请参阅下面的第一个想法。
  • 持续时间:s_interval / dhours(1)=>持续时间(小时)
  • 功能:
    • 任何s_interval上的Max(),Min()
    • %S_IN%
      • 考虑到约会,有人工作的时间: date(s)%s_in%s_interval
        =>返回TRUE / FALSE(数组)
      • 根据时间表,某个时间段内有人可用: s_interval%s_in%interval
        =>返回类间隔 - 间隔的子集!
      • 根据时间间隔,按计划进行劳动?计算闲置,过度和工作时间: 区间%s_in%s_interval
        => return class s_interval
    • 考虑两个时间表,将它们视为一个单元。如何分配闲置,过度和工作时间: (s_interval1%+%s_interval2)
      => return class s_interval

一些想法:

在计划劳动时间时

schedule

s_interval $tzone   UTC
    $daysofyear 286 days        (Better alternative: format month-day e.g. Jan-07 – Oct-18) 
    $wday           Mon, Tues, ... Sun  (According to the start time of a shift/lecture...)
    $time           12 h            (Better alternative: format time span* e.g. 8:00 – 18:00. NOT period which results in hours)
    $overtime       0 h         (A priori, a schedule does not plan overtime)
    $idle           0 h         (A priori, a schedule only plans labor time)
当实时数据可用时,

schedule

s_interval$tzone    UTC
    $daysofyear 286 days                (Better alternative: format month-day e.g. Jan-07 – Oct-18) 
    $wday           c(Mon, Tues, Wed, ...)      (According to the start time of a shift/lecture...)
    $time           c(12 h, 1 h, 0.5 h, ...)        (Better alternative: format time span* e.g. 8:00 – 18:00. NOT period which results in hours)
    $overtime       c(2 h, 0 h, -1 h, ...)      total time = time + overtime. Array of lubridate intervals*?
    $idle           c(4 h, 8 h, 0h, ...)        pure working_time = time – idle + overtime. Array of lubridate intervals*?

* Use intervals not periods such that interval/dhours(1) possible.

如果tzone相同,我们可以计算出例如。

s_interval1 %+% s_interval2 =  
s_interval$tzone    UTC
    $daysofyear    286 days,            123 days        
    $wday           c(Mon, Tues, Wed, ...),     c(Sat, Sun)
    $time          c(12 h, 1 h, 0.5 h, ...),    c(-1 h, 2.5 h)
    $overtime      c(2 h, 0 h, -1 h, ...),      c(0 h, 5 h)
    $idle          c(4 h, 8 h, 0h, ...),        c(4 h, 8 h)

有关于此主题visualization of schedules的相关帖子,其中包含有关timelinegantt个套餐以及how to filter dates的一些有趣答案。 但是,它们并不是非常确定的。

由于我是R的新手,我不知道,如何以最好的方式开始这样的任务,并且了解像lubridate这样的包的结构是非常先进的......

1 个答案:

答案 0 :(得分:0)

我开发了一个包,它提供了所需的功能(即使是绘图)。目前,该套餐是私密的,但如果您有兴趣请告诉我。