Method: shipping.designShippingNetwork

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

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

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

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

HTTP 要求

POST https://optimization.googleapis.com/v1/shipping:designShippingNetwork

這個網址使用 gRPC 轉碼語法。

要求主體

要求主體的資料會採用以下結構:

JSON 表示法
{
  "requestId": string,
  "solverParameters": {
    object (SolverParameters)
  },
  "ports": [
    {
      object (Port)
    }
  ],
  "legCandidates": [
    {
      object (LegCandidate)
    }
  ],
  "vesselClasses": [
    {
      object (VesselClass)
    }
  ],
  "commodityDemands": [
    {
      object (CommodityDemand)
    }
  ],
  "vesselServices": [
    {
      object (VesselService)
    }
  ]
}
欄位
requestId

string

問題或請求 ID。

solverParameters

object (SolverParameters)

解題工具的參數。

ports[]

object (Port)

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

legCandidates[]

object (LegCandidate)

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

vesselClasses[]

object (VesselClass)

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

commodityDemands[]

object (CommodityDemand)

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

vesselServices[]

object (VesselService)

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

回應主體

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

如果成功,回應主體會含有以下結構的資料:

JSON 表示法
{
  "requestId": string,
  "vesselServices": [
    {
      object (VesselService)
    }
  ],
  "commodityDemandPaths": [
    {
      object (CommodityDemandPath)
    }
  ]
}
欄位
requestId

string

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

vesselServices[]

object (VesselService)

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

commodityDemandPaths[]

object (CommodityDemandPath)

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

SolverParameters

用於控制 LSNDSP 單一解題的參數。

JSON 表示法
{
  "timeLimit": string
}
欄位
timeLimit

string (Duration format)

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

持續時間以秒為單位,最多 9 個小數位數,結尾為「s」。範例:"3.5s"

通訊埠

通訊埠,例如或連接埠的所有終端機

JSON 表示法
{
  "id": string,
  "minimumPortStayDuration": {
    object (Duration)
  },
  "minimumTransshipmentDuration": {
    object (Duration)
  },
  "transshipmentCost": number,
  "vesselClassCosts": {
    string: {
      object (VesselCost)
    },
    ...
  }
}
欄位
id

string

指派給這個充電座的專屬 ID。

minimumPortStayDuration

object (Duration)

通訊埠呼叫的最短入住時間。大多數研究會假設連接埠保持不變,因為連接埠通常會配置更多起重機,而移動次數較多的大型船隻,因為這會佔據更多空間。

minimumTransshipmentDuration

object (Duration)

特定連接埠的最短傳輸時間,包括卸載容器並重新載入至其他船隻的持續時間。

transshipmentCost

number

容器的傳輸費用。通常會低於裝運和排放的總和,因為轉運站不需要在充電座上進行海關作業。

vesselClassCosts

map (key: string, value: object (VesselCost))

呼叫這個由船隻類別 ID 對應的充電座時產生的費用。飛船類別只有在此地圖中有項目時,才能呼叫這個充電座。

這個物件中包含 "key": value 組合的清單,範例:{ "name": "wrench", "mass": "1.3kg", "count": "3" }

時間長度

時間長度 (通訊埠入住/運輸、需求傳輸) 以每小時精細程度定義。

JSON 表示法
{
  "hours": string
}
欄位
hours

string (int64 format)

定義時間長度的時數。

VesselCost

透過這個充電座的 Vessel 通話和停留費用,定義為入住天數 (fixedCost + hourlyCost * 小時) 的線性函式。

JSON 表示法
{
  "fixedCost": number,
  "hourlyCost": number
}
欄位
fixedCost

number

修正呼叫這個通訊埠的費用。

hourlyCost

number

使用這個充電座的每小時費用。

LegCandidate

獸醫服務人員。相同的兩個連接埠之間可以有多個車段候選文字,例如:代表不同的海洋路徑和/或船隻移動速度。

JSON 表示法
{
  "id": string,
  "departurePortId": string,
  "arrivalPortId": string,
  "duration": {
    object (Duration)
  },
  "vesselClassCosts": {
    string: number,
    ...
  }
}
欄位
id

string

指派給這個路段的專屬 ID。

departurePortId

string

出發通訊埠的 ID。

arrivalPortId

string

抵達通訊埠的 ID。

duration

object (Duration)

路段的持續時間。

vesselClassCosts

map (key: string, value: number)

將這個路段的候選人指派給特定船隻級別的費用。包括船隻營運成本、沙坑成本和包機費用。儘管這個路段在地圖中有條目,但船隻等級只能航行。

