2016-06-06 4 views
1

Я запускаю моделирование дискретных событий, которые охватывают более года. Все события необходимо отслеживать во второй временной шкале.
Теперь я хочу запланировать события в соответствии с расписанием, рассчитать сверхурочную работу, ... и сравнить его с реальным временем работы в конце. Я думал, есть ли элегантный способ реализации графики в 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 и каким-то образом вы получаете все из этого», но реализация этого:

  • делает графики независимо от разрешения по времени (дни, часы, минуты, Seco НСР).
  • Расписания/расписания не хранятся с избыточной информацией.
  • Любой результат (например, общий годовой оборот, ...) должен быть легко перенесен на любой заданный блок.
  • Легкие возможности фильтрации по месяцам, дням, ...
  • В идеале функциональность календаря (праздники, ...) может быть легко использована.
  • Возможно, как часть lubridate?

Используйте случай зрения ("график функции" указанные s_):

  • Время: s_hm («7:45»), s_md («Jan-23») или s_md («01- 23“). Обратите внимание, что эти «времена» не имеют значения в качестве дат или дат-времени, но в рамках расписаний они отлично действуют!
  • Интервал: s_interval. См. Первые мысли ниже.
  • Продолжительность: s_interval/dhours (1) => Продолжительность в часах
  • Функции:
    • Max(), Min() на любом s_interval
    • % s_in%
      • Учитывая дату , когда кто-то работает: date (s)% s_in% s_interval
        => return TRUE/FALSE (массив)
      • Учитывая расписание, когда кто-то доступен в интервале: s_interval% s_in% interval
        => return class interval - подмножество интервала!
      • Учитывая интервал, был ли труд согласно графику? Вычислить Бездействие, перегрузки или рабочее время: интервал% s_in% s_interval
        => Возвращение класса s_interval
    • Учитывая два графикам, рассматривать их как единое целое. Как Бездействие, сверх- и рабочее время распределяется: (s_interval1% +% s_interval2)
      => Возвращение класса 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 с некоторыми интересными ответами относительно timeline и gantt пакетов и how to filter dates. Однако они не очень убедительны.

Поскольку я совершенно новой для R, я не знаю, как начать такую ​​задачу наилучшим способом и понимание структуры пакета, как lubridate довольно продвинутый ...

+0

Я работаю над задачей ... Надеюсь, с успехом! – Christoph

ответ

0

Я разработал пакет который дает желаемую функциональность (даже с графиками). На данный момент пакет является приватным, но дайте мне знать, если вы заинтересованы.

 Смежные вопросы

  • Нет связанных вопросов^_^