직원 수요를 처리하기 위해 주어진 교대 근무 템플릿에서 교대 근무를 생성하여 주어진 SolveShiftGenerationRequest에서 교대 근무 세대 문제를 해결합니다.
HTTP 요청
POST https://optimization.googleapis.com/v1/scheduling:solveShiftGeneration
URL은 gRPC 트랜스코딩 구문을 사용합니다.
요청 본문
요청 본문에는 다음과 같은 구조의 데이터가 포함됩니다.
| JSON 표현 |
|---|
{ "solverConfig": { object ( |
| 필드 | |
|---|---|
solverConfig |
선택사항입니다. 문제 해결사의 매개변수입니다. |
shiftTemplates[] |
필수 항목입니다. 근무 이벤트를 생성하기 위한 규칙을 지정하는 교대 근무 템플릿 모음입니다. |
employeeDemands[] |
필수 항목입니다. |
응답 본문
Shift 세대 문제에 대한 응답입니다. 반환된 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분입니다. 시간 제한은 문제의 규모에 따라 선택해야 합니다. 예를 들어 2개의 이 값은 엄격한 제한이 아니며 통신 오버헤드를 고려하지 않습니다. 문제를 해결하기 위한 예상 지연 시간이 이 값을 약간 초과할 수도 있습니다. 소수점 아래가 최대 9자리까지이고 ' |
multiDaySchedule |
true인 경우 문제 해결사는 여러 교대 근무가 포함된 |
shiftEventsCanChange |
true인 경우 여러 날의 |
ShiftTemplate
교대 근무를 생성하기 위한 규칙을 지정하는 템플릿입니다. 교대 근무는 시작 시간과 종료 시간을 지정하는 작업 단위이며 이벤트 (점심, 휴식 등)를 포함할 수도 있습니다. 응답의 특정 날짜에 근무 시간이 할당됩니다.
| JSON 표현 |
|---|
{ "id": string, "earliestStartTime": { object ( |
| 필드 | |
|---|---|
id |
이 템플릿의 고유 ID입니다. |
earliestStartTime |
하루 중 근무 시간이 가장 이른 시간입니다. 이 값은 시간과 분으로 지정됩니다. 초와 나노는 무시됩니다. |
latestStartTime |
하루 중 근무 시간이 가장 늦은 시간입니다. 이 값은 시간과 분으로 지정됩니다. 초와 나노는 무시됩니다. 이 값이 |
durationMinutes |
이 템플릿에서 생성되는 이동 시간이 고정되어 있습니다. |
startTimeIncrementMinutes |
|
daysOffCountPerWeek |
일주일에 쉬는 날 수가 고정되어 있습니다. 직원이 해당 날짜에 시작하는 교대 근무에 배정되지 않으면 휴일이 주어집니다. 일주일은 7일이며 일요일에 시작됩니다. |
eventTemplates[] |
각 교대 근무의 이벤트를 생성하기 위한 규칙입니다. 지정된 각 이벤트의 각 교대 근무에 정확히 하나의 이벤트가 포함됩니다. |
minimumIntereventGapMinutes |
한 이벤트가 끝나고 다음 이벤트가 시작될 때까지 걸리는 최소 시간(분)입니다. |
maximumEmployeeCount |
이 템플릿으로 생성된 모든 교대근무에 할당할 수 있는 최대 직원 수입니다. |
TimeOfDay
하루 중 특정 시간을 나타냅니다. 날짜와 시간대가 중요하지 않거나 아무 곳으로 지정됩니다. 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 사이의 값이어야 합니다. |
EventTemplate
교대 근무 중에 발생하는 단일 이벤트를 생성하기 위한 규칙을 지정하는 템플릿입니다. 일정은 회의, 휴식, 점심시간 등을 나타낼 수 있습니다.
| JSON 표현 |
|---|
{ "id": string, "minimumMinutesAfterShiftStart": integer, "maximumMinutesAfterShiftStart": integer, "durationMinutes": integer, "startTimeIncrementMinutes": integer } |
| 필드 | |
|---|---|
id |
이 템플릿의 고유 ID입니다. |
minimumMinutesAfterShiftStart |
교대 근무 시작 후 이 이벤트를 시작할 수 있는 최소 시간(분)입니다. |
maximumMinutesAfterShiftStart |
교대 근무 시작 후 이 이벤트를 시작할 수 있는 최대 시간(분)입니다. |
durationMinutes |
이 이벤트의 고정된 기간(분) |
startTimeIncrementMinutes |
|
EmployeeDemand
지정된 DateTime 간격에 수요를 처리하는 데 필요한 직원 수를 지정합니다.
| JSON 표현 |
|---|
{ "startDateTime": { object ( |
| 필드 | |
|---|---|
startDateTime |
지정된 수요에 대한 시간 간격의 시작입니다 (해당 시간 포함). 이 값은 분 단위로 판독됩니다. 초이며 더 작은 단위는 모두 무시됩니다. |
endDateTime |
지정된 수요에 대한 시간 간격의 종료 시간입니다 (제외). 이 값은 분 단위로 판독됩니다. 초이며 더 작은 단위는 모두 무시됩니다. |
employeeCount |
이 간격에 대한 수요를 충당하는 데 필요한 직원 수입니다. |
ShiftGenerationSolutionStatus
문제 해결사의 응답에 제공된 솔루션 상태입니다.
| 열거형 | |
|---|---|
SHIFT_GENERATION_SOLUTION_STATUS_UNSPECIFIED |
응답의 상태가 지정되지 않았습니다. |
SHIFT_GENERATION_SOLVED |
문제 해결사가 제공된 시간 제한 내에 해결 방법을 찾았습니다. |
SHIFT_GENERATION_NOT_SOLVED |
문제가 발생하여 문제 해결사가 근무 시간을 생성할 수 없습니다. |
SHIFT_GENERATION_NOT_SOLVED_DEADLINE_EXCEEDED |
주어진 시간 제한 내에 수요를 처리하기 위한 교대 근무를 생성할 수 없습니다. |
EmployeeSchedule
여러 직원에게 할당할 단일 ShiftTemplate에 해당하는 정렬된 교대 근무 목록입니다.
| JSON 표현 |
|---|
{
"shiftTemplateId": string,
"shifts": [
{
object ( |
| 필드 | |
|---|---|
shiftTemplateId |
이 교대 근무 세트를 생성하는 데 사용된 템플릿의 ID입니다. |
shifts[] |
|
employeeCount |
수요를 충당하기 위해 이 교대 근무 세트에 배정되어야 하는 직원 수입니다. |
ShiftWithEvents
문제 해결사가 생성한 변화의 고정된 이벤트 목록과 함께 시작일 및 종료일을 지정합니다.
| JSON 표현 |
|---|
{ "startDateTime": { object ( |
| 필드 | |
|---|---|
startDateTime |
이동 시작 날짜 및 시간입니다. 이 값은 분 단위로 지정됩니다. 초와 작은 단위는 제공되지 않습니다. |
endDateTime |
이동 종료 날짜 및 시간입니다. 이 값은 분 단위로 지정됩니다. 초와 작은 단위는 제공되지 않습니다. |
events[] |
이 이동에 포함된 이벤트 목록으로, |
이벤트
문제 해결사가 생성한 시간 변화에서 특정 이벤트의 시작 및 종료 DateTime을 지정합니다.
| JSON 표현 |
|---|
{ "eventTemplateId": string, "startDateTime": { object ( |
| 필드 | |
|---|---|
eventTemplateId |
이 이벤트를 생성하는 데 사용된 템플릿의 ID입니다. |
startDateTime |
이벤트의 시작 날짜 및 시간입니다. 이 값은 분 단위로 지정됩니다. 초와 작은 단위는 제공되지 않습니다. |
endDateTime |
이벤트의 종료 날짜 및 시간입니다. 이 값은 분 단위로 지정됩니다. 초와 작은 단위는 제공되지 않습니다. |
DemandCoverageViolation
지정된 간격의 수요 범위 위반을 지정합니다. 직원 수요는 지정된 전체 구간에서 동일합니다.
| JSON 표현 |
|---|
{ "startDateTime": { object ( |
| 필드 | |
|---|---|
startDateTime |
수요 간격의 시작 날짜 및 시간입니다 (해당 시간 포함). 이 값은 분 단위로 지정됩니다. |
endDateTime |
수요 간격의 종료 날짜 및 시간입니다 (제외). 이 값은 분 단위로 지정됩니다. |
coverageViolation |
지정된 간격 동안의 노출 범위 위반입니다. 양수 값은 수요가 초과되었음을 나타내고 음수 값은 수요가 가려졌음을 나타냅니다. |