索引
Break
(消息)BreakRule
(消息)BudgetRequirement
(消息)CoverageRequirement
(消息)CoverageRequirement.RoleRequirement
(消息)CoverageRequirement.SkillRequirement
(消息)Employee
(消息)EmployeeDemand
(消息)EmployeeSchedule
(消息)EmployeeSchedule.ShiftWithEvents
(消息)EmployeeSchedule.ShiftWithEvents.Event
(消息)EventTemplate
(消息)HourlyContract
(消息)HourlyContract.OvertimePeriod
(消息)Priority
(枚举)ResourceConstraint
(消息)SchedulingConstraint
(消息)Shift
(消息)ShiftAssignment
(消息)ShiftGenerationSolutionStatus
(枚举)ShiftPreference
(消息)ShiftRequest
(消息)ShiftTemplate
(消息)SolutionStatus
(枚举)SolveParameters
(消息)SolverConfig
(消息)WorkStatus
(枚举)
休息时间
员工在轮班期间打断其工作的时间段。
字段 | |
---|---|
start_date_time |
广告插播开始时间。 |
duration_minutes |
广告插播时长(分钟)。 |
BreakRule
一条规则,用于确定何时可以在轮班和轮班中开始广告插播。所有被视为可能的广告插播时间点的列表是以 rule_increment_minutes
为增量确定的。例如,如果广告插播规则建模为从 10:00 到 11:00 之间开始的 30 分钟插播时间点,且规则增量为 20 分钟,则系统考虑的插播时间点列表为:[10:00, 10:30]、[10:20, 10:50]、[10:10, 0.1]、11
字段 | |
---|---|
earliest_start_time |
广告插播的最早开始时间(含此时间)。只能设置 |
latest_start_time |
广告插播时间点的最晚开始时间(含此时间)。只能设置 |
duration_minutes |
广告插播时长(分钟)。 |
rule_increment_minutes |
[可选] 此广告插播规则可考虑的所有广告插播时间点的时间增量(以分钟为单位)。如果未设置,则默认为 |
BudgetRequirement
给定时间间隔内的预算要求。
字段 | |
---|---|
total_budget |
指定时间间隔内的总预算。如果优先级为 如果未设置 |
start_date_time |
此预算适用的开始时间。如果未指定开始时间,则系统会将其设置为所有指定班次的最早开始时间。 |
end_date_time |
此预算应用的结束时间。如果未指定结束时间,则系统会将其设置为所有指定班次的最晚结束时间。 |
priority |
在指定时间范围内满足预算要求的优先级。默认优先级为 请注意,如果此优先级高于其他限制条件优先级,并且 |
CoverageRequirement
覆盖范围要求规定了在特定的时间范围内和/或地点在特定地点,担任一组角色和/或技能所需的员工人数。特定位置的日期时间间隔不能重叠。或者,也可以提供轮班 ID 列表,而不是时段和位置。只有可以分配给特定角色(或具备特定技能)的员工才能满足此要求。
对于给定的职位和/或技能,如果相应时间范围内每个时刻(或shift_ids
的每次班次)都至少有 target_employee_count
名员工在工作,则满足覆盖率要求。相反,如果在时间范围内的任何时间点(或shift_ids
的任何班次)在该时间范围内工作的员工数少于 target_employee_count
,则不符合覆盖率要求。比 target_employee_count
中的在职员工数多出仍然符合要求,但求解器可以最大限度地减少员工过多。
字段 | |
---|---|
start_date_time |
覆盖率要求的开始时间(含此时间)。如果设置了此字段,则 |
end_date_time |
覆盖率要求的结束时间(不含边界值)。如果设置了此字段,则 |
location_id |
员工工作地点。“ |
shift_ids[] |
如果已设置,角色和技能要求会分别应用于此列表中的每个轮班 ID。如果 shift_ids 不为空,则 |
role_requirements[] |
在时间范围内要分配给指定角色的所需员工人数。最多只能为每个角色 ID 指定一个 |
skill_requirements[] |
在相应时间范围内分配到轮班的必需员工人数。每个技能 ID 最多只能提供一个 |
RoleRequirement
在时间范围内要分配给指定角色的所需员工人数。
字段 | |
---|---|
role_id |
要求的角色 ID。 |
target_employee_count |
在时间范围内分配给该角色的预期员工数量。 |
priority |
此要求限制条件的优先级。所有资源限制条件的默认优先级均为 |
SkillRequirement
在指定时间范围内工作并具备指定技能的必要员工人数。
字段 | |
---|---|
skill_id |
要求的技能 ID。 |
target_employee_count |
符合指定技能的在一定时间范围内工作的理想员工数。 |
priority |
此要求限制条件的优先级。所有资源限制条件的默认优先级均为 |
员工
要安排的一名员工。
字段 | |
---|---|
id |
分配给此员工的唯一 ID。 |
role_ids[] |
此员工可以执行的角色 ID。必须至少指定一个角色。当员工被分配到某个轮班时,他们也会分配到此列表中的单个角色。在时间安排期间,员工可能会被分配不同的角色。 |
skill_ids[] |
此员工拥有的技能 ID。此列表可以为空。员工分配到某个轮班后,该员工会在分配给该轮班的整个期间使用本文所列的任意技能组合来满足技能要求。 |
shift_preferences[] |
调整此员工的偏好。此处指定的班次表示希望员工在时间安排期间分配到的班次。 |
scheduling_constraints[] |
此员工的时间安排限制条件列表。其中每个约束条件的默认优先级都是 |
resource_constraints[] |
未在 |
shift_requests[] |
员工的轮班请求列表。申请可以指派某个员工,也可以不为其分配特定班次。员工的任何固定时间安排分配都可以用优先级为 |
hourly_contract |
规定员工按时费率和加班费率计算的合同。 |
EmployeeDemand
指定在给定日期时间间隔内满足需求所需的员工数。
字段 | |
---|---|
start_date_time |
指定需求(含边界值)的时间范围的开始时间。这些值会读到分钟;秒和所有较小的单位都会被忽略。 |
end_date_time |
指定需求(不含边界)的时间间隔结束值。这些值会读到分钟;秒和所有较小的单位都会被忽略。 |
employee_count |
满足此间隔期间的需求所需的员工数。 |
EmployeeSchedule
一个有序排班列表,对应于要分配给多个员工的单个 ShiftTemplate
。
字段 | |
---|---|
shift_template_id |
用于生成此组偏移的模板的 ID。 |
shifts[] |
已分配 |
employee_count |
应分配到该组班次以覆盖需求的员工数。 |
ShiftWithEvents
指定开始日期和结束日期,以及求解器生成的偏移固定事件列表。
字段 | |
---|---|
start_date_time |
班次开始日期和时间。该值精确到分钟;不提供秒和更小的单位。 |
end_date_time |
轮班结束日期和时间。该值精确到分钟;不提供秒和更小的单位。 |
events[] |
此偏移中包含的事件的列表,这些事件准确映射到 |
事件
指定求解器生成的偏移中特定事件的开始和结束日期时间。
字段 | |
---|---|
event_template_id |
用于生成此事件的模板的 ID。 |
start_date_time |
事件的开始日期和时间。该值精确到分钟;不提供秒和更小的单位。 |
end_date_time |
活动的结束日期和时间。该值精确到分钟;不提供秒和更小的单位。 |
EventTemplate
模板,用于指定生成轮班期间发生的单个事件的规则。活动可能表示会议、休息、午餐等。
字段 | |
---|---|
id |
此模板的唯一 ID。 |
minimum_minutes_after_shift_start |
轮班开始后,此事件可以开始的最短分钟数。 |
maximum_minutes_after_shift_start |
轮班开始后,此事件可以开始的分钟数上限。 |
duration_minutes |
此事件的固定时长(以分钟为单位)。 |
start_time_increment_minutes |
用于生成一组可能的事件开始时间的时间增量(以分钟为单位),介于 |
HourlyContract
指定基本小时费率、差价和加班系数,以确定员工的薪酬。请注意,不同地方的法规对加班薪酬的计算方式可能有所不同。求解器可以估算加班时间的薪酬,以尽可能降低总费用的替代价值或达到预算要求(请参阅 BudgetRequirement
)。它不用作计算工资的工具。
字段 | |
---|---|
base_hourly_rate |
非加班时间的工资。如果员工适用多个费率,则会根据此基本小时费率应用差价。此外,如果存在多种费率,则基本每小时费率应为这些费率中的最小值。 |
hourly_rate_shift_differentials |
每小时费率差额,在 |
overtime_periods[] |
需要计算加时时间的所有时间段的列表。这些时间段不能重叠。 |
OvertimePeriod
一个有周期、定期重复的固定期限(通常为 168 小时或连续 7 个 24 小时的时间段),用于确定加班工资的金额。每个时间段都有一个加时系数(例如,1.5) 相对于base_hourly_rate
,以及被视为常规(非加班)工作时间的小时数限制。与 start_date_time
(含)和 end_date_time
(不含)时间范围重叠的任何班次都会计入该时间段内的工作小时数。如果重叠部分是重叠的,则系统只会计算重叠的小时数。
字段 | |
---|---|
overtime_multiplier |
用于计算加班每小时比率的乘数(必须大于或等于 1.0)。每小时加班比率通常计算方式为 |
start_date_time |
加时赛的开始时间。如果这次班次与此次班次重叠,则此次班次调整时间将从 |
end_date_time |
加时赛的结束时间。如果这次班次与此次班次重叠,则此次班次班次最多会计入 |
maximum_regular_hours |
按常规(非加班)费率支付的工作时间上限。此数量必须为正数。 |
优先级
对员工日程表或保险范围要求的任何限制条件的优先级。包括 SchedulingConstraint
、ResourceConstraint
、ShiftRequest
和 CoverageRequirement
。由于可能存在相互冲突的约束条件,因此并不总是能满足所有约束条件。因此,每种约束条件类型都有一个优先级(由用户指定或默认),告知求解器给定完整时间表的所有约束的相对重要性。
枚举 | |
---|---|
PRIORITY_UNSPECIFIED |
未知优先级。 |
PRIORITY_LOW |
最低优先级。具有此优先级的限制条件比其他限制条件重要。如果找不到可行的解决方案,该团队会第一个被视为违规。 |
PRIORITY_MEDIUM |
优先级为“中”。具有此优先级的约束条件比优先级为 PRIORITY_LOW 的约束条件更重要,但优先级为 PRIORITY_HIGH 的约束条件不太重要。如果在优先级为 PRIORITY_LOW 放宽所有约束条件后找不到可行的解决方案,则优先级为 PRIORITY_MEDIUM 的约束条件接下来会认为违规。 |
PRIORITY_HIGH |
最高优先级。具有此优先级的限制是最重要的限制。如果在放宽优先级较低的限制条件后仍无法找到可行的解决方案,则此类审核将是最后一项违规内容。 |
PRIORITY_MANDATORY |
表示求解器不能违反的优先级的优先级。如果求解器返回 SolutionStatus.INFEASIBLE ,可能是因为 PRIORITY_MANDATORY 约束条件过多。 |
ResourceConstraint
一种一般限制条件,用于限制员工所使用的特定“资源”的数量。这是更具体的 SchedulingConstraint
的抽象版本,对用户来说更灵活。许多无法在 SchedulingConstraint.type
中指定的时间安排限制条件都可以使用此消息指定。
字段 | |
---|---|
priority |
此资源限制条件的优先级。所有资源限制条件的默认优先级均为 |
resource_usages |
轮班使用的资源量。例如,如果此限制条件适用于员工在特定一周内的最短和最长工作时数,则此映射将包含当周轮班和每次班次的时长(以小时为单位)。 |
minimum_resource_usage |
要满足资源限制条件的最低资源用量。 |
maximum_resource_usage |
要满足资源限制条件的最大资源用量。 |
SchedulingConstraint
特定员工的特定日程安排限制条件。指定的约束条件仅在给定间隔 [start_date_time,
end_date_time)
内应用。
字段 | |
---|---|
priority |
此时间安排限制条件的优先级。所有时间安排限制条件的默认优先级均为 |
start_date_time |
应用此时间安排限制条件的开始时间(含此时间)。 |
end_date_time |
应用此投放时间限制条件的结束时间(不含)。 |
联合字段 type 。指定的限制条件的类型。每个限制条件仅在上述指定的时间范围内应用。type 只能是下列其中一项: |
|
minimum_minutes |
员工可以工作的最少分钟数。如果分配给员工的轮班与(完全或部分)时间窗口重叠,则这次轮班与时间窗口重叠的分钟数将包含在计数中。 |
maximum_minutes |
员工可以在时间范围内工作的分钟数上限。如果分配给员工的轮班与(完全或部分)时间窗口重叠,则这次轮班与时间窗口重叠的分钟数将包含在计数中。 |
minimum_consecutive_work_days |
员工可以连续工作的最短天数。如果员工分配到的班次是在某天开始的,则该员工会在特定日期工作。员工分配到的任何班次在这段时间内开始,都计入此次数中。 |
maximum_consecutive_work_days |
员工可以连续工作的最长天数。如果员工分配到的班次是在某天开始的,则该员工会在特定日期工作。员工分配到的任何班次在这段时间内开始,都计入此次数中。 |
minimum_shift_count |
员工可以工作的最小排班次数。员工分配到的任何班次与时间窗口完全重叠,都计入此次数中。 |
maximum_shift_count |
员工可以工作的轮班次数上限。员工分配到的任何班次与时间窗口完全重叠,都计入此次数中。 |
minimum_rest_minutes |
一轮班结束后,员工在被分配到另一轮班次之前必须休息的最短分钟数。此约束条件适用于 [ |
Shift
轮班指定了员工可以工作的固定时间范围。
字段 | |
---|---|
id |
为此班次分配的唯一 ID。 |
location_id |
进行此班次调整的地理位置 ID。此字段可以为空。 |
start_date_time |
班次的开始时间(含此时间)。 |
end_date_time |
轮班的结束时间(不含班次)。目前,该求解器仅支持时长少于 24 小时的偏移。 |
break_rules[] |
在轮班期间出现的换行规则列表。执行这种轮班的员工会按照 |
ShiftAssignment
一名员工负责转换角色。
字段 | |
---|---|
employee_id |
要分配的员工 ID。 |
shift_id |
分配给员工的轮班 ID。 |
role_id |
分配给员工的角色 ID。 |
breaks[] |
此轮班分配任务的插播时间点列表。 |
ShiftGenerationSolutionStatus
求解器响应中提供的解状态。
枚举 | |
---|---|
SHIFT_GENERATION_SOLUTION_STATUS_UNSPECIFIED |
未指定的响应状态。 |
SHIFT_GENERATION_SOLVED |
求解器在规定的时间内找到了解决方案。 |
SHIFT_GENERATION_NOT_SOLVED |
某个问题导致求解器无法产生位移。 |
SHIFT_GENERATION_NOT_SOLVED_DEADLINE_EXCEEDED |
无法在指定时间内按需求调整预算。 |
ShiftPreference
特定轮班 ID 的数字偏好设置。
字段 | |
---|---|
shift_id |
为其指定偏好设置的 Shift ID。 |
preference |
偏好值越大,表示效果的转变越可取。 |
ShiftRequest
员工提出的分配或不分配到特定班次的请求。
字段 | |
---|---|
priority |
此时间安排请求的优先级。所有时间安排请求的默认优先级均为 |
shift_ids[] |
时间安排请求的轮班 ID。 |
type |
请求类型,例如是否将该请求分配给该轮班。 |
ShiftTemplate
指定生成偏移的规则的模板。轮班是指定开始时间和结束时间的工作单元,可能会包含活动(如午餐、休息等)。系统会在回复中的特定日期分配偏移。
字段 | |
---|---|
id |
此模板的唯一 ID。 |
earliest_start_time |
一天中开始轮班的最早时间。此值使用小时和分钟指定;系统会忽略秒和纳米。 |
latest_start_time |
一天中可以开始调整的最晚时间。此值使用小时和分钟指定;系统会忽略秒和纳米。如果此值小于 |
duration_minutes |
此模板生成的偏移的固定时长。 |
start_time_increment_minutes |
用于生成一组可能的开始时间(介于 |
days_off_count_per_week |
每周固定的休息天数。如果员工没有分配到从当天开始的轮班,则该员工可以休息。一周为 7 天,从星期日开始。 |
event_templates[] |
用于为每个班次生成事件的规则。对于指定的每个事件,每个班次将只包含一个事件。 |
minimum_interevent_gap_minutes |
一项活动结束和下一项活动开始之间的最短分钟数。 |
maximum_employee_count |
此模板生成的所有班次可分配的员工数量上限。 |
SolutionStatus
求解器响应中提供的解(即时间表)状态。
枚举 | |
---|---|
SOLUTION_STATUS_UNSPECIFIED |
未指定的响应状态。 |
FEASIBLE |
返回的时间表可行,但可能不是最佳选择。 |
OPTIMAL |
返回的时间表是最佳的。 |
INFEASIBLE |
对于给定的约束条件,不存在可行的时间表。如果无法满足优先级为 PRIORITY_MANDATORY 的限制条件的任何子集,求解器可能会返回此值。 |
NOT_SOLVED |
未找到任何时间表。 |
NOT_SOLVED_DEADLINE_EXCEEDED |
在指定时间限制内找不到时间表。 |
SolveParameters
用于控制轮班调度问题单次求解的参数。
字段 | |
---|---|
time_limit |
求解器在问题上花费的时间上限。如果未设置,则默认为 1 分钟。 这个值不是硬性限制,也没有考虑通信开销。解决该问题的预期延迟时间可能会略微超过此值。 |
SolverConfig
指定用于解决“Shift Generation”问题的其他参数。
字段 | |
---|---|
time_limit |
求解器在问题上花费的时间上限。如果未设置,则默认为 1 分钟。时间限制的选择应取决于问题的规模。举个例子,当使用 2 个 这个值不是硬性限制,也没有考虑通信开销。解决该问题的预期延迟时间可能会略微超过此值。 |
multi_day_schedule |
如果为 true,求解器会生成包含多项偏移的 |
shift_events_can_change |
如果为 true,多日 |
WorkStatus
员工是否在工作。
枚举 | |
---|---|
WORK_STATUS_UNSPECIFIED |
工作状态未知。 |
STATUS_WORK |
代表在职员工的状态。 |
STATUS_NOT_WORK |
代表非职员工的状态。 |