ShipmentModel

運送模型包含一組必須由一組車輛行駛的貨運,並盡可能降低整體成本,亦即以下各項的總和:

  • 車輛路線的費用 (所有車輛的總交通時間、平均交通時間、固定費用)。
  • 未完成出貨的處罰。
  • 運送作業的全球持續時間成本
JSON 表示法
{
  "shipments": [
    {
      object (Shipment)
    }
  ],
  "vehicles": [
    {
      object (Vehicle)
    }
  ],
  "globalStartTime": string,
  "globalEndTime": string,
  "globalDurationCostPerHour": number,
  "durationDistanceMatrices": [
    {
      object (DurationDistanceMatrix)
    }
  ],
  "durationDistanceMatrixSrcTags": [
    string
  ],
  "durationDistanceMatrixDstTags": [
    string
  ],
  "transitionAttributes": [
    {
      object (TransitionAttributes)
    }
  ],
  "shipmentTypeIncompatibilities": [
    {
      object (ShipmentTypeIncompatibility)
    }
  ],
  "shipmentTypeRequirements": [
    {
      object (ShipmentTypeRequirement)
    }
  ],
  "precedenceRules": [
    {
      object (PrecedenceRule)
    }
  ],
  "maxActiveVehicles": integer
}
欄位
shipments[]

object (Shipment)

模型中必須執行的運送作業集合。

vehicles[]

object (Vehicle)

可用來進行造訪的車輛組合。

globalStartTime

string (Timestamp format)

模型的全球開始時間和結束時間:超出範圍的時間一律視為有效。

模型的時間跨度不得超過一年,也就是 globalEndTimeglobalStartTime 之間的時間差不得超過 31536000 秒。

使用 cost_per_*hour 欄位時,建議您將這個時間範圍設為較短的間隔,以提升效能 (例如,如果您模擬單日,應將全域時間限制設為該日)。如未設定,1970 年 1 月 1 日 00:00:00 (世界標準時間) 將預設為 0,nanos: 0。

RFC3339 世界標準時間「Zulu」格式的時間戳記,精確度達奈秒單位,最多九個小數位數。例如 "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"

globalEndTime

string (Timestamp format)

如未設定,1971 年 1 月 1 日世界標準時間 00:00:00 (也就是秒數:31536000,nanos: 0) 會做為預設值。

RFC3339 世界標準時間「Zulu」格式的時間戳記,精確度達奈秒單位,最多九個小數位數。範例:"2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"

globalDurationCostPerHour

number

整體企劃書的「全球持續時間」,是指所有車輛最早生效開始時間與最晚有效結束時間之間的差距。使用者可以為該數量指派每小時成本,以便盡早完成工作。這個費用的單位必須與 Shipment.penalty_cost 相同。

durationDistanceMatrices[]

object (DurationDistanceMatrix)

指定模型中使用的時間和距離矩陣。如果這個欄位空白,系統會根據 useGeodesicDistances 欄位的值,改用 Google 地圖或大地測量距離。如果不是空白,useGeodesicDistances 就不會是 true,且 durationDistanceMatrixSrcTagsdurationDistanceMatrixDstTags 都不能為空白。

使用範例:

  • 其中有兩個位置:locA 和 locB。
  • 1 輛車從 locA 開始行駛,並於 locA 結束。
  • 1 個位於 locB 的取件造訪要求。
model {
  vehicles { startTags: "locA"  endTags: "locA" }
  shipments { pickups { tags: "locB" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixDstTags: "locA"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrices {
    rows {  # from: locA
      durations { seconds: 0 }   meters: 0    # to: locA
      durations { seconds: 100 } meters: 1000 # to: locB
    }
    rows {  # from: locB
      durations { seconds: 102 } meters: 990 # to: locA
      durations { seconds: 0 }   meters: 0   # to: locB
    }
  }
}
  • 有三個位置:locA、locB 和 locC。
  • 1 輛車輛從 locA 開始路線,並在 locB 結束,使用矩陣「fast」。
  • 1 輛車以 locB 開始路線,並於 locB 結束,使用矩陣「慢速」。
  • 1 輛車輛從 locB 開始路線,並在 locB 結束,使用矩陣「fast」。
  • 在 locC 有 1 個取件訪問要求。
model {
  vehicles { startTags: "locA" endTags: "locB" startTags: "fast" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "slow" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "fast" }
  shipments { pickups { tags: "locC" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixSrcTags: "locC"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrixDstTags: "locC"
  durationDistanceMatrices {
    vehicleStartTag: "fast"
    rows {  # from: locA
      durations { seconds: 1000 } meters: 2000 # to: locB
      durations { seconds: 600 }  meters: 1000 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }   meters: 0    # to: locB
      durations { seconds: 700 } meters: 1200 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 702 } meters: 1190 # to: locB
      durations { seconds: 0 }   meters: 0    # to: locC
    }
  }
  durationDistanceMatrices {
    vehicleStartTag: "slow"
    rows {  # from: locA
      durations { seconds: 1800 } meters: 2001 # to: locB
      durations { seconds: 900 }  meters: 1002 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }    meters: 0    # to: locB
      durations { seconds: 1000 } meters: 1202 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 1001 } meters: 1195 # to: locB
      durations { seconds: 0 }    meters: 0    # to: locC
    }
  }
}
durationDistanceMatrixSrcTags[]

string

定義時間長度和距離矩陣的來源的標記;durationDistanceMatrices(i).rows(j) 透過標記 durationDistanceMatrixSrcTags(j) 定義與矩陣中其他造訪的持續時間和距離。

標記會對應至 VisitRequest.tagsVehicle.start_tags。指定的 VisitRequestVehicle 必須與這個欄位中的一個標記完全相符。請注意,Vehicle 的來源、目的地和矩陣標記可能相同;同樣地,VisitRequest 的來源和目的地標記也可能相同。所有標記都必須不同,且不得為空字串。如果這個欄位不為空白,durationDistanceMatrices 就必須非空白。

durationDistanceMatrixDstTags[]

string

定義時間長度和距離矩陣目的地的標記;durationDistanceMatrices(i).rows(j).durations(k) (回應durationDistanceMatrices(i).rows(j).meters(k)) 會定義矩陣 i 中,從標記為 durationDistanceMatrixSrcTags(j) 的造訪轉換為標記為 durationDistanceMatrixDstTags(k) 的造訪所需的時間 (或距離)。

