通过根据给定的班次模板生成班次,以满足员工需求,从而解决给定 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[] |
求解器生成的一组班次,以及分配给每个时间表的员工数。 |
SolverConfig
指定用于解决“Shift Generation”问题的其他参数。
JSON 表示法 |
---|
{ "timeLimit": string, "multiDaySchedule": boolean, "shiftEventsCanChange": boolean } |
字段 | |
---|---|
timeLimit |
求解器在问题上花费的时间上限。如果未设置,则默认为 1 分钟。时间限制的选择应取决于问题的规模。举个例子,当使用 2 个 这个值不是硬性限制,也没有考虑通信开销。解决该问题的预期延迟时间可能会略微超过此值。 此时长以秒为单位,最多包含九个小数位,以“ |
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 允许闰秒,则 API 可以允许 60 一值。 |
nanos |
秒数的小数部分(以纳秒为单位)。值必须是介于 0 和 999999999 之间的数字。 |
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[] |
此偏移中包含的事件的列表,这些事件准确映射到 |
事件
指定求解器生成的偏移中特定事件的开始和结束日期时间。
JSON 表示法 |
---|
{ "eventTemplateId": string, "startDateTime": { object ( |
字段 | |
---|---|
eventTemplateId |
用于生成此事件的模板的 ID。 |
startDateTime |
事件的开始日期和时间。该值精确到分钟;不提供秒和更小的单位。 |
endDateTime |
活动的结束日期和时间。该值精确到分钟;不提供秒和更小的单位。 |