根據員工需求,從指定的輪班範本產生轉換範本,以解決指定 SolveShiftGenerationRequest
的移位問題。
HTTP 要求
POST https://optimization.googleapis.com/v1/scheduling:solveShiftGeneration
這個網址使用 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 |
一天內開始輪班的最早時間。這個值會用小時和分鐘指定;秒和 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
說明在指定日期時間間隔內滿足需求的員工人數。
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 |
在指定時間範圍內違反涵蓋率政策。正值表示需求遭到忽略,負值則代表需求未涵蓋。 |