Package google.research.optimization.v1.workforce

索引

休息一下

員工在輪班期間中斷工作的時間範圍。

欄位
start_date_time

DateTime

休息的開始時間。

duration_minutes

int32

廣告插播的持續時間,以分鐘為單位。

BreakRule

決定廣告插播時間點和廣告插播時間點的規則。所有可能的廣告插播清單都會以 rule_increment_minutes 為單位遞增。舉例來說,如果休息規則是從 10:00 到 11:00 開始的 30 分鐘休息時間,而規則增量是 20 分鐘,則視為的中斷點清單為:[10:00, 10:30]、[10:20、10:50]、[10:40]、1.1:10]0、1:10

欄位
earliest_start_time

DateTime

廣告插播的最早開始時間 (含)。只能設定 hoursminutes

latest_start_time

DateTime

廣告插播的最晚開始時間 (含)。只能設定 hoursminutes

duration_minutes

int32

廣告插播的持續時間,以分鐘為單位。

rule_increment_minutes

int32

[選用] 這項廣告插播規則可考慮的所有廣告插播時間,以分鐘為單位遞增。如果沒有設定,預設值為 duration_minutes

BudgetRequirement

指定時間間隔的預算需求。

欄位
total_budget

double

指定間隔的總預算。如果優先順序為 PRIORITY_MANDATORY,就必須指定總預算。

如果未設定 total_budget,系統就會根據指定的 priority,盡可能降低時間表的總費用。舉例來說,如果預算的 priorityPRIORITY_MEDIUM,那麼在降低優先順序為 PRIORITY_LOW 的任何限制違反規定之前,解題工具會將成本降到最低。

start_date_time

DateTime

套用這筆預算的開始時間。如未指定開始時間,則會設為所有指定位移的最早開始時間。

end_date_time

DateTime

套用此預算時的結束時間。如未指定結束時間,則會設為所有指定位移的最晚結束時間。

priority

Priority

在指定時間範圍內達到預算需求的優先等級。預設優先順序為 PRIORITY_LOW。如果優先順序設為 PRIORITY_MANDATORY,就必須設定 total_budget

請注意,如果這個優先順序高於其他限制優先順序,且 total_budget 偏緊,則產生的時間表可能會嚴重違反員工限製或支援範圍要求。

CoverageRequirement

防護需求會指定特定時間範圍內和地點,為一組角色和/或技能要求員工人數。特定位置的 DateTime 間隔不得重疊。或者,您也可以提供班表 ID 清單,而非時間範圍和地點。只有可獲派特定角色 (或具備特定技能) 的員工能滿足這項條件。

就特定職務和/或技能而言,如果在指定時間範圍內,至少有 target_employee_count 名以上員工隨時工作 (或shift_ids每次輪班時),就必須滿足保固服務要求。相較之下,如果在時間範圍內的任何時間點 (或shift_ids地區的任何輪班) 工作,則員工人數少於 target_employee_count 名,即屬於違反保固範圍。比 target_employee_count 更多的在職員工仍能滿足這項需求,但解題工具將員工配置的過量降到最低。

欄位
start_date_time

DateTime

涵蓋範圍規定的開始時間 (含)。如果設定,shift_ids 必須留空。

end_date_time

DateTime

涵蓋範圍規定的結束時間 (不含)。如果設定,shift_ids 必須留空。

location_id

string

員工所需地點。shift_ids 非空白,這個欄位必須留空。

shift_ids[]

string

在設定之後,角色和技能要求會分別套用至這份清單中的每個輪班 ID。如果 shift_ids 為非空值,則 start_date_timeend_date_timelocation_id 必須留空。

role_requirements[]

RoleRequirement

指定時間範圍內指派給指定角色的員工人數。每個角色 ID 最多只能有一個 role_requirement。每個要求的預設優先順序等級為 PRIORITY_MANDATORY。如果在時間範圍內,指派給指定角色的員工少於 target_employee_count 位,即違反這些限制。

skill_requirements[]

SkillRequirement

指定時間內獲派負責任職的指定技能的員工人數。每個技能 ID 最多只能提供一個 skill_requirement。每個要求的預設優先順序等級為 PRIORITY_LOW。在指定時間範圍內,任何時候具備特定技能的員工少於 target_employee_count 位員工,即違反這些限制。

RoleRequirement

指定時間範圍內指派給指定角色的員工人數。

