Package google.research.optimization.v1

索引

最佳化

One Platform API 公開一系列已完成高階作業研究問題的最佳化解決器。MOE:begin_strip

DesignShippingNetwork

rpc DesignShippingNetwork(DesignShippingNetworkRequest) returns (DesignShippingNetworkResponse)

解決來自指定的 DesignShippingNetworkRequest 的訂單項運送網路設計和排程問題 (LSNDSP)。

LSNDSP 是複雜的最佳化問題,它致力於找出配線器運送網路的最佳設計和時程安排。目標是盡可能降低營運網路的總費用,同時盡可能滿足連接埠間的貨物需求。

LSNDSP 可分為兩個主要問題:網路設計和排程。網路設計子問題決定了網路要提供的通訊埠組合、每條路徑上部署的船隻數量,以及船隻會採取的路徑。排程子問題會決定船隻的帆船行程,考量的因素包括航行之間航行所需的時間、負載和卸載貨物所需時間,以及連接埠之間的貨運需求。

簡單來說,LSNDSP 面臨的問題,包括決定要提供的連接埠、可使用的船隻數量,以及如何安排船舶的時程,以盡量減少網路營運成本,同時盡可能提高滿足貨物需求的收益。LSNDSP 的一個較困難的子任務是貨運路線,可以判斷需要滿足哪些需求,以及要指派到貨運的路線,以便獲取最高收益。

SolveMathOptModel

rpc SolveMathOptModel(SolveMathOptModelRequest) returns (SolveMathOptModelResponse)

解析輸入模型並一次傳回結果。如果不需要回呼、漸進式,也不需要追蹤解題進度,就可以使用這個類型。

SolveShiftGeneration

rpc SolveShiftGeneration(SolveShiftGenerationRequest) returns (SolveShiftGenerationResponse)

根據員工需求,從指定的輪班範本產生轉換範本,以解決指定 SolveShiftGenerationRequest 的移位問題。

SolveShiftScheduling

rpc SolveShiftScheduling(SolveShiftSchedulingRequest) returns (SolveShiftSchedulingResponse)

將員工指派到位班,以盡量降低他們的排程偏好,並盡量減少違反排程限制的情況,藉此解決指定 SolveShiftSchedulingRequest 的固定班表問題。

DesignShippingNetworkRequest

要求會保留一個 LSNDSP 的例項,且必須包含一組連接埠、一組腿部候選人、一組船隻類別,以及一組要完成的商業需求。

欄位
request_id

string

問題或請求 ID。

solver_parameters

SolverParameters

解題工具的參數。

ports[]

Port

要在船隻服務中呼叫的可能通訊埠清單。要求只能包含這份清單中的通訊埠 ID。

leg_candidates[]

LegCandidate

可新增至船隻服務的可能路段清單。要求只能包含這份清單中的路段 ID。

vessel_classes[]

VesselClass

執行船隻服務的船隻類別清單。請注意,來自同一類別的所有船隻皆可互換。要求只能包含此清單中的船隻類別 ID。

commodity_demands[]

CommodityDemand

由船隻服務完成的潛在商品 (例如容器) 要求清單。

vessel_services[]

VesselService

您可以提供有效船隻服務網路 (通常是網路的目前狀態) 做為最佳化的起點。

DesignShippingNetworkResponse

回應會保留要求中傳遞的 LSNDSP 執行個體解決方案。其中包含有效的船隻服務與商品需求路徑網路。通過每段車程的商貨需求總量不得超過這個路段的船隻等級。請注意,即使沒有人滿足需求的船隻服務,仍是送貨網路設計和排程問題的可行解決方案。

欄位
request_id

string

與此回應相關聯的要求 ID。

vessel_services[]

VesselService

船隻服務網路。針對每個船隻類別,使用的船隻總數不得超過此類別可用的船隻數量。

commodity_demand_paths[]

CommodityDemandPath

商品需求可運送的所有商品需求路徑清單。請注意,如果未運送需求,系統可能不會列出部分商品需求 ID。或者,商品需求可以部分滿足。針對各個商品需求,可出貨總數量不得超過需求總量。最後,commodity_demand_paths 依賴 vessel_services (請參閱 CommodityDemandPath 定義)。