標記會對應至 VisitRequest.tagsVehicle.start_tags。給定的 VisitRequestVehicle 必須與這個欄位中的一個標記完全相符。請注意,Vehicle 的來源、目的地和矩陣標記可能相同;同樣地,VisitRequest 的來源和目的地標記也可能相同。所有標記都必須不同,且不得為空字串。如果這個欄位非空白,則 durationDistanceMatrices 不得留空。

transitionAttributes[]

object (TransitionAttributes)

新增至模型的轉場屬性。

shipmentTypeIncompatibilities[]

object (ShipmentTypeIncompatibility)

不相容的 shipping_types 組合 (請參閱 ShipmentTypeIncompatibility)。

shipmentTypeRequirements[]

object (ShipmentTypeRequirement)

一組 shipmentType 要求 (請參閱 ShipmentTypeRequirement)。

precedenceRules[]

object (PrecedenceRule)

必須在模型中強制執行的優先順序規則組合。

maxActiveVehicles

integer

限制有效車輛數量上限。如果車輛的路線至少執行一筆運送作業,就會視為處於運作狀態。當車隊少於車輛,且車隊屬於異質時,這項功能可用來限制路線數量。最佳化功能會選擇最適合使用的車輛組合。必須為正值。

運送地址

單一商品的運送作業,從其中一個提貨地點到其中一個送達地點。每輛車都必須前往其中一個上車地點 (並視情況調降空間) 至貨運地點,才能順利將貨物視為出貨。

JSON 表示法
{
  "displayName": string,
  "pickups": [
    {
      object (VisitRequest)
    }
  ],
  "deliveries": [
    {
      object (VisitRequest)
    }
  ],
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "allowedVehicleIndices": [
    integer
  ],
  "costsPerVehicle": [
    number
  ],
  "costsPerVehicleIndices": [
    integer
  ],
  "pickupToDeliveryAbsoluteDetourLimit": string,
  "pickupToDeliveryTimeLimit": string,
  "shipmentType": string,
  "label": string,
  "ignore": boolean,
  "penaltyCost": number,
  "pickupToDeliveryRelativeDetourLimit": number
}
欄位
displayName

string

使用者定義的運送顯示名稱。長度上限為 63 個半形字元,可以使用 UTF-8 字元。

pickups[]

object (VisitRequest)

與出貨相關的取貨替代選項組合。如未指定,車輛只需造訪與配送項目對應的地點。

deliveries[]

object (VisitRequest)

與出貨相關的提交替代方案。如果未指定,車輛只需前往與乘客上車地點相對應的位置即可。

loadDemands

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

貨物負載 (例如重量、體積、棧板數量等)。地圖中的鍵應為識別碼,用於描述對應負載的類型,最好也包含單位。例如:"weight_kg"、"volume_gallons"、"pallet_count" 等。如果指定的鍵未顯示在對應的載入中,系統會將該載入視為空值。

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

allowedVehicleIndices[]

integer

可能執行這項運送作業的車輛組合。如果留空,則所有車輛都可能執行該動作。車輛會以 ShipmentModelvehicles 清單中的索引提供。

costsPerVehicle[]

number

指定透過每輛車輛運送這項貨物時產生的費用。如果已指定,則必須具備下列其中一種條件:

  • costsPerVehicleIndices 相同的元素數量。costsPerVehicle[i] 對應至車款的 costsPerVehicleIndices[i] 車輛。
  • 元素數量必須與模型中的車輛數量相同。第 i 個元素對應至模型的車輛 #i。

這些費用的單位必須與「penaltyCost」相同,且不得為負數。如果沒有這類費用,請將這個欄位留白。

costsPerVehicleIndices[]

integer

適用 costsPerVehicle 的車輛索引。如果為非空白,則元素數量必須與 costsPerVehicle 相同。車輛索引只能指定一次。如果車輛從 costsPerVehicleIndices 中排除,其費用為零。

pickupToDeliveryAbsoluteDetourLimit

string (Duration format)

指定相較於從上車地點到送達地點的最短路徑,最多可繞行的絕對時間。若有指定,其必須為非負數,且運送必須包含至少一項取貨和送貨服務。

舉例來說,假設 t 是從所選取的取貨替代方案直接前往所選取的送貨替代方案所需的最短時間。接著設定 pickupToDeliveryAbsoluteDetourLimit 會強制執行:

startTime(delivery) - startTime(pickup) <=
t + pickupToDeliveryAbsoluteDetourLimit

如果在同一筆訂單上同時指定相對和絕對限制,系統會針對每個可能的取件/送達組合使用較嚴格的限制。截至 2017 年 10 月 10 日為止,只有交通時間不需乘車時,系統才會支援繞道時間。

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

pickupToDeliveryTimeLimit

string (Duration format)

指定從開始取貨到出貨到貨之間的最長時間。若有指定,其必須為非負數,且運送必須包含至少一項取貨和送貨服務。這不會影響取貨方式,或選擇取貨和送貨的替代地點,以及車輛速度。您可以與最大繞道限制一起指定這項設定:解決方案將遵循這兩種規格。

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

shipmentType

string

非空白字串,指定此出貨的「類型」。這項功能可用於定義 shipment_types 之間的不相容性或需求 (請參閱 ShipmentModel 中的 shipmentTypeIncompatibilitiesshipmentTypeRequirements)。

與單次造訪指定的 visitTypes 不同:同一運送的所有取貨/配送都共用相同的 shipmentType

label

string

指定此運送單的標籤。這個標籤會在對應 ShipmentRoute.VisitshipmentLabel 中回報。

ignore

boolean

如果為 true,請略過此出貨作業,但不套用 penaltyCost

如果模型中沒有任何 shipmentTypeRequirements,則忽略運送會導致驗證錯誤。

Google 允許忽略在 injectedFirstSolutionRoutesinjectedSolutionConstraint 中執行的運送作業;解題工具會從作業路線中移除相關的上車/外送造訪。如果 precedenceRules 參照忽略的運送資訊,系統也會予以忽略。

penaltyCost

number