欄位
role_id

string

要求的角色 ID。

target_employee_count

int32

指定時間範圍內指派給該角色的員工人數。

priority

Priority

這項要求限制的優先等級。所有資源限制的預設優先順序為 PRIORITY_MANDATORY

SkillRequirement

在指定時間範圍內具備特定技能的員工所需人數。

欄位
skill_id

string

要求技能 ID。

target_employee_count

int32

指定時間內有多少員工具備特定技能。

priority

Priority

這項要求限制的優先等級。所有資源限制的預設優先順序為 PRIORITY_LOW

DemandCoverageViolation

指出特定時間間隔違反的需求涵蓋範圍違規情況。整個指定間隔的員工需求都相同。

欄位
start_date_time

DateTime

需求間隔的開始日期和時間 (含)。這個值可以指定為分鐘。

end_date_time

DateTime

需求間隔的結束日期和時間 (不含)。這個值可以指定為分鐘。

coverage_violation

int32

在指定時間範圍內違反涵蓋率政策。正值表示需求遭到忽略,負值則代表需求未涵蓋。

員工

要排定工作團隊的員工。

欄位
id

string

指派給這位員工的專屬 ID。

role_ids[]

string

這位員工可執行的角色 ID。至少須指定一個角色。員工被指派值時,也會同時指派給此清單中的一個角色。在排程期間,系統可能會將員工指派給不同角色。

skill_ids[]

string

這位員工擁有的技能 ID。這份清單可以留空。指派職務給員工時,員工會在指派輪班期間運用這裡列出的所有技能,滿足相關技能要求。

shift_preferences[]

ShiftPreference

此員工的輪班偏好。此處指定的輪班代表了員工在表定期間要指派的位班。shift_preferences 中指定的偏移 ID 不得重複。解析器會盡可能提高所有符合 shift_preferencesShiftPreference.preference 值總和。

scheduling_constraints[]

SchedulingConstraint

這位員工的排程限制清單。這些限制的預設優先順序等級為 PRIORITY_MEDIUM。詳情請參閱 Priority 列舉。

resource_constraints[]

ResourceConstraint

未在 scheduling_constraints 中指定的其他排程限制可在此新增至 resource_constraintsResourceConstraint 是限制員工資源的更抽象表示法。這些限制的預設優先順序等級為 PRIORITY_MEDIUM。詳情請參閱 Priority 列舉。

shift_requests[]

ShiftRequest

員工的輪班要求清單。您可以為員工指派或非指派到特定輪班。凡是要為員工安排固定時段指派的工作,都能以 ShiftRequest 表示,優先順序為 PRIORITY_MANDATORY。這位員工最多只會顯示一個輪班 ID。這些要求的預設優先等級為 PRIORITY_LOW。詳情請參閱 Priority 列舉。

hourly_contract

HourlyContract

指明員工按時每小時收費的合約。

EmployeeDemand

說明在指定日期時間間隔內滿足需求的員工人數。

欄位
start_date_time

DateTime

指定需求的時間間隔開始時間 (含頭尾)。這些值會讀出到分鐘,秒和所有較小的單位都會遭到忽略。

end_date_time

DateTime

指定需求的時間間隔結束時間 (不含)。這些值會讀出到分鐘,秒和所有較小的單位都會遭到忽略。

employee_count

int32

滿足這段期間需求的員工人數。

EmployeeSchedule

一份經過排序的清單,內容對應至單一 ShiftTemplate,要指派給多名員工。

欄位
shift_template_id

string

用於產生這組移位的範本 ID。

shifts[]

ShiftWithEvents

獲派 employee_count 名員工人數的輪班清單。排定時間表選取的班表和事件都是使用單一範本產生。時間順序是依時間排序,不重疊。如果 SolverConfig.multi_day_schedule 為 true,則代表當天沒有開始偏移值,表示當天休息時間。

employee_count

int32

應該指派給員工人數,以因應需求。

ShiftWithEvents

指定開始與結束日期,並列出解題工具產生的位移事件清單。

欄位
start_date_time

DateTime

轉換的開始日期和時間。這個值會指定為分,秒和較小的單位。

end_date_time

DateTime

轉換的結束日期和時間。這個值會指定為分,秒和較小的單位。

events[]

Event

此轉變中包含且與 ShiftTemplate.Event 完全相同且順序相同的事件清單。如果 SolverConfig.shift_events_can_change 為 true,事件的開始和結束時間可能會在這個時間表的所有 ShiftWithEvents 中不同。