SolveMathOptModelRequest

要求在 MathOpt 中進行一元遠距解題。

欄位
solver_type

SolverTypeProto

選用設定。用來以數值表示問題的解題工具。請注意,如果解題工具不支援模型中的特定功能,最佳化程序就會失敗。

model

ModelProto

必要欄位。以數學表示要解決的最佳化問題。

parameters

SolveParametersProto

選用設定。用於控制單一解題的參數。系統會特別處理 enable_output 參數。如果解題工具支援訊息回呼,只要將其設為 true,伺服器就會註冊訊息回呼。產生的訊息會在 SolveMathOptModelResponse.messages 中傳回。如果是其他解題工具,將 enable_output 設為 true 將導致錯誤。

model_parameters

ModelSolveParametersProto

選用設定。用於控制輸入模型特有單一解題的參數 (如需模型獨立參數,請參閱 SolveParametersProto)。

SolveMathOptModelResponse

使用 MathOpt 的一元遠距解題回應。

欄位
result

SolveResultProto

處理要求中模型的輸出內容說明。

messages[]

string

如果已使用 SolveParametersProto.enable_output,就會包含支援訊息回呼的解題工具記錄訊息。

SolveShiftGenerationRequest

要求解決排班問題。每個 ShiftTemplate 中會概略說明產生偏移值的規則。回應中的多次轉移可由單一 ShiftTemplate 產生。解題工具產生及選擇的轉變必須遵循 ShiftTemplate 中列出的規則,並涵蓋指定員工需求。

欄位
solver_config

SolverConfig

選用設定。解題工具的參數。

shift_templates[]

ShiftTemplate

必要欄位。一組偏移範本,用於指定產生班表的規則。

employee_demands[]

EmployeeDemand

必要欄位。shift_templates 產生的輪班工作總人數需要應付總員工需求。

SolveShiftGenerationResponse

對 Shift 產生問題的回應。如果傳回的 solution_statusSOLVED,則解題工具產生的一組有效位移會傳回 employee_schedules。下列屬性會保留下列屬性,以便安排有效的排班時間表:

  1. employee_schedules 中產生的每個位移都會遵循對應 ShiftTemplate 中指定的規則。
  2. 在每個位移中選取的事件都會符合相應 ShiftTemplate.Event 中指定的規則。
  3. 指派給同一個 ShiftTemplate 產生的輪班員工總數,不會超過該範本的 maximum_employee_count
  4. 獲派的員工組合在每個指定間隔將接納需求。

欄位
solution_status

ShiftGenerationSolutionStatus

傳回的解決方案狀態。如果 solution_status 不是 SOLVEDemployee_schedules 會是空白的。

employee_schedules[]

EmployeeSchedule

解題工具產生的輪班名單,以及指派給每個時間表的員工人數。

demand_coverage_violations[]

DemandCoverageViolation

根據指定employee_schedules中獲派的employee_counts,需求涵蓋率違規問題。系統會匯總要求中提供的 employee_demands。如果兩個 employee_demand 間隔重疊,系統會將需求加總並計入時間間隔的重疊部分。

SolveShiftSchedulingRequest

要求工作團隊排程 API。該要求至少應指定一組員工、一組輪班、員工可執行的一組可能角色,以及一組涵蓋範圍。承保範圍規定,指定履行各職務所需的員工人數。獲派輪班的員工也會獲派一 (僅限一個) 輪班人員,且員工不得獲派兩次重疊的輪班。如要進一步瞭解排班指派的運作方式,請參閱下方的SolveShiftSchedulingResponse

您可以為每位員工指定其他排程限制,進一步限制問題所在。所有排程限制和涵蓋範圍要求都會指定優先等級 (MANDATORY、高、中、低)。優先順序等級為 PRIORITY_MANDATORY 的所有限制都必須透過解題工具滿足。解題工具可以違反其他優先順序的限制,但這些違規事件的優先順序會降到最低。如要進一步瞭解各項限制的優先等級處理方式,請參閱 Priority 列舉。