如果貨運未完成,則罰則會計入路線總金額。如果消費者造訪了自行選擇的上車地點和替代貨品,系統就會將包裹視為完成運送。費用可用與模型中所有其他費用相關欄位相同的單位表示,且必須為正數。

重要事項:如果未指定這項處罰,系統會視為無限期,也就是必須完成出貨。

pickupToDeliveryRelativeDetourLimit

number

指定從上車地點到貨品送達的最短路徑,最長的相對繞路時間。若有指定,其必須為非負數,且運送必須包含至少一項取貨和送貨服務。

舉例來說,如果從選定的取貨替代服務直接改為配送至所選配送方式,最早需要多久時間才能處理完畢。接著設定 pickupToDeliveryRelativeDetourLimit 會強制執行:

startTime(delivery) - startTime(pickup) <=
std::ceil(t * (1.0 + pickupToDeliveryRelativeDetourLimit))

如果同一運送屬性同時指定了相對和絕對限制,則每個取貨/外送組合使用的限制越多。截至 2017 年 10 月 10 日為止,只有交通時間不需乘車時,系統才會支援繞道時間。

VisitRequest

可透過車輛完成的訪問要求:包含一個或兩個地理位置 (請參閱下方說明)、以時間窗口表示的開始和結束時間,以及服務時間長度 (車輛抵達取貨或送貨地點所需的時間)。

JSON 表示法
{
  "arrivalLocation": {
    object (LatLng)
  },
  "arrivalWaypoint": {
    object (Waypoint)
  },
  "departureLocation": {
    object (LatLng)
  },
  "departureWaypoint": {
    object (Waypoint)
  },
  "tags": [
    string
  ],
  "timeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "duration": string,
  "cost": number,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "visitTypes": [
    string
  ],
  "label": string
}
欄位
arrivalLocation

object (LatLng)

車輛執行此 VisitRequest 時抵達的地理位置。如果運送模型包含持續時間距離矩陣,則不得指定 arrivalLocation

arrivalWaypoint

object (Waypoint)

執行這個 VisitRequest 時,車輛抵達的路線點。如果運送模型含有時間距離矩陣,請勿指定 arrivalWaypoint

departureLocation

object (LatLng)

車輛完成這項 VisitRequest 後的出發地點。如果與 arrivalLocation 相同,可以省略。如果運送模型含有時間距離矩陣,請勿指定 departureLocation

departureWaypoint

object (Waypoint)

完成這個 VisitRequest 後車輛出發的路線點。如果與 arrivalWaypoint 相同,則可省略。如果運送模型含有時間距離矩陣,請勿指定 departureWaypoint

tags[]

string

指定造訪要求中附加的標記。不得使用空字串或重複的字串。

timeWindows[]

object (TimeWindow)

限制造訪到達時間的時間區間。請注意,車輛可能會於抵達時間之外出發,也就是說,抵達時間 + 所需時間不一定要在時間範圍之內。如果車輛在 TimeWindow.start_time 之前抵達,乘客可能會等待一段時間。

如果沒有 TimeWindow,表示車輛可隨時執行這項拜訪。

時間區間必須不重疊,也就是說,每個時間區間都不得與其他時間區間重疊或相鄰,且必須依遞增順序排列。

只有單一時段才能設定 costPerHourAfterSoftEndTimesoftEndTime

duration

string (Duration format)

行程時間,也就是車輛從抵達到離開之間的時間 (會加入可能的等候時間;請參閱 timeWindows)。

時間長度以秒為單位,最多可有 9 個小數位數,並應以「s」結尾,例如:"3.5s"

cost

number

針對車輛路線提出造訪要求的費用。你可以使用這項功能,為每項貨物的替代取貨或配送服務支付不同的費用。這個成本必須與 Shipment.penalty_cost 相同單位,且不得為負數。

loadDemands

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

載入此造訪要求的需求。這與 Shipment.load_demands 欄位類似,差別在於其只會套用至這個 VisitRequest,而非整個 Shipment。這裡列出的要求已納入 Shipment.load_demands 中列出的需求。

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

visitTypes[]

string

指定造訪類型。這可分配車輛完成這項造訪所需的時間 (請參閱 Vehicle.extra_visit_duration_for_visit_type)。

一個類型只能出現一次。

label

string

指定這個 VisitRequest 的標籤。在回覆中,這個標籤會在對應的 ShipmentRoute.Visit 中回報為 visitLabel

LatLng

代表經緯度組合的物件。以一對雙精準數表示經度度數和緯度度數。除非另有指定,否則這個物件必須符合 WGS84 標準。此外,值必須在正規化範圍內。

JSON 表示法
{
  "latitude": number,
  "longitude": number
}
欄位
latitude

number

緯度度數,必須介於 [-90.0, +90.0] 的範圍之間。

longitude

number

經度度數,必須介於 [-180.0, +180.0] 的範圍之間。

途經點

封裝路線點。路線控點會標示 VisitRequests 的抵達和出發地點,以及車輛的起點和終點。

JSON 表示法
{
  "sideOfRoad": boolean,

  // Union field location_type can be only one of the following:
  "location": {
    object (Location)
  },
  "placeId": string
  // End of list of possible types for union field location_type.
}
欄位
sideOfRoad

boolean

選用設定。表示這個路線控點的位置,是為了讓車輛偏好停靠在道路的特定側邊。設定這個值後,路線就會通過位置,這樣車輛就能在路側停靠,該位置是從道路中心偏離位置。這個選項不適用於「WALKING」交通方式。

聯集欄位 location_type。以不同方式表示地點。location_type 只能是下列其中一項:
location

object (Location)

使用地理座標指定的點,包括選用的標頭。

placeId

string

與路線控點相關聯的搜尋點地點 ID。

位置

封裝位置 (地理點和選用的標題)。

JSON 表示法
{
  "latLng": {
    object (LatLng)
  },
  "heading": integer
}
欄位
latLng

object (LatLng)

航點的地理座標。

heading

integer

與流量方向相關的指南針方位。這個值用於指定接送和下車地點的道路兩側。方向值的範圍為 0 到 360,其中 0 指定正北方向,90 指定正東方向,以此類推。

TimeWindow

時間窗可限制事件的時間,例如造訪的抵達時間,或車輛的開始和結束時間。