活動

在解題工具產生的偏移中,指定特定事件的開始與結束 DateTime。

欄位
event_template_id

string

用於產生此事件的範本 ID。

start_date_time

DateTime

事件的開始日期和時間。這個值會指定為分,秒和較小的單位。

end_date_time

DateTime

事件的結束日期和時間。這個值會指定為分,秒和較小的單位。

EventTemplate

範本指定規則,用於產生位移期間發生的單一事件。活動可以代表會議、休息時間、午餐等等。

欄位
id

string

此範本的專屬 ID。

minimum_minutes_after_shift_start

int32

此事件開始的改變之後的最少分鐘數。

maximum_minutes_after_shift_start

int32

這項活動可在位移開始後開始的分鐘數 (以分鐘為單位)。

duration_minutes

int32

此事件的固定時間長度 (以分鐘為單位)。

start_time_increment_minutes

int32

用於產生介於 minimum_minutes_after_shift_startmaximum_minutes_after_shift_start 之間一組可能事件開始時間的時間遞增 (以分鐘為單位)。舉例來說,假設位移開始後的最短分鐘數為 30,而轉變開始後的最短分鐘數為 45,而開始時間遞增為 5 分鐘,則活動可以發生轉變開始後的 30、35、40 或 45 分鐘。

HourlyContract

指定基本每小時費率、匯率差異和加時係數,以判斷員工的薪酬。請注意,不同地點的法規可能需要分別計算加班報酬。這個解題工具可用來估算過渡期補償,藉此降低總成本或達到預算的金額 (請參閱 BudgetRequirement)。此功能並非用來計算薪資的工具。

欄位
base_hourly_rate

double

非加班時數的補償。如果員工適用多種費率,則會根據這個基本每小時費率計算費率差異。此外,如果有多個費率,基本每小時費率應為這些費率的最低值。

hourly_rate_shift_differentials

map<string, double>

根據 base_hourly_rate 上的每小時費率差異支付。舉例來說,如果基本每小時費率為每小時 $30 美元,「shift_1」以每小時 $40 美元的費率支付;「shift_2」以每小時 $45 美元的費率支付,則 Proto 表示法為:base_hourly_rate: 30 hourly_rate_shift_differentials {key: "shift_1" value: 10} hourly_rate_shift_differentials {key: "shift_2" value: 15}

overtime_periods[]

OvertimePeriod

所有必須計算超時期間的清單。這些時段不得重疊。

OvertimePeriod

固定且定期 (通常為 168 小時或連續 24 小時的 7 個訂閱週期) 週期,用於決定加班薪酬金額。每個週期都有加時係數 (例如1.5) 以相對於 base_hourly_rate,且視為一般 (非加班) 工作的時數限制。任何與 start_date_time (含) 和 end_date_time (不含) 時間範圍重疊的位移,都會計入指定時間範圍內的總時數。如果只有重疊的時段,系統只會計算重疊的時段。

欄位
overtime_multiplier

double

計算長期每小時費率的乘數 (必須大於或等於 1.0)。每小時加班費用通常會以 base_hourly_rate * overtime_multiplier 計算。如果透過 hourly_rate_shift_differentials 提供多種費率,解題工具會估算進場時每小時的速率,簡單地平均計算指定時間範圍內適用的費率。注意:不同地區的法規可能需要分別計算加班報酬。這個解題工具可用來估算過渡期補償,藉此降低總成本或達到預算的金額,但其目的並非計算薪資。

start_date_time

DateTime

延長賽的開始時間。如果這次的位移時間重疊,這類位移的總時數就會從start_date_time計算。

end_date_time

DateTime

延長賽的結束時間。如果這次的位移時間重疊,這類調節時間的時數就會計入 end_date_time

maximum_regular_hours

double

以一般 (非加班) 費率支付的工作時數上限。數量必須為正數。

優先順序

員工時間表或防護需求方面的限制優先等級。包括 SchedulingConstraintResourceConstraintShiftRequestCoverageRequirement。可能會發生衝突,因此並非每次都能滿足每項限制。因此,每種限制條件都有其優先順序 (由使用者或預設規則指定),向解答者說明所有指定至完整時間表的限制的相對重要性。

列舉
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

Priority

