透過從指定的排班範本產生偏移,以解決員工需求,藉此解決指定 SolveShiftGenerationRequest
的轉變產生問題。
HTTP 要求
POST https://optimization.googleapis.com/v1/scheduling:solveShiftGeneration
這個網址使用 gRPC 轉碼語法。
要求主體
要求主體的資料會採用以下結構:
JSON 表示法 |
---|
{ "solverConfig": { object ( |
欄位 | |
---|---|
solverConfig |
選用設定。解題工具的參數。 |
shiftTemplates[] |
必要欄位。一組轉移範本,用於指定產生位移的規則。 |
employeeDemands[] |
必要欄位。 |
回應主體
對 Shift 產生問題的回應。如果傳回的 solutionStatus
為 SOLVED
,則解題工具產生的一組有效位移會在 employeeSchedules
中傳回。如果是有效的輪班時間表,包含下列屬性:
employeeSchedules
中產生的每個 Shift 都會遵循對應的ShiftTemplate
中指定的規則。- 在每個班位中選取的事件,都會遵守對應
ShiftTemplate.Event
中指定的規則。 - 指派給從同一個 ShiftTemplate 產生的輪值集指派員工總數,最多不超過該範本的
maximumEmployeeCount
。 - 指派的員工會涵蓋每個指定時間間隔的需求。
如果成功,回應主體即會包含具有以下結構的資料:
JSON 表示法 |
---|
{ "solutionStatus": enum ( |
欄位 | |
---|---|
solutionStatus |
已傳回解決方案的狀態。如果 |
employeeSchedules[] |
解題工具產生的一組排班,以及指派給每個排程的員工人數。 |
SolverConfig
指定可解決 Shift 產生問題的其他參數。
JSON 表示法 |
---|
{ "timeLimit": string, "multiDaySchedule": boolean, "shiftEventsCanChange": boolean } |
欄位 | |
---|---|
timeLimit |
解題工具應花費多少時間處理問題。如果未設定,預設值為 1 分鐘。請根據問題大小,選擇適用的時間限制。舉例來說,假設解決一個為期 7 天的 這個值並非硬性限制,也不會影響通訊費用。解決問題的預期延遲時間可能會稍微超過這個值。 時間長度以秒為單位,最多可有 9 個小數位數,並結尾為「 |
multiDaySchedule |
如果為 true,解題工具會產生包含數次偏移的 |
shiftEventsCanChange |
如果為 true,多日的 |
ShiftTemplate
指定產生偏移規則的範本。輪班是指作業單位,可指定開始時間和結束時間,且可能會含有活動 (例如午餐和休息時間等)。系統會將轉移項目指派給回應中的指定日期。
JSON 表示法 |
---|
{ "id": string, "earliestStartTime": { object ( |
欄位 | |
---|---|
id |
此範本的專屬 ID。 |
earliestStartTime |
一天當中的最早時間。這個值是以小時和分鐘指定,會忽略秒數和 nanos。 |
latestStartTime |
一天內輪班可開始的最晚時間。這個值是以小時和分鐘指定,會忽略秒數和 nanos。如果這個值小於 |
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[] |
這項轉變所包含的事件清單,與 |
活動
指定解題工具產生的 Shift 值,藉此指定特定事件的開始和結束時間。
JSON 表示法 |
---|
{ "eventTemplateId": string, "startDateTime": { object ( |
欄位 | |
---|---|
eventTemplateId |
用於產生此事件的範本 ID。 |
startDateTime |
活動的開始日期和時間。這個值指定為「分鐘」;沒有提供秒及較小的單位。 |
endDateTime |
活動的結束日期和時間。這個值指定為「分鐘」;沒有提供秒及較小的單位。 |