硬時間範圍邊界 (startTimeendTime) 會強制執行事件的最早和最晚時間,例如 startTime <= event_time <= endTime。軟性時間回溯期的下限 softStartTime 表示事件發生時機應在 softStartTime 當天或之後,發生時間與事件發生前軟性開始時間的時間間隔成正比。電子時間範圍上限 softEndTime 表示在 softEndTime 當天或之前發生事件的偏好,其費用與 softEndTime 事件發生後的時間長度成正比。startTimeendTimesoftStartTimesoftEndTime 應在全球時間限制內 (請參閱 ShipmentModel.global_start_timeShipmentModel.global_end_time),並應遵守下列規定:

  0 <= `startTime` <= `softStartTime` <= `endTime` and
  0 <= `startTime` <= `softEndTime` <= `endTime`.
JSON 表示法
{
  "startTime": string,
  "endTime": string,
  "softStartTime": string,
  "softEndTime": string,
  "costPerHourBeforeSoftStartTime": number,
  "costPerHourAfterSoftEndTime": number
}
欄位
startTime

string (Timestamp format)

硬性時段開始時間。如果未指定,則會設為 ShipmentModel.global_start_time

RFC3339 世界標準時間「Zulu」格式的時間戳記,解析度以奈秒為單位,小數點後最多 9 位。例如 "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"

endTime

string (Timestamp format)

硬性時間範圍的結束時間。如果未指定,則會設為 ShipmentModel.global_end_time

RFC3339 世界標準時間「Zulu」格式的時間戳記,解析度以奈秒為單位,小數點後最多 9 位。範例:"2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"

softStartTime

string (Timestamp format)

時間範圍的正規開始時間。

RFC3339 世界標準時間「Zulu」格式的時間戳記,精確度達奈秒單位,最多九個小數位數。例如 "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"

softEndTime

string (Timestamp format)

時間範圍的軟性結束時間。

RFC3339 世界標準時間「Zulu」格式的時間戳記,精確度達奈秒單位,最多九個小數位數。範例:"2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"

costPerHourBeforeSoftStartTime

number

如果事件發生在 softStartTime 前,模型中其他費用的每小時費用,計算方式如下:

   max(0, softStartTime - t.seconds)
                          * costPerHourBeforeSoftStartTime / 3600,
t being the time of the event.

這個成本必須為正值,且只有在已設定 softStartTime 時才能設定這個欄位。

costPerHourAfterSoftEndTime

number

如果事件發生在 softEndTime 之後,系統會將每小時費用加進模型中的其他費用,計算方式如下:

   max(0, t.seconds - softEndTime.seconds)
                    * costPerHourAfterSoftEndTime / 3600,
t being the time of the event.

費用必須為正數,且只有在已設定 softEndTime 的情況下才能設定這個欄位。

車輛

模擬出貨問題中的車輛。解決運送問題時,系統會建立從 startLocation開始到 endLocation 這輛車的路線。路線是一系列造訪記錄 (請參閱 ShipmentRoute)。

JSON 表示法
{
  "displayName": string,
  "travelMode": enum (TravelMode),
  "routeModifiers": {
    object (RouteModifiers)
  },
  "startLocation": {
    object (LatLng)
  },
  "startWaypoint": {
    object (Waypoint)
  },
  "endLocation": {
    object (LatLng)
  },
  "endWaypoint": {
    object (Waypoint)
  },
  "startTags": [
    string
  ],
  "endTags": [
    string
  ],
  "startTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "endTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "unloadingPolicy": enum (UnloadingPolicy),
  "loadLimits": {
    string: {
      object (LoadLimit)
    },
    ...
  },
  "costPerHour": number,
  "costPerTraveledHour": number,
  "costPerKilometer": number,
  "fixedCost": number,
  "usedIfRouteIsEmpty": boolean,
  "routeDurationLimit": {
    object (DurationLimit)
  },
  "travelDurationLimit": {
    object (DurationLimit)
  },
  "routeDistanceLimit": {
    object (DistanceLimit)
  },
  "extraVisitDurationForVisitType": {
    string: string,
    ...
  },
  "breakRule": {
    object (BreakRule)
  },
  "label": string,
  "ignore": boolean,
  "travelDurationMultiple": number
}
欄位
displayName

string

使用者定義的車輛顯示名稱。長度上限為 63 個半形字元,可以使用 UTF-8 字元。

travelMode

enum (TravelMode)

行駛模式會影響車輛可行駛的道路和速度。另請參閱 travelDurationMultiple

routeModifiers

object (RouteModifiers)

一組滿足的條件,這些條件會影響系統計算指定車輛的路線。

startLocation

object (LatLng)

車輛開始載運貨物的地理位置。如未指定,車輛會在第一個上車地點開始行駛。如果運送模型含有時間和距離矩陣,請勿指定 startLocation

startWaypoint

object (Waypoint)

路線點代表車輛在接受任何貨物前開始的地理位置。如果未指定 startWaypointstartLocation,車輛會在第一個上車地點開始行駛。如果運送模型含有時間和距離矩陣,請勿指定 startWaypoint

endLocation

object (LatLng)

車輛完成最後一次 VisitRequest 後的終點地理位置。如果未指定,車輛的 ShipmentRoute 會在完成最後一次 VisitRequest 後立即結束。如果運送模型含有時間和距離矩陣,請勿指定 endLocation

endWaypoint

object (Waypoint)

路標代表車輛完成最後一次 VisitRequest 後的終點地理位置。如果未指定 endWaypointendLocation,車輛的 ShipmentRoute 會在最後一次完成 VisitRequest 時立即結束。如果運送模型包含時間長度和距離矩陣,則不得指定 endWaypoint

startTags[]

string

指定附加至車輛路線起點的標記。

字串不得留空或重複。

endTags[]

string

指定車輛路線終點的標記。

不得使用空字串或重複的字串。

startTimeWindows[]

object (TimeWindow)

車輛可能駛離起點的時間範圍。必須在全球時間限制內 (請參閱 ShipmentModel.global_* 欄位)。如果未指定,則除了全球時間限制以外,其他時間限制也沒有限制。

屬於相同重複欄位的時間範圍必須不重疊,也就是說,任何時間範圍都不能與其他時間範圍重疊或相鄰,且必須按時間順序排列。