這項資源限制的優先順序等級。所有資源限制的預設優先順序為 PRIORITY_MEDIUM

resource_usages

map<string, double>

班表使用的資源量。例如,如果此限制適用於某位員工在特定週可工作的時間下限和上限,則此地圖將包含當週發生的變動,以及每個輪班的時間 (以小時為單位)。

minimum_resource_usage

double

要滿足資源限制的最低資源用量。

maximum_resource_usage

double

滿足資源限制的資源用量上限。

SchedulingConstraint

特定員工的具體排程限制。指定的限制只會在指定的間隔 [start_date_time, end_date_time) 期間套用。

欄位
priority

Priority

這個排程限制的優先等級。所有排程限制的預設優先順序為 PRIORITY_MEDIUM

start_date_time

DateTime

套用這項排程限制的開始時間 (含)。

end_date_time

DateTime

這項排程限制生效時的結束時間 (不含)。

聯集欄位 type。指定的限制類型。每項限制都只會在上方指定的時間範圍內套用。type 只能是下列其中一項:
minimum_minutes

int32

員工至少能工作幾分鐘。如果員工獲派的輪班時間與時間範圍重疊 (完全或部分),則該位移與時間範圍重疊的分鐘數會納入計算。

maximum_minutes

int32

員工在時間範圍內可工作的分鐘數上限。如果員工獲派的輪班時間與時間範圍重疊 (完全或部分),則該位移與時間範圍重疊的分鐘數會納入計算。

minimum_consecutive_work_days

int32

至少員工可以連續工作的天數。如果員工被分配在當天開始的輪班,就會在特定日期進行工作。這段期間內指派給員工的任何輪班都會計入這項數據。

maximum_consecutive_work_days

int32

員工可連續工作的天數上限。如果員工被分配在當天開始的輪班,就會在特定日期進行工作。這段期間內指派給員工的任何輪班都會計入這項數據。

minimum_shift_count

int32

員工可進行的輪班次數下限。任何與職員完全重疊的輪班,都會計入這個次數。

maximum_shift_count

int32

員工可進行的輪班次數上限。任何與職員完全重疊的輪班,都會計入這個次數。

minimum_rest_minutes

int32

兩次輪班後,員工必須至少停留幾分鐘的時間,才能分配到其他輪班。這項限制適用於 [start_date_timeend_date_time] 中完整涵蓋的每組輪班。

Shift

班表是指員工在一段固定的期間內工作。

欄位
id

string

指派給這個變動的專屬 ID。

location_id

string

這項變動生效的地區 ID。這個參數可以留空。

start_date_time

DateTime

變動的開始時間 (含頭尾)。

end_date_time

DateTime

變動的結束時間 (不含)。解題工具目前僅允許長度小於 24 小時的位移。

break_rules[]

BreakRule

在轉移期間發生的破壞規則清單。執行這項轉變的員工每break_rule會選擇休息時間,期間他們並未涵蓋所履行角色的需求。每個 BreakRule 時間範圍都必須完整涵蓋在這項調整時間範圍內。

ShiftAssignment

員工擔任輪班指派。

欄位
employee_id

string

指派的員工 ID。

shift_id

string

指派給員工的班表 ID。

role_id

string

員工為輪班指派的角色 ID。

breaks[]

Break

這份排班指派的間隔清單。

ShiftGenerationSolutionStatus

解題工具回應中提供的解決方案狀態。

列舉
SHIFT_GENERATION_SOLUTION_STATUS_UNSPECIFIED 回應的狀態不明。
SHIFT_GENERATION_SOLVED 解題工具在規定的時間限制內找到解決方案。
SHIFT_GENERATION_NOT_SOLVED 發生問題,導致解題工具無法產生位移。
SHIFT_GENERATION_NOT_SOLVED_DEADLINE_EXCEEDED 無法產生價格調整,以因應指定時限內的需求。

ShiftPreference

特定偏移 ID 的數值偏好設定。

欄位
shift_id

string

指定偏好設定的 Shift ID。

preference

int32

較高的偏好值表示更理想的偏移值。

ShiftRequest

將員工的要求分配或未指派給特定輪班。

欄位
priority

Priority

此排程要求的優先等級。所有排程要求的預設優先順序為 PRIORITY_LOW

shift_ids[]

string

排程要求的轉移 ID。

type

WorkStatus

要求類型,例如是否指派要求給這組位移。

ShiftTemplate