解題工具會嘗試在指定的限制內,盡量提高每位員工的 ShiftPreference.preference 值。為滿足更多偏好設定,解題工具不會違反限制;只有在指定限制下無法安排指派作業時,解題工具才會違反限制。

時間注意事項:請使用 DateTime 訊息指定問題的所有時間。這則訊息包含 TimeZone 欄位。除非使用者另行指定,否則時區會假設為世界標準時間。DateTime 訊息應指定至分鐘數,因此忽略所有秒數和 nanos。

欄位
request_id

string

問題或請求 ID。

solve_parameters

SolveParameters

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

employees[]

Employee

所有可預約的員工均可安排時間。

shifts[]

Shift

所有轉變,都組成時間表。

coverage_requirements[]

CoverageRequirement

在整個規劃期間的涵蓋範圍需求。這指明在時間範圍或輪班 ID 清單上,各職位或具備技能的員工人數。所有保固要求都必須以時間範圍或班表 ID 清單指定 (但不能同時指定兩者)。如果提供,各地區承載規定的時間範圍 (如有指定) 不得重疊。以上各項限制的預設優先順序等級為 PRIORITY_MANDATORY,適用於角色要求,技能要求的預設優先順序為 PRIORITY_LOW。詳情請參閱 Priority 列舉。

role_ids[]

string

工作團隊的所有可能角色清單。每位員工都必須至少指派一個角色,才能進行輪班。角色指的是換班期間的具體指派工作 (例如登記的護士、高管主廚、服務人員等)。員工獲派職務時,也會同時獲派單一特定角色。

skill_ids[]

string

列出所有職員可能具備的技能。「技能」是指員工與特定指派工作無關的額外資格認證 (例如認證、口說語言等)。這份清單可以留空。獲派職務的員工必須充分滿足該輪班所需的所有技能。

location_ids[]

string

列出時間表中這些排班的所有可能地點。這份清單可以留空。指定不同地點是很實用的做法。舉例來說,護理師經理想為醫院的不同單位安排多名護理師,或是想為多間飯店安排員工預約時,再指定不同地點。

budget_requirements[]

BudgetRequirement

因應時段設定問題的預算規格。這些要求的預設優先順序等級為 PRIORITY_LOW。詳情請參閱 Priority 列舉。

assignments_hint[]

ShiftAssignment

將指派作業移做時間安排問題 (又稱為解決方案提示)。如果作業與無法指派的位班或排程要求相牴觸,系統會忽略作業提示。

SolveShiftSchedulingResponse

對工作團隊排程 API 的回應。對於每個回應,如果傳回的 solution_statusNOT_SOLVED_DEADLINE_EXCEEDEDINFEASIBLEshift_assignments 就會留空。如果傳回的 solution_statusOPTIMALFEASIBLE,系統會在 shift_assignments 中傳回有效的位移指派值。下列屬性對於有效的位班指派會保留:

  1. 每個員工 ID 都會包含在要求中所指定的員工名單中。
  2. 指派給員工的每個角色 ID 都位於指定員工的角色 ID 中。
  3. 每個平移 ID 都包含在要求中提供的轉變組合中。
  4. 每個輪班 ID 不是指定員工的不可指派的輪班 ID。
  5. 員工永遠不會被指派到兩個重疊的輪班。
  6. 根據指定的排程,系統未違反任何優先等級為 PRIORITY_MANDATORY 的限製或要求。

欄位
request_id

string

與此回應相關聯的要求 ID。

solution_status

SolutionStatus

傳回的解決方案狀態。如果解決方案不是「FEASIBLE」或「OPTIMAL」,這個原型中的其他欄位可能為空白。如果狀態為「NOT_SOLVED_DEADLINE_EXCEEDED」,表示在沒有找出可行的解決方案或判斷可行的解決方案的情況下,達到的時間限制。如果無法同時滿足優先等級 MANDATORY 的限制,就可能無法處理要求。

shift_assignments[]

ShiftAssignment

所有指派作業的清單。每個ShiftAssignment都會指定一位員工、指派的輪班,以及為該輪班指派的角色。

status_message

string

如果 solution_status 不是最佳選項,這個欄位會包含解題工具的額外資訊。