只有單一時段才能設定 costPerHourAfterSoftEndTimesoftEndTime

endTimeWindows[]

object (TimeWindow)

車輛抵達目的地所需的時間範圍。必須在全球時間限制內 (請參閱 ShipmentModel.global_* 欄位)。如未指定,則除了這些全球時間限制外,沒有其他限制。

屬於相同重複欄位的時間範圍必須不重疊,也就是說,任何時間範圍都不能與其他時間範圍重疊或相鄰,且必須按時間順序排列。

只有在單一時間範圍內,才能設定 costPerHourAfterSoftEndTimesoftEndTime

unloadingPolicy

enum (UnloadingPolicy)

已對車輛強制執行卸載政策。

loadLimits

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

車輛容量 (例如重量、體積、棧板數量)。地圖中的鍵是負載類型的 ID,與 Shipment.load_demands 欄位的鍵一致。如果這個對應表中沒有特定鍵,則系統會將對應容量視為無限。

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

costPerHour

number

車輛費用:所有費用加總,且必須與 Shipment.penalty_cost 使用相同的單位。

車輛路線的每小時費用。這筆費用會套用到路線的總時間,包括行程時間、等候時間和拜訪時間。使用 costPerHour 而非僅使用 costPerTraveledHour 可能會產生額外的延遲時間。

costPerTraveledHour

number

車輛路線的每小時行駛費用。這項費用只會套用在路線的行程時間 (即 ShipmentRoute.transitions 中回報的時間),不包括等候時間和造訪時間。

costPerKilometer

number

車輛行駛路線的每公里費用。這筆費用會套用至 ShipmentRoute.transitions 中回報的距離,但不會套用至單一 VisitRequestarrivalLocationdepartureLocation 間隱含的任何移動距離。

fixedCost

number

如果這輛車輛用於處理出貨作業,就會收取這筆固定費用。

usedIfRouteIsEmpty

boolean

這個欄位僅適用於車輛路線不提供任何貨運時。指出在這種情況下,車輛是否應視為二手車。

如果為 true,即使車輛沒有運送任何貨物,也會從起點前往終點,且會考量從起點到終點的時間和距離成本。

否則,它不會從起點行駛至終點,且這輛車沒有 breakRule 或誤點 (從 TransitionAttributes) 的時程。在這種情況下,車輛的 ShipmentRoute 不含任何車輛索引和標籤以外的任何資訊。

routeDurationLimit

object (DurationLimit)

這個限制適用於車輛路線的總行車時間。在指定的 OptimizeToursResponse 中,車輛的路徑持續時間是指 vehicleEndTimevehicleStartTime 之間的時間差。

travelDurationLimit

object (DurationLimit)

這個限制適用於車輛路線的交通時間。在指定的 OptimizeToursResponse 中,路線行駛時間是所有 transitions.travel_duration 的總和。

routeDistanceLimit

object (DistanceLimit)

限制適用於車輛路線的總距離。在指定的 OptimizeToursResponse 中,路線距離是所有 transitions.travel_distance_meters 的總和。

extraVisitDurationForVisitType

map (key: string, value: string (Duration format))

指定從 visitTypes 字串到時間長度的對應項目。時間長度除了 VisitRequest.duration 以外,還達到指定 visitTypes 的造訪時間。若指定 costPerHour,延長造訪時間會使費用增加。鍵 (例如 visitTypes) 不得為空字串。

如果造訪要求包含多個類型,地圖中會為每個類型加入持續時間。

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

breakRule

object (BreakRule)

說明這輛車要強制執行的休息時間表。如果留空,這輛車就不會安排休息時間。

label

string

指定此車輛的標籤。這個標籤會在回應中以對應 ShipmentRoutevehicleLabel 回報。

ignore

boolean

如果設為 true,usedIfRouteIsEmpty 就必須為 false,且這輛車不會使用。

如果在 injectedFirstSolutionRoutes 中,運送作業是由已略過的車輛執行,則系統會在第一個解決方案中略過該作業,但可在回應中執行。

如果運送作業是由 injectedSolutionConstraint 中遭到忽略的車輛執行,且任何相關的接送/送達作業都受到限制,必須留在車輛上 (也就是未放寬至 RELAX_ALL_AFTER_THRESHOLD 層級),系統會在回應中略過該作業。如果運送的 allowedVehicleIndices 欄位為非空白,且系統忽略所有允許的車輛,系統就會在回應中略過該商品。

travelDurationMultiple

number

指定乘數,可用來增加或減少這輛車的交通時間。舉例來說,如果將此值設為 2.0,表示這輛車輛的速度較慢,且行駛時間是標準車輛的兩倍。(多次不會影響造訪時間長度)。但如果指定 costPerHourcostPerTraveledHour,則會影響費用。必須介於 [0.001, 1000.0] 之間。如未設定,車輛為標準車輛,系統會將此倍數視為 1.0。

警告:套用這個數倍數後,交通時間會四捨五入至最接近的秒數,但在執行任何數值運算之前,整數值可能會導致精確度降低。

另請參閱下方的 extraVisitDurationForVisitType

TravelMode

車輛可使用的行駛模式。

這些應為 Google 地圖平台路線偏好 API 的部分交通模式,請參閱:https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode

列舉
TRAVEL_MODE_UNSPECIFIED 未指定的交通方式,等同於 DRIVING
DRIVING 與駕駛路線相對應的交通模式 (汽車、...)。
WALKING 步行路線對應的交通方式。
TRUCK 搭乘卡車。這個模式會受到實體和法律限制。

RouteModifiers

封裝一組可選條件,用於計算車輛路線時必須滿足的條件。這與 Google 地圖平台路線偏好 API 中的 RouteModifiers 類似,請參閱:https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteModifiers

JSON 表示法
{
  "vehicleInfo": {
    object (VehicleInfo)
  }
}
欄位
vehicleInfo

object (VehicleInfo)

指定車輛資訊。

VehicleInfo

封裝車輛資訊,例如卡車資訊。

JSON 表示法
{
  "totalAxleCount": integer,
  "totalHeightMm": string,
  "totalLengthMm": string,
  "totalWidthMm": string,
  "totalWeightKg": string,
  "trailerInfo": [
    {
      object (TrailerInfo)
    }
  ],
  "hazardousGoodsTypes": [
    enum (HazardousGoodsType)
  ]
}
欄位
totalAxleCount