指定產生位移規則的範本。輪班是一組工作,指明開始時間和結束時間,且可能含有活動 (例如午餐、休息時間等)。系統會將位移指派給回覆中的特定日期。

欄位
id

string

此範本的專屬 ID。

earliest_start_time

TimeOfDay

一天內開始輪班的最早時間。此值指定的時長包含小時和分鐘,會忽略秒數和 nano。

latest_start_time

TimeOfDay

一天內開始輪值的時間。此值指定的時長包含小時和分鐘,會忽略秒數和 nano。如果這個值小於 earliest_start_time,則這個範本產生的偏移值可能會在午夜之前或之後開始。

duration_minutes

int32

修正這個範本產生的位移持續時間。

start_time_increment_minutes

int32

用於產生介於 earliest_start_timelatest_start_time 之間一組可能開始時間的時間遞增單位 (以分鐘為單位)。舉例來說,如果最早的開始時間是 8:00,最晚開始時間為 8:30,開始時間是 10 分鐘,那麼這個排班範本的所有可能開始時間均為:8:00、8:10、8:20 和 8:30。

days_off_count_per_week

int32

固定每週休假天數。如果員工未獲派當天的輪班,則員工有指定休息日。一週是 7 天,從星期日開始。

event_templates[]

EventTemplate

每個班次產生事件的規則。在每個指定事件的轉變中,只會納入一個事件。

minimum_interevent_gap_minutes

int32

事件開始後至少需要幾分鐘。

maximum_employee_count

int32

可指派給這個範本產生所有輪班的員工人數上限。

SolutionStatus

解題工具回應中提供的解決方案 (亦即時間表) 狀態。

列舉
SOLUTION_STATUS_UNSPECIFIED 回應的狀態不明。
FEASIBLE 系統回傳的時間表可行,但可能並未達到最佳設定。
OPTIMAL 傳回的時間表是最佳設定。
INFEASIBLE 指定的限制沒有可行的排程。如果無法滿足優先等級 PRIORITY_MANDATORY 的任一限制,解析器可能會傳回這個值。
NOT_SOLVED 找不到任何排程。
NOT_SOLVED_DEADLINE_EXCEEDED 在指定時間範圍內找不到任何排程。

SolveParameters

用於控制排班排程問題單解的參數。

欄位
time_limit

Duration

解題工具應在問題上花費的時間上限。如果未設定,預設為 1 分鐘。

這個值並非硬性上限,且不會計入通訊負荷。解決問題的預期延遲時間可能會稍微超過這個值。

SolverConfig

指定其他參數以解決位移產生問題。

欄位
time_limit

Duration

解題工具應在問題上花費的時間上限。如果未設定,預設為 1 分鐘。選擇時間限制應取決於問題的大小。舉例來說,如果要用 2 ShiftTemplates 解析 7 天的執行個體,每個可能的開始時間為 20 個,且每個事件的開始時間約為 30,且每週會關閉兩天,建議值為 <10 秒 (可能不夠理想),建議值為 10 秒 (可能不夠理想),搜尋品質最好時 10 秒、300 秒以上;針對一個 300 秒,則針對某個搜尋提供 300 秒以上的事件。較大型的執行個體可能需要更長的時間限制。

這個值並非硬性上限,且不會計入通訊負荷。解決問題的預期延遲時間可能會稍微超過這個值。

multi_day_schedule

bool

如果為 true,解析器會產生包含數個輪班的 EmployeeSchedule (例如產生一週的時間表)。否則,每個 EmployeeSchedule 都只會包含一個位移。多日的時間表會假設輪班的開始時間都相同,且這類時間表的休假天數取決於轉換時間範本。預設值為 false。

shift_events_can_change

bool

如果為 true,多日 EmployeeSchedule 可能包含活動開始和結束時間的位移,這些時間安排在每一天內都不相同。否則,特定 EmployeeSchedule 的所有轉換都必須具有相同的事件開始和結束時間。無論是哪一種情況,多日時間表中的變動都具有相同的開始和結束時間。因此,如果 multi_day_schedule 為 false,系統就會忽略這個參數。將此參數設為 true 可能會延長解決時間。預設值為 false。

WorkStatus

員工是否正常運作。

列舉
WORK_STATUS_UNSPECIFIED 工作狀態不明。
STATUS_WORK 工作員工的狀態。
STATUS_NOT_WORK 代表非工作員工的狀態。