這個物件中包含 "key": value 組合的清單,範例:{ "name": "wrench", "mass": "1.3kg", "count": "3" }

VesselClass

Vessel 類別,例如一組共用相同屬性的船隻。無法區分同一類別中的兩個船隻。

JSON 表示法
{
  "id": string,
  "containerCapacity": string,
  "vesselCount": string
}
欄位
id

string

指派給這個船隻類別的專屬 ID。

containerCapacity

string (int64 format)

Vessel 類別容量 (在容器中)。

vesselCount

string (int64 format)

這個船隻類別的船隻數量。

CommodityDemand

商品需求,例如貨運公司可能必須滿足的需求。

JSON 表示法
{
  "id": string,
  "originPortId": string,
  "destinationPortId": string,
  "containerCount": string,
  "freightRate": number,
  "maximumTransitDuration": {
    object (Duration)
  }
}
欄位
id

string

指派給這項商品需求的專屬 ID。

originPortId

string

來源通訊埠的 ID。

destinationPortId

string

目的地通訊埠的 ID。

containerCount

string (int64 format)

要執行的容器數量上限。

freightRate

number

每個容器的運費 (對於廣告空缺需求可能會遭受處分)。就能減少來源和目的地各容器的載入和排放成本。

maximumTransitDuration

object (Duration)

最長運送時間 (如有設定,應明顯為正數)。運送時間的定義是從第一個提供服務的船隻離開起點港,到上次提供服務的船隻抵達目的地充電座的時間。

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 (VesselServiceLeg)
    }
  ]
}
欄位
vesselClassId

string

執行服務的 Vessel 類別 ID。

vesselServiceLegs[]

object (VesselServiceLeg)

如為有效的船隻服務,下列屬性均包含:1.欄位不得留空。2. 連續腿destinationPortId 與 originPortId 必須相符 (包括最後和第一段)。

VesselServiceLeg

船隻服務的單腳。

JSON 表示法
{
  "legCandidateId": string,
  "originDepartureTime": {
    object (ScheduleTime)
  },
  "destinationArrivalTime": {
    object (ScheduleTime)
  }
}
欄位
legCandidateId

string

已指派的車程候選人 ID。

originDepartureTime

object (ScheduleTime)

每週時間表起點港的出發時間。

destinationArrivalTime

object (ScheduleTime)

每週到達目的地通訊埠的抵達時間。

ScheduleTime

排程時間 (船隻/需求出發/抵達) 是依每小時頻率定義,頻率為每小時固定的時間。

JSON 表示法
{
  "day": string,
  "hourOfDay": integer
}
欄位
day

string (int64 format)

當天達成目標。第 0 天是第一個可能的計畫,

hourOfDay

integer

排定時間的時段應為介於 0 到 23 之間的整數 (含 0 和 23)。

CommodityDemandPath

佔特定商品需求的部分服務與通訊埠。以下使用的索引是依照回應中的船隻服務順序,以及個別船隻服務支架的順序。

JSON 表示法
{
  "commodityDemandId": string,
  "containerCount": string,
  "vesselServiceLegIds": [
    {
      object (VesselServiceLegId)
    }
  ]
}
欄位
commodityDemandId

string

已滿足商品需求 ID。

containerCount

string (int64 format)

通過此路徑的容器數量。針對各個商品需求,可出貨總數量不得超過需求總量。

vesselServiceLegIds[]

object (VesselServiceLegId)

透過這個路徑取得的船隻服務路段 ID 清單。下列屬性適用於有效的商品需求路徑:1.第一段的 出發 PortId 必須與商品需求的 originPortId 相符。2. 上一段路段的 destinationPortId 必須與商品需求的 destinationPortId 相符。3. 連續腿rriPortId 和 DepartPortId 必須相符。4. 如果已為這類商品需求提供這項資訊,則最長運送時間應大於或等於路徑總時間長度。

VesselServiceLegId

商品需求路徑中使用的單一船隻服務路段。例如,假設有兩個船隻服務,第一個由三個路段 (索引 0、1 和 2) 和第二條 (索引 0 和 1) 組成。此外,第一項服務的第一段行程抵達第二條服務第二段的出發埠。商品路徑由連續

JSON 表示法
{
  "vesselServiceIndex": integer,
  "vesselServiceLegIndex": integer
}
欄位
vesselServiceIndex

integer

船隻服務的索引。

vesselServiceLegIndex

integer

vesselServiceIndex 建立索引的船隻服務路段索引。