integer

軸的總數。必須大於或等於 2。必須設為貨車或拖車才能觸發。僅適用於 TRUCK 的移動模式。

totalHeightMm

string (int64 format)

車輛高度,包括任何連接拖車的高度。必須設為貨車或拖車才能觸發。僅適用於 TRUCK 交通方式。

totalLengthMm

string (int64 format)

車輛長度,包括任何隨附拖車的長度。必須設為貨車或拖車才能觸發。僅適用於 TRUCK 交通方式。

totalWidthMm

string (int64 format)

車輛的寬度,包括任何連接拖車的寬度。必須設為貨車或拖車才能觸發。僅適用於 TRUCK 交通方式。

totalWeightKg

string (int64 format)

車輛重量,包括任何連接拖車的重量。在此背景中的體重是指實際體重,而非體重評分。必須設為貨車或拖車才能觸發。僅適用於 TRUCK 的移動模式。

trailerInfo[]

object (TrailerInfo)

僅適用於 TRUCK 交通方式。

hazardousGoodsTypes[]

enum (HazardousGoodsType)

車輛中運輸的有害物質清單 (如有)。

TrailerInfo

與車輛連接的個別拖車相關資訊。貨運車輛需提供長度較長的拖車長度。總屬性必須涵蓋所有拖車的屬性。例如,totalHeightMm 必須大於或等於 trailerInfo.height_mm

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

string (int64 format)

預告片的長度。

HazardousGoodsType

各種有害物質的類型。

列舉
HAZARDOUS_GOODS_TYPE_UNSPECIFIED 未指定危險商品類型。
EXPLOSIVES 爆裂物。
GASES 氣體。
FLAMMABLE 易燃商品。
COMBUSTIBLE 易燃商品。
ORGANIC 有機產品。
POISON 有毒商品。
RADIOACTIVE 放射性商品。
CORROSIVE 腐蝕性商品。
ASPIRATION_HAZARD 吸入危險物品。
ENVIRONMENTAL_HAZARD 環境有害物品。
OTHER 其他類型的商品。

UnloadingPolicy

車輛卸貨方式的政策。僅適用於提供自取和外送的出貨商品。

其他商品在路線上的任何地點皆可自由運送,與 unloadingPolicy 無關。

列舉
UNLOADING_POLICY_UNSPECIFIED 未指定卸貨政策;必須在相應的接送後才會進行。
LAST_IN_FIRST_OUT 必須以相反的順序進行配送
FIRST_IN_FIRST_OUT 運送作業必須按照取貨順序進行

LoadLimit

定義套用至車輛的負載限制,例如「這輛卡車只能承載 3500 公斤」。詳情請參閱《loadLimits》。

JSON 表示法
{
  "softMaxLoad": string,
  "costPerUnitAboveSoftMax": number,
  "startLoadInterval": {
    object (Interval)
  },
  "endLoadInterval": {
    object (Interval)
  },
  "maxLoad": string
}
欄位
softMaxLoad

string (int64 format)

負載的軟性限制。詳情請參閱《costPerUnitAboveSoftMax》。

costPerUnitAboveSoftMax

number

如果載重量超過這輛車輛路線的 softMaxLoad,系統會依據下列費用懲罰 (每輛車輛只會收取一次) 收取費用:(載重量 - softMaxLoad) * costPerUnitAboveSoftMax。所有費用都會加總,且必須與 Shipment.penalty_cost 位於相同的單位。

startLoadInterval

object (Interval)

車輛在路線起點的允許載客量間隔。

endLoadInterval

object (Interval)

路線終點的車輛可接受的負載間隔。

maxLoad

string (int64 format)

可接受的最大負載量。

時間間隔

可接受的負載量間隔。

JSON 表示法
{
  "min": string,
  "max": string
}
欄位
min

string (int64 format)

可接受的最低負載。必須大於或等於 0。如果同時指定這兩個值,min 必須小於或等於 max

max

string (int64 format)

可接受的最大負載。必須大於或等於 0。如果未指定,則此訊息不會限制載入量上限。如果同時指定兩者,min 值必須 ≤ max

DurationLimit

定義車輛路線的時間上限。挑戰可以是困難或輕微。

定義軟性上限欄位時,必須一併定義軟性上限門檻及其相關費用。

JSON 表示法
{
  "maxDuration": string,
  "softMaxDuration": string,
  "quadraticSoftMaxDuration": string,
  "costPerHourAfterSoftMax": number,
  "costPerSquareHourAfterQuadraticSoftMax": number
}
欄位
maxDuration

string (Duration format)

硬性限制將持續時間限制在 maxDuration 內。

時間長度以秒為單位,最多可有 9 個小數位數,並應以「s」結尾,例如:"3.5s"

softMaxDuration

string (Duration format)

軟性限制不會強制執行時間長度上限,但違反規定時會導致路線產生費用。這項費用會與模型中定義的其他費用相加,並使用相同的單位。

如果已定義,softMaxDuration 必須為非負數。如果也定義了 maxDuration,softMaxDuration 必須小於 maxDuration。

時間長度以秒為單位,最多可有 9 個小數位數,並應以「s」結尾,例如:"3.5s"

quadraticSoftMaxDuration

string (Duration format)

非強制執行的持續時間上限並未強制執行時間上限,但如果違反,路徑會在這段時間內產生二次費用。這項費用會與模型中定義的其他費用相加,並使用相同的單位。

如果已定義,quadraticSoftMaxDuration 必須為非負數。如果也定義了 maxDuration,則 quadraticSoftMaxDuration 必須小於 maxDuration,且差值不得超過一天:

maxDuration - quadraticSoftMaxDuration <= 86400 seconds

時間長度以秒為單位,最多可有 9 個小數位數,並應以「s」結尾,例如:"3.5s"

costPerHourAfterSoftMax

number

違反 softMaxDuration 門檻時,每小時產生的費用。如果時間長度低於門檻,則額外費用為 0,否則費用取決於持續時間,方法如下:

  costPerHourAfterSoftMax * (duration - softMaxDuration)

費用必須為正數。

costPerSquareHourAfterQuadraticSoftMax

