Я запускаю моделирование дискретных событий, которые охватывают более года. Все события необходимо отслеживать во второй временной шкале.
Теперь я хочу запланировать события в соответствии с расписанием, рассчитать сверхурочную работу, ... и сравнить его с реальным временем работы в конце. Я думал, есть ли элегантный способ реализации графики в 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
- Учитывая дату , когда кто-то работает: date (s)% s_in% 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 довольно продвинутый ...
Я работаю над задачей ... Надеюсь, с успехом! – Christoph