根据给定的轮班模板生成班次,以满足员工需求,从而解决给定 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
指定用于解决 Shift 生成问题的其他参数。
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 |
活动的结束日期和时间。此值可细化到分钟;秒和更小的单位。 |
DemandCoverageViolation
指定给定时间间隔内的需求覆盖率违规情况。在整个指定的时间间隔内,员工需求是相同的。
JSON 表示法 |
---|
{ "startDateTime": { object ( |
字段 | |
---|---|
startDateTime |
需求间隔的开始日期和时间(含)。此值精确到分钟。 |
endDateTime |
需求间隔的结束日期(不含)。此值精确到分钟。 |
coverageViolation |
指定时间间隔内的覆盖范围违规。正值表示需求被覆盖,负值表示需求被低估。 |