number

違反 quadraticSoftMaxDuration 門檻時產生的每平方小時費用。

如果時間長度低於門檻,則額外費用為 0,否則費用取決於持續時間,方法如下:

  costPerSquareHourAfterQuadraticSoftMax *
  (duration - quadraticSoftMaxDuration)^2

費用必須為正數。

DistanceLimit

用於定義可行駛距離上限。挑戰可以是困難或輕微。

如果定義軟性限制,必須定義 softMaxMeterscostPerKilometerAboveSoftMax,且不得為負數。

JSON 表示法
{
  "maxMeters": string,
  "softMaxMeters": string,
  "costPerKilometerAboveSoftMax": number
}
欄位
maxMeters

string (int64 format)

硬性限制,限制距離不得超過 maxMeters。限制值不得為負數。

softMaxMeters

string (int64 format)

非強制規定的距離上限並未強制執行,不過一旦違反,成本就會加起來,等於模型中定義的其他費用,且單位相同。

如果定義的 softMaxMeters 必須小於 maxMeters,且不得為負數。

costPerKilometerAboveSoftMax

number

如果距離超過 softMaxMeters 上限,則會產生每公里費用。如果距離低於限制,額外費用為 0,否則計算費用的公式如下:

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

費用必須為非負值。

BreakRule

產生車輛休息時間 (例如午休時間) 的規則。休息時間是指車輛在目前位置處於閒置狀態,無法執行任何拜訪的連續時間。下列情形可能會發生中斷:

  • 在兩次造訪之間的轉換時間 (包括造訪前或造訪後的時間,但不包括造訪期間),在這種情況下,系統會延長造訪之間的對應轉換時間,
  • 或是車輛啟動時 (車輛不得在休息中發動),在這種情況下,並不會影響車輛開始時間。
  • 或是車輛結束 (坐下與車輛結束時間) 後。
JSON 表示法
{
  "breakRequests": [
    {
      object (BreakRequest)
    }
  ],
  "frequencyConstraints": [
    {
      object (FrequencyConstraint)
    }
  ]
}
欄位
breakRequests[]

object (BreakRequest)

廣告插播序列。請參閱 BreakRequest 訊息。

frequencyConstraints[]

object (FrequencyConstraint)

但可能有幾個FrequencyConstraint。這些值都必須符合此 BreakRuleBreakRequest。詳情請參閱 FrequencyConstraint

BreakRequest

您必須事先得知每輛車的休息順序 (即數量和順序)。重複的 BreakRequest 會定義該序列的出現順序。客戶的時間範圍 (earliestStartTime / latestStartTime) 可能會重疊,但必須與訂單相容 (已勾選)。

JSON 表示法
{
  "earliestStartTime": string,
  "latestStartTime": string,
  "minDuration": string
}
欄位
earliestStartTime

string (Timestamp format)

必要欄位。廣告插播開始時的下限 (含)。

RFC3339 世界標準時間「Zulu」格式的時間戳記,精確度達奈秒單位,最多九個小數位數。例如 "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"

latestStartTime

string (Timestamp format)

必要欄位。廣告插播開始時的限制上限 (含)。

RFC3339 世界標準時間「Zulu」格式的時間戳記,解析度以奈秒為單位,小數點後最多 9 位。範例:"2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"

minDuration

string (Duration format)

必要欄位。廣告插播的時間長度下限。必須為正數。

時間長度以秒為單位,最多可有 9 個小數位數,並應以「s」結尾,例如:"3.5s"

FrequencyConstraint

您可以進一步限制上述指定的插播廣告頻率和時間長度,例如強制設下最小插播廣告頻率,例如「每 12 小時至少要插播 1 次廣告」。假設這個值可解讀為「在 12 小時的任何滑動時間範圍內,至少要有一個廣告插播時段至少一小時」,則範例會轉譯為下列 FrequencyConstraint

{
   minBreakDuration { seconds: 3600 }         # 1 hour.
   maxInterBreakDuration { seconds: 39600 }  # 11 hours (12 - 1 = 11).
}

除了 BreakRequest 中已指定的時間區間和最短時間長度外,解決方案中的中斷時間和時間長度都會遵循所有這類限制。

FrequencyConstraint 可能在練習時適用於不連續的休息時間。舉例來說,以下時程會遵循「每 12 小時 1 小時」的範例:

  04:00 vehicle start
   .. performing travel and visits ..
  09:00 1 hour break
  10:00 end of the break
   .. performing travel and visits ..
  12:00 20-min lunch break
  12:20 end of the break
   .. performing travel and visits ..
  21:00 1 hour break
  22:00 end of the break
   .. performing travel and visits ..
  23:59 vehicle end
JSON 表示法
{
  "minBreakDuration": string,
  "maxInterBreakDuration": string
}
欄位
minBreakDuration

string (Duration format)

必要欄位。此限制的插播時間長度下限。非負值。請參閱 FrequencyConstraint 的說明。

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

maxInterBreakDuration

string (Duration format)

必要欄位。路徑中不含 duration >= minBreakDuration 中斷的部分,允許的時間間隔上限。必須為正數。

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

DurationDistanceMatrix

指定從造訪和車輛起點到造訪和車輛終點的時間和距離矩陣。

JSON 表示法
{
  "rows": [
    {
      object (Row)
    }
  ],
  "vehicleStartTag": string
}
欄位
rows[]

object (Row)

指定時間長度和距離矩陣的資料列。必須包含與 ShipmentModel.duration_distance_matrix_src_tags 一樣的元素數量。

vehicleStartTag

string

定義這個持續時間和距離矩陣適用的車輛的標記。如果留空,則會套用至所有車輛,且只能有單一矩陣。

每個車輛啟動都必須與單一矩陣相符,也就是說,其中的 startTags 欄位必須與矩陣的 vehicleStartTag 相符 (且只相符一個矩陣)。

所有矩陣都必須有不同的 vehicleStartTag

指定時間長度和距離矩陣的資料列。

JSON 表示法
{
  "durations": [
    string
  ],
  "meters": [
    number
  ]
}
欄位
durations[]

string (Duration format)

指定資料列的持續時間值。必須與 ShipmentModel.duration_distance_matrix_dst_tags 具有相同數量的元素。

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

