Решает проблему создания смен на основе заданного SolveShiftGenerationRequest
путем создания смен на основе заданных шаблонов смен, чтобы удовлетворить спрос сотрудников.
HTTP-запрос
POST https://optimization.googleapis.com/v1/scheduling:solveShiftGeneration
URL-адрес использует синтаксис транскодирования gRPC .
Тело запроса
Тело запроса содержит данные следующей структуры:
JSON-представление |
---|
{ "solverConfig": { object ( |
Поля | |
---|---|
solverConfig | Необязательный. Параметры решателя. |
shiftTemplates[] | Необходимый. Набор шаблонов смен, определяющих правила формирования смен. |
employeeDemands[] | Необходимый. Общий спрос сотрудников, который необходимо покрыть сменами, созданными с помощью |
Тело ответа
Ответ на проблему генерации смен. Если возвращенный solutionStatus
имеет значение SOLVED
, то набор допустимых сдвигов, сгенерированных решателем, возвращается в employeeSchedules
. Для действительного графика смен сохраняются следующие свойства:
- Каждая смена, созданная в
employeeSchedules
соответствует правилам, указанным в соответствующемShiftTemplate
. - Каждое событие, выбранное в каждой смене, соответствует правилам, указанным в соответствующем
ShiftTemplate.Event
. - Общее количество сотрудников, назначенных набору смен, созданному на основе одного и того же ShiftTemplate, не превышает
maximumEmployeeCount
этого шаблона. - Набор назначенных сотрудников покрывает спрос в каждый заданный интервал.
В случае успеха тело ответа содержит данные следующей структуры:
JSON-представление |
---|
{ "solutionStatus": enum ( |
Поля | |
---|---|
solutionStatus | Статус возвращенного решения. Если |
employeeSchedules[] | Набор смен, созданный решателем, а также количество сотрудников, назначенных каждому графику. |
demandCoverageViolations[] | Нарушения покрытия спроса на основе назначенных |
SolverConfig
Задает дополнительные параметры для решения проблемы создания смен.
JSON-представление |
---|
{ "timeLimit": string, "multiDaySchedule": boolean, "shiftEventsCanChange": boolean } |
Поля | |
---|---|
timeLimit | Максимальное время, которое решатель должен потратить на решение задачи. Если не установлено, по умолчанию — 1 минута. Выбор срока должен зависеть от масштаба проблемы. В качестве примера: при решении 7-дневного экземпляра с двумя шаблонами Это значение не является жестким пределом и не учитывает накладные расходы на связь. Ожидаемая задержка решения проблемы может немного превышать это значение. Длительность в секундах, содержащая до девяти дробных цифр и оканчивающаяся на « |
multiDaySchedule | Если принимает значение true, решатель генерирует |
shiftEventsCanChange | Если это правда, то многодневные |
ShiftШаблон
Шаблон, задающий правила формирования смен. Смена — это единица работы, которая определяет время начала и окончания и может содержать события (например, обед, перерывы и т. д.). В ответе смена будет назначена на конкретную дату.
JSON-представление |
---|
{ "id": string, "earliestStartTime": { object ( |
Поля | |
---|---|
id | Уникальный идентификатор этого шаблона. |
earliestStartTime | Самое раннее время дня, когда может начаться смена. Это значение указывается в часах и минутах; секунды и нано игнорируются. |
latestStartTime | Самое позднее время в течение дня, когда может начаться смена. Это значение указывается в часах и минутах; секунды и нано игнорируются. Если это значение меньше, чем |
durationMinutes | Фиксированная продолжительность смены, созданная этим шаблоном. |
startTimeIncrementMinutes | Приращение времени (в минутах), используемое для создания набора возможных времен начала между |
daysOffCountPerWeek | Фиксированное количество выходных в неделю. Сотруднику предоставляется выходной, если он не назначен на смену, начинающуюся в этот день. Неделя состоит из 7 дней и начинается в воскресенье. |
eventTemplates[] | Правила генерации событий для каждой смены. В каждую смену для каждого указанного события будет включено ровно одно событие. |
minimumIntereventGapMinutes | Минимальное количество минут между окончанием одного события и началом следующего. |
maximumEmployeeCount | Максимальное количество сотрудников, которое можно назначить на все смены, созданные с помощью этого шаблона. |
ВремяДня
Обозначает время суток. Дата и часовой пояс либо не имеют значения, либо указаны в другом месте. API может разрешить високосные секунды. Связанные типы: google.type.Date
и google.protobuf.Timestamp
.
JSON-представление |
---|
{ "hours": integer, "minutes": integer, "seconds": integer, "nanos": integer } |
Поля | |
---|---|
hours | Часы суток в 24-часовом формате. Должно быть от 0 до 23. API может разрешить использование значения «24:00:00» для таких сценариев, как время закрытия предприятия. |
minutes | Минуты часа дня. Должно быть от 0 до 59. |
seconds | Секунды минут времени. Обычно должно быть от 0 до 59. API может допускать значение 60, если он допускает дополнительные секунды. |
nanos | Доли секунды в наносекундах. Должно быть от 0 до 999 999 999. |
Шаблон события
Шаблон, определяющий правила для создания одного события, происходящего во время смены. Событие может представлять собой встречу, перерыв, обед и т. д.
JSON-представление |
---|
{ "id": string, "minimumMinutesAfterShiftStart": integer, "maximumMinutesAfterShiftStart": integer, "durationMinutes": integer, "startTimeIncrementMinutes": integer } |
Поля | |
---|---|
id | Уникальный идентификатор этого шаблона. |
minimumMinutesAfterShiftStart | Минимальное количество минут после начала смены, в течение которого может начаться это событие. |
maximumMinutesAfterShiftStart | Максимальное количество минут после начала смены, в течение которого может начаться это событие. |
durationMinutes | Фиксированная продолжительность этого события в минутах. |
startTimeIncrementMinutes | Приращение времени (в минутах), используемое для создания набора возможных времен начала событий между |
Спрос на сотрудников
Указывает количество сотрудников, необходимых для покрытия спроса в заданном интервале DateTime.
JSON-представление |
---|
{ "startDateTime": { object ( |
Поля | |
---|---|
startDateTime | Начало временного интервала для данной заявки (включительно). Эти значения считываются с точностью до минуты; секунды, а все меньшие единицы игнорируются. |
endDateTime | Окончание временного интервала для данного спроса (эксклюзивного). Эти значения считываются с точностью до минуты; секунды, а все меньшие единицы игнорируются. |
employeeCount | Количество сотрудников, необходимое для покрытия спроса за этот интервал. |
Статус ShiftGenerationSolution
Статус решения указывается в ответе решателя.
Перечисления | |
---|---|
SHIFT_GENERATION_SOLUTION_STATUS_UNSPECIFIED | Неопределенный статус ответа. |
SHIFT_GENERATION_SOLVED | Решатель нашел решение за отведенное время. |
SHIFT_GENERATION_NOT_SOLVED | Проблема не позволяла решателю генерировать сдвиги. |
SHIFT_GENERATION_NOT_SOLVED_DEADLINE_EXCEEDED | Не удалось создать смены для покрытия спроса в установленный срок. |
График работы сотрудников
Упорядоченный список смен, соответствующий одному ShiftTemplate
, который должен быть назначен нескольким сотрудникам.
JSON-представление |
---|
{
"shiftTemplateId": string,
"shifts": [
{
object ( |
Поля | |
---|---|
shiftTemplateId | Идентификатор шаблона, который использовался для создания этого набора смен. |
shifts[] | Список смен, которым назначено количество |
employeeCount | Количество сотрудников, которые должны быть назначены на этот набор смен для покрытия спроса. |
ShiftWithEvents
Указывает дату начала и окончания, а также список фиксированных событий смены, созданный решателем.
JSON-представление |
---|
{ "startDateTime": { object ( |
Поля | |
---|---|
startDateTime | Дата и время начала смены. Это значение указывается с точностью до минуты; секунды и более мелкие единицы не приводятся. |
endDateTime | Дата и время окончания смены. Это значение указывается с точностью до минуты; секунды и более мелкие единицы не приводятся. |
events[] | Список событий, включенных в этот сдвиг, сопоставленных точно и в том же порядке, что и |
Событие
Указывает начальную и конечную дату и время определенного события в смене, созданной решателем.
JSON-представление |
---|
{ "eventTemplateId": string, "startDateTime": { object ( |
Поля | |
---|---|
eventTemplateId | Идентификатор шаблона, который использовался для создания этого события. |
startDateTime | Дата и время начала мероприятия. Это значение указывается с точностью до минуты; секунды и более мелкие единицы не приводятся. |
endDateTime | Дата и время окончания мероприятия. Это значение указывается с точностью до минуты; секунды и более мелкие единицы не приводятся. |
Нарушение покрытия спроса
Указывает нарушение покрытия спроса для данного интервала. Спрос на сотрудников одинаков на протяжении всего заданного интервала.
JSON-представление |
---|
{ "startDateTime": { object ( |
Поля | |
---|---|
startDateTime | Дата и время начала интервала спроса (включительно). Это значение указывается с точностью до минуты. |
endDateTime | Дата и время окончания интервала спроса (эксклюзивно). Это значение указывается с точностью до минуты. |
coverageViolation | Нарушение покрытия в течение указанного интервала. Положительное значение указывает на то, что спрос перекрыт, а отрицательное значение указывает на то, что спрос недостаточно покрыт. |