解決來自指定的 DesignShippingNetworkRequest
的訂單項運送網路設計和排程問題 (LSNDSP)。
LSNDSP 是複雜的最佳化問題,它致力於找出配線器運送網路的最佳設計和時程安排。目標是盡可能降低營運網路的總費用,同時盡可能滿足連接埠間的貨物需求。
LSNDSP 可分為兩個主要問題:網路設計和排程。網路設計子問題決定了網路要提供的通訊埠組合、每條路徑上部署的船隻數量,以及船隻會移動的路徑。排程子問題會決定船隻的帆船行程,考量的因素包括航行之間航行所需的時間、負載和卸載貨物所需時間,以及連接埠之間的貨運需求。
簡單來說,LSNDSP 面臨的問題,包括決定要提供的連接埠、可使用的船隻數量,以及如何安排船舶的時程,以盡量減少網路營運成本,同時盡可能提高滿足貨物需求的收益。LSNDSP 的一個較困難的子任務是貨運路線,可以判斷需要滿足哪些需求,以及要指派到貨運的路線,以便獲取最高收益。
HTTP 要求
POST https://optimization.googleapis.com/v1/shipping:designShippingNetwork
這個網址使用 gRPC 轉碼語法。
要求主體
要求主體的資料會採用以下結構:
JSON 表示法 |
---|
{ "requestId": string, "solverParameters": { object ( |
欄位 | |
---|---|
requestId |
問題或請求 ID。 |
solverParameters |
解題工具的參數。 |
ports[] |
要在船隻服務中呼叫的可能通訊埠清單。要求只能包含這份清單中的通訊埠 ID。 |
legCandidates[] |
可新增至船隻服務的可能路段清單。要求只能包含這份清單中的路段 ID。 |
vesselClasses[] |
執行船隻服務的船隻類別清單。請注意,來自同一類別的所有船隻皆可互換。要求只能包含此清單中的船隻類別 ID。 |
commodityDemands[] |
由船隻服務完成的潛在商品 (例如容器) 要求清單。 |
vesselServices[] |
您可以提供有效船隻服務網路 (通常是網路的目前狀態) 做為最佳化的起點。 |
回應主體
回應會保留要求中傳遞的 LSNDSP 執行個體解決方案。其中包含有效的船隻服務與商品需求路徑網路。通過每段車程的商貨需求總量不得超過這個路段的船隻等級。請注意,即使沒有人滿足需求的船隻服務,仍是送貨網路設計和排程問題的可行解決方案。
如果成功,回應主體會含有以下結構的資料:
JSON 表示法 |
---|
{ "requestId": string, "vesselServices": [ { object ( |
欄位 | |
---|---|
requestId |
與此回應相關聯的要求 ID。 |
vesselServices[] |
船隻服務網路。針對每個船隻類別,使用的船隻總數不得超過此類別可用的船隻數量。 |
commodityDemandPaths[] |
商品需求可運送的所有商品需求路徑清單。請注意,如果未運送需求,系統可能不會列出部分商品需求 ID。或者,商品需求可以部分滿足。針對各個商品需求,可出貨總數量不得超過需求總量。最後,commodityDemandPaths 依附於 vesselServices (請參閱 CommodityDemandPath 定義)。 |
SolverParameters
用於控制 LSNDSP 單一解題的參數。
JSON 表示法 |
---|
{ "timeLimit": string } |
欄位 | |
---|---|
timeLimit |
解題工具應在問題上花費的時間上限。這個值並非硬性上限,且不會計入通訊負荷。解決問題的預期延遲時間可能會稍微超過這個值。 持續時間以秒為單位,最多 9 個小數位數,結尾為「 |
通訊埠
通訊埠,例如或連接埠的所有終端機
JSON 表示法 |
---|
{ "id": string, "minimumPortStayDuration": { object ( |
欄位 | |
---|---|
id |
指派給這個充電座的專屬 ID。 |
minimumPortStayDuration |
通訊埠呼叫的最短入住時間。大多數研究會假設連接埠保持不變,因為連接埠通常會配置更多起重機,而移動次數較多的大型船隻,因為這會佔據更多空間。 |
minimumTransshipmentDuration |
特定連接埠的最短傳輸時間,包括卸載容器並重新載入至其他船隻的持續時間。 |
transshipmentCost |
容器的傳輸費用。通常會低於裝運和排放的總和,因為轉運站不需要在充電座上進行海關作業。 |
vesselClassCosts |
呼叫這個由船隻類別 ID 對應的充電座時產生的費用。飛船類別只有在此地圖中有項目時,才能呼叫這個充電座。 這個物件中包含 |
時間長度
時間長度 (通訊埠入住/運輸、需求傳輸) 以每小時精細程度定義。
JSON 表示法 |
---|
{ "hours": string } |
欄位 | |
---|---|
hours |
定義時間長度的時數。 |
VesselCost
透過這個充電座的 Vessel 通話和停留費用,定義為入住天數 (fixedCost
+ hourlyCost
* 小時) 的線性函式。
JSON 表示法 |
---|
{ "fixedCost": number, "hourlyCost": number } |
欄位 | |
---|---|
fixedCost |
修正呼叫這個通訊埠的費用。 |
hourlyCost |
使用這個充電座的每小時費用。 |
LegCandidate
獸醫服務人員。相同的兩個連接埠之間可以有多個車段候選文字,例如:代表不同的海洋路徑和/或船隻移動速度。
JSON 表示法 |
---|
{
"id": string,
"departurePortId": string,
"arrivalPortId": string,
"duration": {
object ( |
欄位 | |
---|---|
id |
指派給這個路段的專屬 ID。 |
departurePortId |
出發通訊埠的 ID。 |
arrivalPortId |
抵達通訊埠的 ID。 |
duration |
路段的持續時間。 |
vesselClassCosts |
將這個路段的候選人指派給特定船隻級別的費用。包括船隻營運成本、沙坑成本和包機費用。儘管這個路段在地圖中有條目,但船隻等級只能航行。 這個物件中包含 |
VesselClass
Vessel 類別,例如一組共用相同屬性的船隻。無法區分同一類別中的兩個船隻。
JSON 表示法 |
---|
{ "id": string, "containerCapacity": string, "vesselCount": string } |
欄位 | |
---|---|
id |
指派給這個船隻類別的專屬 ID。 |
containerCapacity |
Vessel 類別容量 (在容器中)。 |
vesselCount |
這個船隻類別的船隻數量。 |
CommodityDemand
商品需求,例如貨運公司可能必須滿足的需求。
JSON 表示法 |
---|
{
"id": string,
"originPortId": string,
"destinationPortId": string,
"containerCount": string,
"freightRate": number,
"maximumTransitDuration": {
object ( |
欄位 | |
---|---|
id |
指派給這項商品需求的專屬 ID。 |
originPortId |
來源通訊埠的 ID。 |
destinationPortId |
目的地通訊埠的 ID。 |
containerCount |
要執行的容器數量上限。 |
freightRate |
每個容器的運費 (對於廣告空缺需求可能會遭受處分)。就能減少來源和目的地各容器的載入和排放成本。 |
maximumTransitDuration |
最長運送時間 (如有設定,應明顯為正數)。運送時間的定義是從第一個提供服務的船隻離開起點港,到上次提供服務的船隻抵達目的地充電座的時間。 |
VesselService
可用來滿足商品需求的 Vessel 服務。重要事項:目前假設服務採用每週頻率和攜碼轉移時間不得超過一週。請參考以下的船隻服務路段:vesselServiceLegs { legCandidateId: "0->1"originDepartureTime {} destinationArrivalTime { day: 3 hourOfDay: 12 } } vesselServiceLegs { legCandidateId: "1->0"originDepartureTime { day: 4 } destinationArrivalTime { day: 7 hourOfDay: 12 } } 這些路段定義一週服務路線,會通過兩個連接埠,兩個充電站的入住時間都是 12 小時。
JSON 表示法 |
---|
{
"vesselClassId": string,
"vesselServiceLegs": [
{
object ( |
欄位 | |
---|---|
vesselClassId |
執行服務的 Vessel 類別 ID。 |
vesselServiceLegs[] |
如為有效的船隻服務,下列屬性均包含:1.欄位不得留空。2. 連續腿destinationPortId 與 originPortId 必須相符 (包括最後和第一段)。 |
VesselServiceLeg
船隻服務的單腳。
JSON 表示法 |
---|
{ "legCandidateId": string, "originDepartureTime": { object ( |
欄位 | |
---|---|
legCandidateId |
已指派的車程候選人 ID。 |
originDepartureTime |
每週時間表起點港的出發時間。 |
destinationArrivalTime |
每週到達目的地通訊埠的抵達時間。 |
ScheduleTime
排程時間 (船隻/需求出發/抵達) 是依每小時頻率定義,頻率為每小時固定的時間。
JSON 表示法 |
---|
{ "day": string, "hourOfDay": integer } |
欄位 | |
---|---|
day |
當天達成目標。第 0 天是第一個可能的計畫, |
hourOfDay |
排定時間的時段應為介於 0 到 23 之間的整數 (含 0 和 23)。 |
CommodityDemandPath
佔特定商品需求的部分服務與通訊埠。以下使用的索引是依照回應中的船隻服務順序,以及個別船隻服務支架的順序。
JSON 表示法 |
---|
{
"commodityDemandId": string,
"containerCount": string,
"vesselServiceLegIds": [
{
object ( |
欄位 | |
---|---|
commodityDemandId |
已滿足商品需求 ID。 |
containerCount |
通過此路徑的容器數量。針對各個商品需求,可出貨總數量不得超過需求總量。 |
vesselServiceLegIds[] |
透過這個路徑取得的船隻服務路段 ID 清單。下列屬性適用於有效的商品需求路徑:1.第一段的 出發 PortId 必須與商品需求的 originPortId 相符。2. 上一段路段的 destinationPortId 必須與商品需求的 destinationPortId 相符。3. 連續腿rriPortId 和 DepartPortId 必須相符。4. 如果已為這類商品需求提供這項資訊,則最長運送時間應大於或等於路徑總時間長度。 |
VesselServiceLegId
商品需求路徑中使用的單一船隻服務路段。例如,假設有兩個船隻服務,第一個由三個路段 (索引 0、1 和 2) 和第二條 (索引 0 和 1) 組成。此外,第一項服務的第一段行程抵達第二條服務第二段的出發埠。商品路徑由連續
JSON 表示法 |
---|
{ "vesselServiceIndex": integer, "vesselServiceLegIndex": integer } |
欄位 | |
---|---|
vesselServiceIndex |
船隻服務的索引。 |
vesselServiceLegIndex |
由 |