meters[]

number

特定資料列的距離值。如果沒有任何費用或限制是指模型中的距離,則可留空,否則包含的元素數量必須與 durations 一樣。

TransitionAttributes

指定路徑上兩次連續造訪之間的轉換屬性。同一個轉換可能會套用多個 TransitionAttributes:在這種情況下,所有額外費用會相加,並套用最嚴格的限制或上限 (遵循自然的「AND」語義)。

JSON 表示法
{
  "srcTag": string,
  "excludedSrcTag": string,
  "dstTag": string,
  "excludedDstTag": string,
  "cost": number,
  "costPerKilometer": number,
  "distanceLimit": {
    object (DistanceLimit)
  },
  "delay": string
}
欄位
srcTag

string

定義一組 (src->dst) 轉場效果的標記,會套用至這些屬性。

來源造訪或車輛啟動活動的 VisitRequest.tagsVehicle.start_tags 必須包含 srcTag,或不包含 excludedSrcTag (視這兩個欄位是否為空白而定),才能與來源造訪或車輛啟動活動相符。

excludedSrcTag

string

請參閱 srcTagsrcTagexcludedSrcTag 中必須有一個值不為空白。

dstTag

string

只有在 VisitRequest.tagsVehicle.end_tags 包含 dstTag 或不包含 excludedDstTag 時,才會比對到目的地造訪或車輛結束 (取決於這兩個欄位是否為空白)。

excludedDstTag

string

詳情請參閱 dstTagdstTagexcludedDstTag 中不得空白。

cost

number

指定執行此轉換作業的費用。這與模型中的所有其他費用相同,不得為負數。這筆費用會加上所有現有費用。

costPerKilometer

number

指定在執行此轉場時,所採計的每公里成本。加總在車輛上指定的 Vehicle.cost_per_kilometer 最多。

distanceLimit

object (DistanceLimit)

指定執行這次轉換時的移動距離上限。

自 2021 年 6 月起,我們只支援軟性限制。

delay

string (Duration format)

指定執行這項轉換時的延遲時間。

這類延遲是指在完成來源造訪「之後」,以及開始目的地造訪「之前」

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

ShipmentTypeIncompatibility

根據出貨類型,指定不同運送方式間的不相容問題。系統會依據不相容模式,限制同一條路線上不相容的運送方式。

JSON 表示法
{
  "types": [
    string
  ],
  "incompatibilityMode": enum (IncompatibilityMode)
}
欄位
types[]

string

不相容類型的清單。兩件出貨各有不同的 shipment_types 為「不相容」。

incompatibilityMode

enum (IncompatibilityMode)

套用至不相容項目的模式。

IncompatibilityMode

定義同一條路線上不相容貨運外觀的限制方式。

列舉
INCOMPATIBILITY_MODE_UNSPECIFIED 未指定不相容模式。請一律不要使用這個值。
NOT_PERFORMED_BY_SAME_VEHICLE 在此模式下,如果兩件不相容的運送方式不相容,則無法同一輛車共享。
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

針對兩種不相容的類型隨附 NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY 不相容模式:

  • 如果兩者都是僅限上車 (不含下車) 或僅限下車 (不含上車),則完全無法共用同一輛車。
  • 如果其中一個貨件是送貨,另一個是取貨,只要前者送達前後者取貨,兩者就能共用同一輛車輛。

ShipmentTypeRequirement

根據運送類型指定貨物之間的各項規定。規定的具體細節是由要求模式所定義。

JSON 表示法
{
  "requiredShipmentTypeAlternatives": [
    string
  ],
  "dependentShipmentTypes": [
    string
  ],
  "requirementMode": enum (RequirementMode)
}
欄位
requiredShipmentTypeAlternatives[]

string

dependentShipmentTypes 所需的替代運送類型清單。

dependentShipmentTypes[]

string

凡是 dependentShipmentTypes 欄位中具有類型的運送商品,都必須在同一條路線上運送至少一項 requiredShipmentTypeAlternatives 類型的貨品。

注意:系統不允許 shipmentType 依附於自身的需求鏈結。

requirementMode

enum (RequirementMode)

為需求套用的模式。

RequirementMode

定義路線上相依運送方式的模式。

列舉
REQUIREMENT_MODE_UNSPECIFIED 未指定需求模式。請一律不要使用這個值。
PERFORMED_BY_SAME_VEHICLE 在此模式下,所有「相依」貨物運送時都必須與至少一項「必要」貨物共乘同一輛車。
IN_SAME_VEHICLE_AT_PICKUP_TIME

IN_SAME_VEHICLE_AT_PICKUP_TIME 模式下,所有「從屬」貨件在取件時,至少需要有一個「必要」貨件。

因此「相依」運送取貨必須符合以下條件:

  • 此後路線僅會「必填」運送,或者
  • 在路線上先行取件的「必要」貨件,如果「必要」貨件有配送服務,則必須在「從屬」貨件取件後執行這項配送服務。
IN_SAME_VEHICLE_AT_DELIVERY_TIME 與先前相同,除非「相依」運送作業在交貨時需要將車輛按「必要」出貨。

PrecedenceRule

兩個事件之間的優先順序規則 (每個事件都是提貨或出貨):第二個事件必須在第一個事件開始後至少 offsetDuration 才會開始。

不過,有些優先順序可代表相同 (或相關) 事件,例如:「B 送貨後取貨」和「從 B 取件後到貨 (C) 發生」。

此外,只有在兩項運送作業都發生時,優先順序才會套用,其他作業則遭到忽略。

JSON 表示法
{
  "firstIsDelivery": boolean,
  "secondIsDelivery": boolean,
  "offsetDuration": string,
  "firstIndex": integer,
  "secondIndex": integer
}
欄位
firstIsDelivery

boolean

表示「第一個」事件是否為傳送事件。

secondIsDelivery

boolean

表示「第二個」事件是否為傳送事件。

offsetDuration

string (Duration format)

「first」和「second」事件之間的偏移量。可以是負值。

時間長度以秒為單位,最多可有 9 個小數位數,並應以「s」結尾,例如:"3.5s"

firstIndex

integer

「first」事件的出貨索引。必須指定這個欄位。

secondIndex

integer

「第二個」事件的運送索引。必須指定這個欄位。