ShipmentModel

Mô hình lô hàng chứa một tập hợp các lô hàng phải được thực hiện bằng một tập hợp các phương tiện, đồng thời giảm thiểu tổng chi phí, tức là tổng của:

  • chi phí định tuyến xe (tổng chi phí trên tổng thời gian, chi phí trên thời gian di chuyển và chi phí cố định cho tất cả xe).
  • hình phạt đối với lô hàng không được thực hiện.
  • chi phí cho toàn bộ thời gian vận chuyển
Biểu diễn dưới dạng JSON
{
  "shipments": [
    {
      object (Shipment)
    }
  ],
  "vehicles": [
    {
      object (Vehicle)
    }
  ],
  "objectives": [
    {
      object (Objective)
    }
  ],
  "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
}
Trường
shipments[]

object (Shipment)

Tập hợp các lô hàng phải được thực hiện trong mô hình.

vehicles[]

object (Vehicle)

Tập hợp các phương tiện có thể dùng để thực hiện lượt ghé thăm.

objectives[]

object (Objective)

Tập hợp các mục tiêu cho mô hình này mà chúng tôi sẽ chuyển đổi thành chi phí. Nếu không trống, mô hình đầu vào phải không có chi phí. Để nhận yêu cầu đã sửa đổi, vui lòng sử dụng solvingMode = TRANSFORM_AND_RETURN_REQUEST. Xin lưu ý rằng yêu cầu sẽ không được giải quyết trong trường hợp này. Xem tài liệu tương ứng.

Thử nghiệm: Hãy xem https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request để biết thêm thông tin.

globalStartTime

string (Timestamp format)

Thời gian bắt đầu và kết thúc chung của mô hình: mọi thời gian nằm ngoài phạm vi này đều không được coi là hợp lệ.

Khoảng thời gian của mô hình phải dưới một năm, tức là globalEndTime và globalStartTime phải cách nhau trong vòng 31.536. 000 giây.

Khi sử dụng các trường cost_per_*hour, bạn nên đặt khoảng thời gian này thành một khoảng thời gian nhỏ hơn để tăng hiệu suất (ví dụ: nếu lập mô hình cho một ngày, bạn nên đặt giới hạn thời gian chung cho ngày đó). Nếu bạn không đặt, thì 00:00:00 UTC, ngày 1 tháng 1 năm 1970 (tức là giây: 0, nano giây: 0) sẽ được dùng làm giá trị mặc định.

Hãy dùng RFC 3339, trong đó dữ liệu đầu ra được tạo sẽ luôn được chuẩn hoá theo múi giờ và sử dụng 0, 3, 6 hoặc 9 chữ số thập phân. Các khoảng lệch khác ngoài "Z" cũng được chấp nhận. Ví dụ: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" hoặc "2014-10-02T15:01:23+05:30".

globalEndTime

string (Timestamp format)

Nếu bạn không đặt, thì 00:00:00 UTC, ngày 1 tháng 1 năm 1971 (tức là giây: 31536000, nano: 0) sẽ được dùng làm giá trị mặc định.

Hãy dùng RFC 3339, trong đó dữ liệu đầu ra được tạo sẽ luôn được chuẩn hoá theo múi giờ và sử dụng 0, 3, 6 hoặc 9 chữ số thập phân. Các khoảng lệch khác ngoài "Z" cũng được chấp nhận. Ví dụ: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" hoặc "2014-10-02T15:01:23+05:30".

globalDurationCostPerHour

number

"Thời lượng tổng thể" của toàn bộ kế hoạch là khoảng thời gian giữa thời gian bắt đầu có hiệu lực sớm nhất và thời gian kết thúc có hiệu lực muộn nhất của tất cả các xe. Người dùng có thể chỉ định chi phí mỗi giờ cho số lượng đó để cố gắng và tối ưu hoá cho việc hoàn thành công việc sớm nhất, chẳng hạn. Chi phí này phải có cùng đơn vị với Shipment.penalty_cost.

durationDistanceMatrices[]

object (DurationDistanceMatrix)

Chỉ định ma trận thời lượng và khoảng cách được dùng trong mô hình. Nếu trường này trống, thì Google Maps hoặc khoảng cách trắc địa sẽ được sử dụng, tuỳ thuộc vào giá trị của trường useGeodesicDistances. Nếu không trống, useGeodesicDistances không thể là true và cả durationDistanceMatrixSrcTags lẫn durationDistanceMatrixDstTags đều không được để trống.

Ví dụ về cách sử dụng:

  • Có hai vị trí: locA và locB.
  • 1 xe bắt đầu tuyến đường tại locA và kết thúc tại locA.
  • 1 yêu cầu đến lấy hàng tại 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
    }
  }
}
  • Có 3 vị trí: locA, locB và locC.
  • 1 xe bắt đầu tuyến đường tại locA và kết thúc tại locB, sử dụng ma trận "fast".
  • 1 xe bắt đầu tuyến đường tại locB và kết thúc tại locB, sử dụng ma trận "chậm".
  • 1 xe bắt đầu tuyến đường tại locB và kết thúc tại locB, sử dụng ma trận "fast".
  • 1 yêu cầu đến lấy hàng tại locC.
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

Các thẻ xác định nguồn của ma trận thời lượng và khoảng cách; durationDistanceMatrices(i).rows(j) xác định thời lượng và khoảng cách từ các lượt ghé thăm có thẻ durationDistanceMatrixSrcTags(j) đến các lượt ghé thăm khác trong ma trận i.

Thẻ tương ứng với VisitRequest.tags hoặc Vehicle.start_tags. VisitRequest hoặc Vehicle đã cho phải khớp chính xác với một thẻ trong trường này. Xin lưu ý rằng thẻ nguồn, thẻ đích và thẻ ma trận của Vehicle có thể giống nhau; tương tự, thẻ nguồn và thẻ đích của VisitRequest có thể giống nhau. Tất cả các thẻ phải khác nhau và không được là chuỗi trống. Nếu trường này không trống, thì durationDistanceMatrices không được trống.

durationDistanceMatrixDstTags[]

string

Thẻ xác định đích đến của ma trận thời lượng và khoảng cách; durationDistanceMatrices(i).rows(j).durations(k) (resp. durationDistanceMatrices(i).rows(j).meters(k)) xác định thời lượng (tương ứng với khoảng cách) của chuyến đi từ các lượt ghé thăm có thẻ durationDistanceMatrixSrcTags(j) đến các lượt ghé thăm có thẻ durationDistanceMatrixDstTags(k) trong ma trận i.

Thẻ tương ứng với VisitRequest.tags hoặc Vehicle.start_tags. VisitRequest hoặc Vehicle đã cho phải khớp chính xác với một thẻ trong trường này. Xin lưu ý rằng thẻ nguồn, thẻ đích và thẻ ma trận của Vehicle có thể giống nhau; tương tự, thẻ nguồn và thẻ đích của VisitRequest có thể giống nhau. Tất cả các thẻ phải khác nhau và không được là chuỗi trống. Nếu trường này không trống, thì durationDistanceMatrices không được trống.

transitionAttributes[]

object (TransitionAttributes)

Đã thêm các thuộc tính chuyển đổi vào mô hình.

shipmentTypeIncompatibilities[]

object (ShipmentTypeIncompatibility)

Các nhóm shipment_types không tương thích (xem ShipmentTypeIncompatibility).

shipmentTypeRequirements[]

object (ShipmentTypeRequirement)

Tập hợp shipmentType yêu cầu (xem ShipmentTypeRequirement).

precedenceRules[]

object (PrecedenceRule)

Tập hợp các quy tắc ưu tiên phải được thực thi trong mô hình.

QUAN TRỌNG: Việc sử dụng các quy tắc ưu tiên sẽ giới hạn quy mô của bài toán có thể tối ưu hoá. Những yêu cầu sử dụng quy tắc ưu tiên có nhiều lô hàng có thể bị từ chối.

maxActiveVehicles

integer

Giới hạn số lượng xe đang hoạt động tối đa. Một xe được coi là đang hoạt động nếu tuyến đường của xe đó thực hiện ít nhất một chuyến hàng. Bạn có thể dùng thuộc tính này để giới hạn số lượng tuyến đường trong trường hợp số lượng tài xế ít hơn số lượng xe và đội xe không đồng nhất. Sau đó, quy trình tối ưu hoá sẽ chọn ra nhóm phương tiện phù hợp nhất để sử dụng. Phải là số dương.

Shipment

Việc vận chuyển một mặt hàng, từ một trong các điểm lấy hàng đến một trong các điểm giao hàng. Để lô hàng được coi là đã thực hiện, một chiếc xe duy nhất phải ghé thăm một trong các địa điểm lấy hàng (và giảm dung tích dự phòng tương ứng), sau đó ghé thăm một trong các địa điểm giao hàng (và do đó tăng lại dung tích dự phòng tương ứng).

Biểu diễn dưới dạng 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
}
Trường
displayName

string

Tên hiển thị do người dùng xác định của lô hàng. Tên này có thể dài tối đa 63 ký tự và có thể sử dụng các ký tự UTF-8.

pickups[]

object (VisitRequest)

Tập hợp các phương án lấy hàng thay thế liên quan đến lô hàng. Nếu không được chỉ định, xe chỉ cần đến một vị trí tương ứng với các chuyến giao hàng.

deliveries[]

object (VisitRequest)

Tập hợp các phương án giao hàng liên quan đến lô hàng. Nếu bạn không chỉ định, xe chỉ cần đến một địa điểm tương ứng với các điểm lấy hàng.

loadDemands

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

Nhu cầu tải của lô hàng (ví dụ: trọng lượng, thể tích, số lượng pallet, v.v.). Khoá trong bản đồ phải là giá trị nhận dạng mô tả loại tải tương ứng, lý tưởng nhất là bao gồm cả đơn vị. Ví dụ: "weight_kg", "volume_gallons", "pallet_count", v.v. Nếu một khoá nhất định không xuất hiện trong bản đồ, thì tải trọng tương ứng sẽ được coi là rỗng.

allowedVehicleIndices[]

integer

Tập hợp các phương tiện có thể thực hiện lô hàng này. Nếu bạn để trống, tất cả các xe đều có thể thực hiện hành động này. Xe được cung cấp theo chỉ mục trong danh sách vehicles của ShipmentModel.

costsPerVehicle[]

number

Chỉ định chi phí phát sinh khi lô hàng này được giao bằng từng xe. Nếu được chỉ định, thì thuộc tính này phải có:

  • số phần tử bằng với costsPerVehicleIndices. costsPerVehicle[i] tương ứng với xe costsPerVehicleIndices[i] của mẫu xe.
  • số phần tử bằng số lượng xe trong mô hình. Phần tử thứ i tương ứng với xe #i của mô hình.

Các chi phí này phải có cùng đơn vị với penaltyCost và không được nhỏ hơn 0. Hãy để trống trường này nếu không có chi phí như vậy.

costsPerVehicleIndices[]

integer

Chỉ mục của các phương tiện áp dụng costsPerVehicle. Nếu không trống, thì trường này phải có cùng số phần tử như costsPerVehicle. Bạn không được chỉ định chỉ mục xe nhiều lần. Nếu một chiếc xe bị loại trừ khỏi costsPerVehicleIndices, thì chi phí của chiếc xe đó sẽ bằng 0.

pickupToDeliveryAbsoluteDetourLimit

string (Duration format)

Chỉ định thời gian đi đường vòng tuyệt đối tối đa so với đường đi ngắn nhất từ điểm đến lấy hàng đến điểm giao hàng. Nếu được chỉ định, giá trị này phải không âm và lô hàng phải có ít nhất một lần đến lấy hàng và một lần giao hàng.

Ví dụ: giả sử t là thời gian ngắn nhất để đi từ điểm lấy hàng thay thế đã chọn đến thẳng điểm giao hàng thay thế đã chọn. Sau đó, chế độ cài đặt pickupToDeliveryAbsoluteDetourLimit sẽ thực thi:

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

Nếu cả giới hạn tương đối và giới hạn tuyệt đối đều được chỉ định cho cùng một lô hàng, thì giới hạn ràng buộc hơn sẽ được sử dụng cho mỗi cặp lấy hàng/giao hàng có thể xảy ra. Kể từ tháng 10 năm 2017, đường vòng chỉ được hỗ trợ khi thời gian di chuyển không phụ thuộc vào phương tiện.

pickupToDeliveryTimeLimit

string (Duration format)

Chỉ định thời gian tối đa từ khi bắt đầu lấy hàng đến khi bắt đầu giao hàng. Nếu được chỉ định, giá trị này phải không âm và lô hàng phải có ít nhất một lần đến lấy hàng và một lần giao hàng. Điều này không phụ thuộc vào phương án thay thế nào được chọn cho việc đến lấy hàng và giao hàng, cũng như không phụ thuộc vào tốc độ của xe. Bạn có thể chỉ định giá trị này cùng với các quy tắc ràng buộc về đường vòng tối đa: giải pháp sẽ tuân thủ cả hai thông số kỹ thuật.

shipmentType

string

Chuỗi không trống chỉ định "loại" cho lô hàng này. Bạn có thể dùng tính năng này để xác định các điểm không tương thích hoặc yêu cầu giữa shipment_types (xem shipmentTypeIncompatibilities và shipmentTypeRequirements trong ShipmentModel).

Khác với visitTypes được chỉ định cho một lượt ghé thăm: Tất cả các lượt đến lấy hàng/giao hàng thuộc cùng một lô hàng đều có cùng shipmentType.

label

string

Chỉ định nhãn cho lô hàng này. Nhãn này được báo cáo trong phản hồi trong shipmentLabel của ShipmentRoute.Visit tương ứng.

ignore

boolean

Nếu đúng, hãy bỏ qua lô hàng này nhưng không áp dụng penaltyCost.

Việc bỏ qua một lô hàng sẽ dẫn đến lỗi xác thực khi có bất kỳ shipmentTypeRequirements nào trong mô hình.

Bạn được phép bỏ qua một lô hàng được thực hiện trong injectedFirstSolutionRoutes hoặc injectedSolutionConstraint; trình giải sẽ xoá các lượt ghé thăm lấy hàng/giao hàng có liên quan khỏi tuyến đường thực hiện. precedenceRules tham chiếu đến các lô hàng bị bỏ qua cũng sẽ bị bỏ qua.

penaltyCost

number

Nếu lô hàng không được hoàn tất, hình phạt này sẽ được thêm vào tổng chi phí của các tuyến đường. Một lô hàng được coi là đã hoàn tất nếu một trong các phương án lấy hàng và giao hàng của lô hàng đó được ghé thăm. Chi phí có thể được thể hiện bằng cùng một đơn vị dùng cho tất cả các trường khác liên quan đến chi phí trong mô hình và phải là số dương.

QUAN TRỌNG: Nếu không được chỉ định, hình phạt này được coi là vô hạn, tức là lô hàng phải được hoàn tất.

pickupToDeliveryRelativeDetourLimit

number

Chỉ định thời gian đi đường vòng tương đối tối đa so với tuyến đường ngắn nhất từ điểm đến lấy hàng đến điểm giao hàng. Nếu được chỉ định, giá trị này phải không âm và lô hàng phải có ít nhất một lần đến lấy hàng và một lần giao hàng.

Ví dụ: giả sử t là thời gian ngắn nhất để đi từ điểm lấy hàng thay thế đã chọn đến thẳng điểm giao hàng thay thế đã chọn. Sau đó, chế độ cài đặt pickupToDeliveryRelativeDetourLimit sẽ thực thi:

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

Nếu cả giới hạn tương đối và giới hạn tuyệt đối đều được chỉ định cho cùng một lô hàng, thì giới hạn ràng buộc hơn sẽ được sử dụng cho mỗi cặp lấy hàng/giao hàng có thể xảy ra. Kể từ tháng 10 năm 2017, đường vòng chỉ được hỗ trợ khi thời gian di chuyển không phụ thuộc vào phương tiện.

VisitRequest

Yêu cầu về một lượt ghé thăm có thể được thực hiện bằng một phương tiện: lượt ghé thăm này có một vị trí địa lý (hoặc hai, xem bên dưới), thời gian mở và đóng cửa được biểu thị bằng khung thời gian và thời gian dịch vụ (thời gian mà phương tiện dành ra sau khi đến để lấy hoặc giao hàng).

Biểu diễn dưới dạng 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,
  "avoidUTurns": boolean
}
Trường
arrivalLocation

object (LatLng)

Vị trí địa lý nơi xe đến khi thực hiện VisitRequest này. Nếu mô hình lô hàng có ma trận khoảng cách thời lượng, bạn không được chỉ định arrivalLocation.

arrivalWaypoint

object (Waypoint)

Điểm tham chiếu mà xe đến khi thực hiện VisitRequest này. Nếu mô hình lô hàng có ma trận khoảng cách thời lượng, bạn không được chỉ định arrivalWaypoint.

departureLocation

object (LatLng)

Vị trí địa lý nơi xe khởi hành sau khi hoàn thành VisitRequest này. Có thể bỏ qua nếu giống với arrivalLocation. Nếu mô hình lô hàng có ma trận khoảng cách thời lượng, bạn không được chỉ định departureLocation.

departureWaypoint

object (Waypoint)

Điểm tham chiếu nơi xe khởi hành sau khi hoàn thành VisitRequest này. Có thể bỏ qua nếu giống với arrivalWaypoint. Nếu mô hình lô hàng có ma trận khoảng cách thời lượng, bạn không được chỉ định departureWaypoint.

tags[]

string

Chỉ định các thẻ được đính kèm vào yêu cầu truy cập. Không được phép sử dụng chuỗi trống hoặc chuỗi trùng lặp.

timeWindows[]

object (TimeWindow)

Khung thời gian ràng buộc thời gian đến tại một lượt ghé thăm. Xin lưu ý rằng một xe có thể khởi hành ngoài khung thời gian đến, tức là thời gian đến + thời lượng không cần phải nằm trong khung thời gian. Điều này có thể khiến bạn phải chờ nếu xe đến trước TimeWindow.start_time.

Nếu không có TimeWindow, tức là xe có thể thực hiện chuyến ghé thăm này bất cứ lúc nào.

Các khoảng thời gian phải tách biệt, tức là không có khoảng thời gian nào được trùng lặp hoặc liền kề với khoảng thời gian khác và các khoảng thời gian phải theo thứ tự tăng dần.

Bạn chỉ có thể đặt costPerHourAfterSoftEndTime và softEndTime nếu chỉ có một khoảng thời gian.

duration

string (Duration format)

Thời gian ghé thăm, tức là thời gian xe dừng lại giữa lúc đến và lúc đi (được cộng vào thời gian chờ có thể xảy ra; xem timeWindows).

cost

number

Chi phí để phục vụ yêu cầu ghé thăm này trên một tuyến đường của xe. Bạn có thể dùng thuộc tính này để thanh toán các khoản phí khác nhau cho từng phương thức giao hàng hoặc đến lấy hàng thay thế của một lô hàng. Chi phí này phải có cùng đơn vị với Shipment.penalty_cost và không được nhỏ hơn 0.

loadDemands

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

Tải nhu cầu của yêu cầu truy cập này. Trường này giống hệt trường Shipment.load_demands, ngoại trừ việc chỉ áp dụng cho VisitRequest này thay vì toàn bộ Shipment. Các nhu cầu được liệt kê tại đây sẽ được thêm vào các nhu cầu được liệt kê trong Shipment.load_demands.

visitTypes[]

string

Chỉ định loại lượt ghé thăm. Bạn có thể dùng thuộc tính này để phân bổ thêm thời gian cần thiết để một xe hoàn tất lượt ghé thăm này (xem Vehicle.extra_visit_duration_for_visit_type).

Mỗi loại chỉ có thể xuất hiện một lần.

label

string

Chỉ định nhãn cho VisitRequest này. Nhãn này được báo cáo trong phản hồi dưới dạng visitLabel trong ShipmentRoute.Visit tương ứng.

avoidUTurns

boolean

Chỉ định xem có nên tránh quay đầu xe trên tuyến đường lái xe tại vị trí này hay không. Tính năng tránh quay đầu xe chỉ hoạt động trong khả năng tốt nhất và không đảm bảo tránh được hoàn toàn. Đây là một tính năng thử nghiệm và hành vi có thể thay đổi.

Thử nghiệm: Hãy xem https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request để biết thêm thông tin chi tiết.

LatLng

Một đối tượng đại diện cho một cặp vĩ độ/kinh độ. Giá trị này được biểu thị dưới dạng một cặp số thực có độ chính xác gấp đôi để thể hiện vĩ độ và kinh độ. Trừ phi có quy định khác, đối tượng này phải tuân thủ tiêu chuẩn WGS84. Giá trị phải nằm trong phạm vi chuẩn hoá.

Biểu diễn dưới dạng JSON
{
  "latitude": number,
  "longitude": number
}
Trường
latitude

number

Vĩ độ tính bằng độ. Giá trị này phải nằm trong khoảng [-90,0, +90,0].

longitude

number

Kinh độ tính bằng độ. Giá trị này phải nằm trong khoảng [-180,0, +180,0].

Waypoint

Đóng gói một điểm tham chiếu. Điểm tham chiếu đánh dấu vị trí đến và đi của VisitRequests, cũng như vị trí bắt đầu và kết thúc của Vehicles.

Biểu diễn dưới dạng JSON
{
  "sideOfRoad": boolean,
  "vehicleStopover": boolean,

  // The following is a list of mutually exclusive fields. At most one of the
  // fields will be set in a response:
  "location": {
    object (Location)
  },
  "placeId": string
  // End of mutually exclusive fields.
}
Trường
sideOfRoad

boolean

Không bắt buộc. Cho biết rằng vị trí của điểm tham chiếu này ưu tiên cho xe dừng ở một bên đường cụ thể. Khi bạn đặt giá trị này, tuyến đường sẽ đi qua vị trí đó để xe có thể dừng ở bên đường mà vị trí đó thiên về từ giữa đường. Lựa chọn này không hoạt động với phương thức di chuyển "WALKING" (ĐI BỘ).

vehicleStopover

boolean

Cho biết rằng điểm tham chiếu là nơi xe dừng lại để đón hoặc trả khách. Lựa chọn này chỉ hoạt động cho phương thức di chuyển "DRIVING" và khi "locationType" là "location".

Thử nghiệm: Hành vi hoặc sự tồn tại của trường này có thể thay đổi trong tương lai.

Các cách khác nhau để biểu thị một vị trí. Sau đây là danh sách các trường loại trừ lẫn nhau. Tối đa một trong các trường sẽ được đặt trong phản hồi:
location

object (Location)

Một điểm được chỉ định bằng toạ độ địa lý, bao gồm cả hướng (không bắt buộc).

placeId

string

Mã địa điểm yêu thích liên kết với điểm tham chiếu.

Khi sử dụng mã địa điểm để chỉ định vị trí đến hoặc đi của VisitRequest, hãy sử dụng mã địa điểm đủ cụ thể để xác định vị trí LatLng cho việc đi theo chỉ dẫn đến địa điểm đó. Ví dụ: bạn nên sử dụng Mã địa điểm đại diện cho một toà nhà, nhưng không nên sử dụng Mã địa điểm đại diện cho một con đường.

Kết thúc các trường loại trừ lẫn nhau.

Thông tin vị trí

Đóng gói một vị trí (một điểm địa lý và một tiêu đề không bắt buộc).

Biểu diễn dưới dạng JSON
{
  "latLng": {
    object (LatLng)
  },
  "heading": integer
}
Trường
latLng

object (LatLng)

Toạ độ địa lý của điểm tham chiếu.

heading

integer

Hướng la bàn liên quan đến hướng của luồng giao thông. Giá trị này được dùng để chỉ định lề đường cần sử dụng cho việc đón và trả khách. Giá trị hướng có thể từ 0 đến 360, trong đó 0 chỉ định hướng chính Bắc, 90 chỉ định hướng chính Đông, v.v.

TimeWindow

Khung thời gian ràng buộc thời gian của một sự kiện, chẳng hạn như thời gian đến của một lượt ghé thăm hoặc thời gian bắt đầu và kết thúc của một xe.

Ranh giới khung thời gian cứng, startTime và endTime, thực thi thời gian sớm nhất và muộn nhất của sự kiện, sao cho startTime <= event_time <= endTime. Giới hạn dưới của khoảng thời gian mềm, softStartTime, thể hiện lựa chọn ưu tiên cho sự kiện xảy ra tại hoặc sau softStartTime bằng cách chịu một khoản chi phí tỷ lệ thuận với thời gian trước khi softStartTime xảy ra sự kiện. Giới hạn trên của khoảng thời gian linh hoạt, softEndTime, thể hiện ưu tiên cho sự kiện xảy ra tại hoặc trước softEndTime bằng cách chịu chi phí tỷ lệ thuận với thời gian sau softEndTime mà sự kiện xảy ra. startTime, endTime, softStartTime và softEndTime phải nằm trong giới hạn thời gian chung (xem ShipmentModel.global_start_time và ShipmentModel.global_end_time) và phải tuân thủ:

  0 <= `startTime` <= `endTime` and
  0 <= `startTime` <= `softStartTime` and
  0 <= `softEndTime` <= `endTime`.
Biểu diễn dưới dạng JSON
{
  "startTime": string,
  "endTime": string,
  "softStartTime": string,
  "softEndTime": string,
  "costPerHourBeforeSoftStartTime": number,
  "costPerHourAfterSoftEndTime": number
}
Trường
startTime

string (Timestamp format)

Thời gian bắt đầu của khung thời gian cố định. Nếu không được chỉ định, giá trị này sẽ được đặt thành ShipmentModel.global_start_time.

Hãy dùng RFC 3339, trong đó dữ liệu đầu ra được tạo sẽ luôn được chuẩn hoá theo múi giờ và sử dụng 0, 3, 6 hoặc 9 chữ số thập phân. Các khoảng lệch khác ngoài "Z" cũng được chấp nhận. Ví dụ: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" hoặc "2014-10-02T15:01:23+05:30".

endTime

string (Timestamp format)

Thời gian kết thúc của khung thời gian cố định. Nếu không được chỉ định, giá trị này sẽ được đặt thành ShipmentModel.global_end_time.

Hãy dùng RFC 3339, trong đó dữ liệu đầu ra được tạo sẽ luôn được chuẩn hoá theo múi giờ và sử dụng 0, 3, 6 hoặc 9 chữ số thập phân. Các khoảng lệch khác ngoài "Z" cũng được chấp nhận. Ví dụ: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" hoặc "2014-10-02T15:01:23+05:30".

softStartTime

string (Timestamp format)

Thời gian bắt đầu mềm của khoảng thời gian.

Hãy dùng RFC 3339, trong đó dữ liệu đầu ra được tạo sẽ luôn được chuẩn hoá theo múi giờ và sử dụng 0, 3, 6 hoặc 9 chữ số thập phân. Các khoảng lệch khác ngoài "Z" cũng được chấp nhận. Ví dụ: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" hoặc "2014-10-02T15:01:23+05:30".

softEndTime

string (Timestamp format)

Thời gian kết thúc không bắt buộc của khoảng thời gian.

Hãy dùng RFC 3339, trong đó dữ liệu đầu ra được tạo sẽ luôn được chuẩn hoá theo múi giờ và sử dụng 0, 3, 6 hoặc 9 chữ số thập phân. Các khoảng lệch khác ngoài "Z" cũng được chấp nhận. Ví dụ: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" hoặc "2014-10-02T15:01:23+05:30".

costPerHourBeforeSoftStartTime

number

Chi phí mỗi giờ được thêm vào các chi phí khác trong mô hình nếu sự kiện xảy ra trước softStartTime, được tính như sau:

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

Chi phí này phải là số dương và bạn chỉ có thể đặt trường này nếu đã đặt softStartTime.

costPerHourAfterSoftEndTime

number

Chi phí mỗi giờ được thêm vào các chi phí khác trong mô hình nếu sự kiện xảy ra sau softEndTime, được tính như sau:

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

Chi phí này phải là số dương và bạn chỉ có thể đặt trường này nếu đã đặt softEndTime.

Xe

Mô hình hoá một chiếc xe trong bài toán vận chuyển. Việc giải quyết vấn đề về lô hàng sẽ tạo ra một tuyến đường bắt đầu từ startLocation và kết thúc tại endLocation cho xe này. Tuyến đường là một chuỗi các chuyến đi (xem ShipmentRoute).

Biểu diễn dưới dạng 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
}
Trường
displayName

string

Tên hiển thị do người dùng xác định của xe. Tên này có thể dài tối đa 63 ký tự và có thể sử dụng các ký tự UTF-8.

travelMode

enum (TravelMode)

Phương thức di chuyển ảnh hưởng đến những con đường mà xe có thể đi và tốc độ của xe. Xem thêm travelDurationMultiple.

routeModifiers

object (RouteModifiers)

Một nhóm điều kiện cần đáp ứng, ảnh hưởng đến cách tính toán tuyến đường cho phương tiện nhất định.

startLocation

object (LatLng)

Vị trí địa lý nơi xe bắt đầu trước khi nhận bất kỳ lô hàng nào. Nếu không được chỉ định, xe sẽ bắt đầu tại điểm đón đầu tiên. Nếu mô hình lô hàng có ma trận thời lượng và khoảng cách, thì bạn không được chỉ định startLocation.

startWaypoint

object (Waypoint)

Điểm tham chiếu đại diện cho một vị trí địa lý nơi xe bắt đầu trước khi lấy bất kỳ lô hàng nào. Nếu bạn không chỉ định cả startWaypoint và startLocation, thì xe sẽ bắt đầu tại điểm đón đầu tiên. Nếu mô hình lô hàng có ma trận thời lượng và khoảng cách, thì bạn không được chỉ định startWaypoint.

endLocation

object (LatLng)

Vị trí địa lý nơi xe dừng lại sau khi hoàn thành VisitRequest gần đây nhất. Nếu không được chỉ định, ShipmentRoute của xe sẽ kết thúc ngay khi hoàn thành VisitRequest cuối cùng. Nếu mô hình lô hàng có ma trận thời lượng và khoảng cách, thì bạn không được chỉ định endLocation.

endWaypoint

object (Waypoint)

Điểm tham chiếu đại diện cho một vị trí địa lý nơi xe dừng lại sau khi hoàn thành VisitRequest cuối cùng. Nếu bạn không chỉ định endWaypoint và endLocation, thì ShipmentRoute của xe sẽ kết thúc ngay khi xe hoàn tất VisitRequest cuối cùng. Nếu mô hình lô hàng có ma trận thời lượng và khoảng cách, thì bạn không được chỉ định endWaypoint.

startTags[]

string

Chỉ định các thẻ được đính kèm vào điểm bắt đầu của tuyến đường của xe.

Không được phép sử dụng chuỗi trống hoặc chuỗi trùng lặp.

endTags[]

string

Chỉ định các thẻ được đính kèm vào cuối tuyến đường của xe.

Không được phép sử dụng chuỗi trống hoặc chuỗi trùng lặp.

startTimeWindows[]

object (TimeWindow)

Khung thời gian mà xe có thể khởi hành từ vị trí xuất phát. Các giá trị này phải nằm trong giới hạn thời gian chung (xem các trường ShipmentModel.global_*). Nếu không được chỉ định, thì sẽ không có giới hạn nào ngoài các giới hạn thời gian chung đó.

Các khoảng thời gian thuộc cùng một trường lặp lại phải tách biệt, tức là không có khoảng thời gian nào có thể trùng lặp hoặc liền kề với khoảng thời gian khác và các khoảng thời gian đó phải theo thứ tự thời gian.

Bạn chỉ có thể đặt costPerHourAfterSoftEndTime và softEndTime nếu chỉ có một khoảng thời gian.

endTimeWindows[]

object (TimeWindow)

Khung thời gian mà xe có thể đến vị trí cuối cùng. Các giá trị này phải nằm trong giới hạn thời gian chung (xem các trường ShipmentModel.global_*). Nếu không được chỉ định, thì sẽ không có giới hạn nào ngoài các giới hạn thời gian chung đó.

Các khoảng thời gian thuộc cùng một trường lặp lại phải tách biệt, tức là không có khoảng thời gian nào có thể trùng lặp hoặc liền kề với khoảng thời gian khác và các khoảng thời gian đó phải theo thứ tự thời gian.

Bạn chỉ có thể đặt costPerHourAfterSoftEndTime và softEndTime nếu chỉ có một khoảng thời gian.

unloadingPolicy

enum (UnloadingPolicy)

Chính sách dỡ hàng được thực thi trên xe.

loadLimits

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

Sức chứa của xe (ví dụ: trọng lượng, thể tích, số lượng pallet). Các khoá trong bản đồ là giá trị nhận dạng của loại tải, nhất quán với các khoá của trường Shipment.load_demands. Nếu một khoá nhất định không có trong bản đồ này, thì dung lượng tương ứng được coi là không giới hạn.

costPerHour

number

Chi phí xe: tất cả chi phí cộng lại và phải có cùng đơn vị với Shipment.penalty_cost.

Chi phí mỗi giờ của tuyến đường của xe. Chi phí này được áp dụng cho tổng thời gian của tuyến đường, bao gồm cả thời gian di chuyển, thời gian chờ và thời gian ghé thăm. Việc sử dụng costPerHour thay vì chỉ costPerTraveledHour có thể làm tăng độ trễ.

costPerTraveledHour

number

Chi phí cho mỗi giờ di chuyển của tuyến đường của xe. Chi phí này chỉ áp dụng cho thời gian di chuyển của tuyến đường (tức là thời gian được báo cáo trong ShipmentRoute.transitions) và không bao gồm thời gian chờ và thời gian ghé thăm.

costPerKilometer

number

Chi phí trên mỗi km của tuyến đường xe đi. Chi phí này được áp dụng cho khoảng cách được báo cáo trong ShipmentRoute.transitions và không áp dụng cho bất kỳ khoảng cách nào được di chuyển ngầm từ arrivalLocation đến departureLocation của một VisitRequest.

fixedCost

number

Chi phí cố định được áp dụng nếu xe này được dùng để xử lý một lô hàng.

usedIfRouteIsEmpty

boolean

Trường này chỉ áp dụng cho các xe khi tuyến đường của xe không phục vụ bất kỳ lô hàng nào. Thuộc tính này cho biết liệu xe có được coi là đã qua sử dụng hay không trong trường hợp này.

Nếu đúng, xe sẽ đi từ vị trí xuất phát đến vị trí kết thúc ngay cả khi không phục vụ bất kỳ lô hàng nào, đồng thời chi phí thời gian và quãng đường phát sinh từ hành trình xuất phát --> kết thúc sẽ được tính đến.

Nếu không, xe sẽ không di chuyển từ điểm xuất phát đến điểm đến và không có breakRule hoặc độ trễ (từ TransitionAttributes) nào được lên lịch cho xe này. Trong trường hợp này, ShipmentRoute của xe không chứa bất kỳ thông tin nào ngoại trừ chỉ mục và nhãn của xe.

routeDurationLimit

object (DurationLimit)

Giới hạn áp dụng cho tổng thời lượng của tuyến đường của xe. Trong một OptimizeToursResponse nhất định, thời gian của tuyến đường của một xe là chênh lệch giữa vehicleEndTime và vehicleStartTime.

travelDurationLimit

object (DurationLimit)

Giới hạn áp dụng cho thời gian di chuyển của tuyến đường của xe. Trong một OptimizeToursResponse nhất định, thời gian di chuyển của tuyến đường là tổng của tất cả transitions.travel_duration.

routeDistanceLimit

object (DistanceLimit)

Giới hạn áp dụng cho tổng quãng đường của tuyến đường mà xe đi. Trong một OptimizeToursResponse nhất định, khoảng cách tuyến đường là tổng của tất cả transitions.travel_distance_meters.

extraVisitDurationForVisitType

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

Chỉ định bản đồ từ chuỗi visitTypes đến thời lượng. Thời lượng là thời gian ngoài VisitRequest.duration cần thực hiện trong các lượt ghé thăm có visitTypes được chỉ định. Thời gian ghé thăm bổ sung này sẽ làm tăng chi phí nếu bạn chỉ định costPerHour. Khoá (tức là visitTypes) không được là chuỗi trống.

Nếu một yêu cầu ghé thăm có nhiều loại, thì thời lượng sẽ được thêm cho từng loại trong bản đồ.

breakRule

object (BreakRule)

Mô tả lịch nghỉ giải lao cần thực thi trên xe này. Nếu bạn để trống, hệ thống sẽ không lên lịch nghỉ giải lao cho xe này.

label

string

Chỉ định nhãn cho xe này. Nhãn này được báo cáo trong phản hồi dưới dạng vehicleLabel của ShipmentRoute tương ứng.

ignore

boolean

Nếu đúng, usedIfRouteIsEmpty phải là sai và xe này sẽ không được sử dụng.

Nếu một lô hàng được thực hiện bằng một xe bị bỏ qua trong injectedFirstSolutionRoutes, thì lô hàng đó sẽ bị bỏ qua trong giải pháp đầu tiên nhưng có thể được thực hiện trong phản hồi.

Nếu một lô hàng được thực hiện bằng một phương tiện bị bỏ qua trong injectedSolutionConstraint và mọi hoạt động đến lấy hàng/giao hàng liên quan đều bị ràng buộc để duy trì trên phương tiện (tức là không được nới lỏng đến cấp RELAX_ALL_AFTER_THRESHOLD), thì lô hàng đó sẽ bị bỏ qua trong phản hồi. Nếu một lô hàng có trường allowedVehicleIndices không trống và tất cả các xe được phép đều bị bỏ qua, thì lô hàng đó sẽ bị bỏ qua trong phản hồi.

travelDurationMultiple

number

Chỉ định một hệ số nhân có thể dùng để tăng hoặc giảm thời gian di chuyển của phương tiện này. Ví dụ: nếu bạn đặt giá trị này thành 2, thì phương tiện này sẽ chậm hơn và có thời gian di chuyển gấp đôi so với phương tiện tiêu chuẩn. Bội số này không ảnh hưởng đến thời lượng của lượt ghé thăm. Điều này ảnh hưởng đến chi phí nếu bạn chỉ định costPerHour hoặc costPerTraveledHour. Giá trị này phải nằm trong khoảng [0,001, 1000]. Nếu bạn không đặt, thì xe sẽ là xe tiêu chuẩn và hệ số này được coi là 1.

CẢNH BÁO: Thời gian di chuyển sẽ được làm tròn đến giây gần nhất sau khi áp dụng bội số này nhưng trước khi thực hiện bất kỳ phép toán số nào. Do đó, bội số nhỏ có thể dẫn đến mất độ chính xác.

Xem thêm extraVisitDurationForVisitType bên dưới.

TravelMode

Các phương tiện di chuyển mà xe có thể sử dụng.

Đây phải là một nhóm nhỏ các phương thức di chuyển của Routes API trên Google Maps Platform, hãy xem: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode

Lưu ý: Các tuyến đường WALKING đang trong giai đoạn thử nghiệm và đôi khi có thể thiếu vỉa hè hoặc lối đi rõ ràng cho người đi bộ. Bạn phải hiển thị cảnh báo này cho người dùng đối với tất cả tuyến đường đi bộ mà bạn hiển thị trong ứng dụng của mình.

Enum
TRAVEL_MODE_UNSPECIFIED Phương thức di chuyển không xác định, tương đương với DRIVING.
DRIVING Phương thức di chuyển tương ứng với đường lái xe (ô tô, ...).
WALKING Phương thức di chuyển tương ứng với đường đi bộ.
TWO_WHEELER Xe hai bánh, xe cơ giới. Ví dụ: xe mô tô. Xin lưu ý rằng phương thức này khác với phương thức di chuyển ĐI XE ĐẠP (bao gồm cả phương thức di chuyển bằng sức người). Chế độ di chuyển này chỉ được hỗ trợ ở những quốc gia có trong danh sách Các quốc gia và khu vực hỗ trợ xe hai bánh.

RouteModifiers

Đóng gói một tập hợp các điều kiện không bắt buộc cần đáp ứng khi tính toán tuyến đường của xe. Trường này tương tự như RouteModifiers trong Routes Preferred API của Google Maps Platform; hãy xem: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers.

Biểu diễn dưới dạng JSON
{
  "avoidTolls": boolean,
  "avoidHighways": boolean,
  "avoidFerries": boolean,
  "avoidIndoor": boolean
}
Trường
avoidTolls

boolean

Chỉ định xem có nên tránh đường có thu phí khi hợp lý hay không. Ưu tiên các tuyến đường không có thu phí. Chỉ áp dụng cho các phương thức di chuyển bằng xe cơ giới.

avoidHighways

boolean

Chỉ định xem có nên tránh đường cao tốc khi hợp lý hay không. Ưu tiên các tuyến đường không có đường cao tốc. Chỉ áp dụng cho các phương thức di chuyển bằng xe cơ giới.

avoidFerries

boolean

Chỉ định xem có nên tránh phà khi hợp lý hay không. Ưu tiên các tuyến đường không cần đi phà. Chỉ áp dụng cho các phương thức di chuyển bằng xe cơ giới.

avoidIndoor

boolean

Không bắt buộc. Chỉ định xem có nên tránh đi vào trong nhà khi có thể hay không. Ưu tiên những tuyến đường không có tính năng chỉ đường trong nhà. Chỉ áp dụng cho phương thức di chuyển WALKING.

UnloadingPolicy

Chính sách về cách dỡ hàng khỏi xe. Chỉ áp dụng cho các lô hàng có cả điểm lấy hàng và điểm giao hàng.

Các lô hàng khác có thể được giao ở bất kỳ đâu trên tuyến đường, không phụ thuộc vào unloadingPolicy.

Enum
UNLOADING_POLICY_UNSPECIFIED Chính sách dỡ hàng không xác định; việc giao hàng chỉ được diễn ra sau khi lấy hàng tương ứng.
LAST_IN_FIRST_OUT Việc giao hàng phải diễn ra theo thứ tự ngược lại với việc lấy hàng
FIRST_IN_FIRST_OUT Các điểm giao hàng phải theo cùng thứ tự với các điểm lấy hàng

LoadLimit

Xác định giới hạn tải trọng áp dụng cho một phương tiện, ví dụ: "xe tải này chỉ được chở tối đa 3.500 kg". Vui lòng xem loadLimits.

Biểu diễn dưới dạng JSON
{
  "softMaxLoad": string,
  "costPerUnitAboveSoftMax": number,
  "startLoadInterval": {
    object (Interval)
  },
  "endLoadInterval": {
    object (Interval)
  },
  "maxLoad": string,
  "costPerKilometer": {
    object (LoadCost)
  },
  "costPerTraveledHour": {
    object (LoadCost)
  }
}
Trường
softMaxLoad

string (int64 format)

Giới hạn linh hoạt của tải trọng. Vui lòng xem costPerUnitAboveSoftMax.

costPerUnitAboveSoftMax

number

Nếu tải trọng vượt quá softMaxLoad dọc theo tuyến đường của xe này, thì mức phạt chi phí sau đây sẽ được áp dụng (chỉ một lần cho mỗi xe): (tải trọng – softMaxLoad) * costPerUnitAboveSoftMax. Tất cả chi phí đều được cộng dồn và phải có cùng đơn vị với Shipment.penalty_cost. Bạn chỉ có thể xác định giới hạn mềm cho những loại chỉ áp dụng cho việc đến lấy hàng hoặc chỉ áp dụng cho việc giao hàng trong toàn bộ mô hình.

startLoadInterval

object (Interval)

Khoảng tải trọng chấp nhận được của xe khi bắt đầu tuyến đường.

endLoadInterval

object (Interval)

Khoảng tải trọng chấp nhận được của xe ở cuối tuyến đường.

maxLoad

string (int64 format)

Mức tải tối đa có thể chấp nhận được.

costPerKilometer

object (LoadCost)

Chi phí vận chuyển một đơn vị tải trọng trên một km đối với xe này. Bạn có thể dùng giá trị này làm giá trị đại diện cho mức tiêu thụ nhiên liệu: nếu tải trọng là trọng lượng (tính bằng Newton), thì tải trọng*km sẽ có đơn vị là năng lượng.

Thử nghiệm: Hãy xem https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request để biết thêm thông tin chi tiết.

costPerTraveledHour

object (LoadCost)

Chi phí di chuyển với một đơn vị tải trọng trong một giờ cho xe này.

Thử nghiệm: Hãy xem https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request để biết thêm thông tin chi tiết.

Khoảng cách

Khoảng thời gian của số tiền nạp được chấp nhận.

Biểu diễn dưới dạng JSON
{
  "min": string,
  "max": string
}
Trường
min

string (int64 format)

Tải trọng tối thiểu được chấp nhận. Phải ≥ 0. Nếu bạn chỉ định cả hai, thì min phải ≤ max.

max

string (int64 format)

Tải trọng tối đa có thể chấp nhận được. Phải ≥ 0. Nếu không được chỉ định, tải trọng tối đa sẽ không bị hạn chế bởi thông báo này. Nếu bạn chỉ định cả hai, thì min phải ≤ max.

LoadCost

Chi phí di chuyển một đơn vị tải trong Transition. Đối với một tải nhất định, chi phí là tổng của hai phần:

  • min(load, loadThreshold) * costPerUnitBelowThreshold
  • max(0, load - loadThreshold) * costPerUnitAboveThreshold

Với chi phí này, các giải pháp ưu tiên phân phối nhu cầu cao trước hoặc nhận nhu cầu cao sau cùng. Ví dụ: nếu một chiếc xe có

load_limit {
  key: "weight"
  value {
    costPerKilometer {
      loadThreshold: 15
      costPerUnitBelowThreshold: 2.0
      costPerUnitAboveThreshold: 10.0
    }
  }
}

và tuyến đường của xe là start,pickup,pickup,delivery,delivery,end với các chuyển đổi:

transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }

thì chi phí phát sinh cho LoadCost này là (cost_below * load_below * kilometers + cost_above * load_above * kms)

  • chuyển đổi 0: 0.0
  • chuyển đổi 1: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
  • chuyển đổi 2: 2,0 * 15 * 1,0 + 10,0 * (20 – 15) * 1,0 = 80
  • chuyển đổi 3: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
  • chuyển cảnh 4: 0.0

Vì vậy, LoadCost trên tuyến đường là 120.0.

Tuy nhiên, nếu tuyến đường là start,pickup,delivery,pickup,delivery,end với các lượt chuyển đổi:

transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }

thì chi phí phát sinh từ LoadCost này là

  • chuyển đổi 0: 0.0
  • chuyển đổi 1: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
  • chuyển đổi 2: 0.0
  • chuyển đổi 3: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
  • chuyển cảnh 4: 0.0

Ở đây, LoadCost trên tuyến đường là 40.0.

LoadCost khiến các giải pháp có hiệu ứng chuyển đổi nặng trở nên tốn kém hơn.

Thử nghiệm: Hãy xem https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request để biết thêm thông tin chi tiết.

Biểu diễn dưới dạng JSON
{
  "loadThreshold": string,
  "costPerUnitBelowThreshold": number,
  "costPerUnitAboveThreshold": number
}
Trường
loadThreshold

string (int64 format)

Lượng tải mà trên mức đó, chi phí di chuyển một đơn vị tải sẽ thay đổi từ costPerUnitBelowThreshold thành costPerUnitAboveThreshold. Phải lớn hơn hoặc bằng 0.

costPerUnitBelowThreshold

number

Chi phí di chuyển một đơn vị tải, cho mỗi đơn vị từ 0 đến ngưỡng. Phải là một giá trị hữu hạn và >= 0.

costPerUnitAboveThreshold

number

Chi phí di chuyển một đơn vị tải, cho mỗi đơn vị vượt quá ngưỡng. Trong trường hợp đặc biệt khi ngưỡng = 0, đây là chi phí cố định cho mỗi đơn vị. Phải là một giá trị hữu hạn và >= 0.

DurationLimit

Giới hạn xác định thời lượng tối đa của tuyến đường của một phương tiện. Đó có thể là giới hạn cứng hoặc giới hạn mềm.

Khi xác định trường giới hạn mềm, bạn phải xác định cả ngưỡng tối đa mềm và chi phí liên quan.

Biểu diễn dưới dạng JSON
{
  "maxDuration": string,
  "softMaxDuration": string,
  "quadraticSoftMaxDuration": string,
  "costPerHourAfterSoftMax": number,
  "costPerSquareHourAfterQuadraticSoftMax": number
}
Trường
maxDuration

string (Duration format)

Giới hạn nghiêm ngặt ràng buộc thời lượng tối đa là maxDuration.

softMaxDuration

string (Duration format)

Giới hạn mềm không thực thi giới hạn thời lượng tối đa, nhưng khi bị vi phạm, tuyến đường sẽ phải chịu chi phí. Chi phí này được cộng vào các chi phí khác được xác định trong mô hình, có cùng đơn vị.

Nếu được xác định, softMaxDuration phải là số không âm. Nếu bạn cũng xác định maxDuration, thì softMaxDuration phải nhỏ hơn maxDuration.

quadraticSoftMaxDuration

string (Duration format)

Giới hạn mềm không thực thi giới hạn thời lượng tối đa, nhưng khi bị vi phạm, tuyến đường sẽ phải chịu chi phí, bậc hai trong thời lượng. Chi phí này được cộng vào các chi phí khác được xác định trong mô hình, có cùng đơn vị.

Nếu bạn đặt quadraticSoftMaxDuration, thì phải đáp ứng các điều kiện sau:

  • Giá trị này không được là số âm.
  • Bạn phải xác định maxDuration.
  • quadraticSoftMaxDuration phải nhỏ hơn maxDuration.
  • Mức chênh lệch không được quá một ngày: maxDuration - quadraticSoftMaxDuration <= 86400 seconds
costPerHourAfterSoftMax

number

Chi phí mỗi giờ phát sinh nếu vi phạm ngưỡng softMaxDuration. Chi phí bổ sung là 0 nếu thời lượng dưới ngưỡng, nếu không, chi phí sẽ phụ thuộc vào thời lượng như sau:

  costPerHourAfterSoftMax * (duration - softMaxDuration)

Chi phí không được là số âm.

costPerSquareHourAfterQuadraticSoftMax

number

Chi phí mỗi giờ bình phương phát sinh nếu vi phạm ngưỡng quadraticSoftMaxDuration.

Chi phí bổ sung là 0 nếu thời lượng dưới ngưỡng, nếu không, chi phí sẽ phụ thuộc vào thời lượng như sau:

  costPerSquareHourAfterQuadraticSoftMax *
  (duration - quadraticSoftMaxDuration)^2

Chi phí không được là số âm.

DistanceLimit

Giới hạn xác định khoảng cách tối đa có thể di chuyển. Đó có thể là giới hạn cứng hoặc giới hạn mềm.

Nếu bạn xác định giới hạn mềm, thì cả softMaxMeters và costPerKilometerAboveSoftMax đều phải được xác định và không âm.

Biểu diễn dưới dạng JSON
{
  "maxMeters": string,
  "softMaxMeters": string,
  "costPerKilometerBelowSoftMax": number,
  "costPerKilometerAboveSoftMax": number
}
Trường
maxMeters

string (int64 format)

Giới hạn nghiêm ngặt ràng buộc khoảng cách tối đa là maxMeters. Giới hạn phải là số không âm.

softMaxMeters

string (int64 format)

Giới hạn mềm không thực thi giới hạn khoảng cách tối đa, nhưng khi vi phạm sẽ dẫn đến chi phí cộng dồn vào các chi phí khác được xác định trong mô hình, có cùng đơn vị.

Nếu được xác định, softMaxMeters phải nhỏ hơn maxMeters và phải là số không âm.

costPerKilometerBelowSoftMax

number

Chi phí phát sinh trên mỗi km, tăng lên đến softMaxMeters, theo công thức:

  min(distanceMeters, softMaxMeters) / 1000.0 *
  costPerKilometerBelowSoftMax.

routeDistanceLimit không hỗ trợ chi phí này.

costPerKilometerAboveSoftMax

number

Chi phí cho mỗi km phát sinh nếu quãng đường vượt quá giới hạn softMaxMeters. Chi phí bổ sung là 0 nếu khoảng cách nằm trong giới hạn, nếu không, công thức dùng để tính chi phí là:

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

Chi phí không được là số âm.

BreakRule

Quy tắc tạo thời gian nghỉ cho một xe (ví dụ: nghỉ trưa). Thời gian nghỉ là một khoảng thời gian liên tục mà trong đó, xe vẫn ở trạng thái rảnh tại vị trí hiện tại và không thể thực hiện bất kỳ lượt ghé thăm nào. Quảng cáo trong video có thể xuất hiện:

  • trong quá trình di chuyển giữa hai lượt ghé thăm (bao gồm cả thời gian ngay trước hoặc ngay sau một lượt ghé thăm, nhưng không phải ở giữa một lượt ghé thăm), trong trường hợp đó, thời gian này sẽ kéo dài thời gian di chuyển tương ứng giữa các lượt ghé thăm,
  • hoặc trước khi xe khởi động (xe có thể không khởi động giữa giờ nghỉ), trong trường hợp này, việc này không ảnh hưởng đến thời gian khởi động xe.
  • hoặc sau khi kết thúc chuyến đi (tương tự, với thời gian kết thúc chuyến đi).
Biểu diễn dưới dạng JSON
{
  "breakRequests": [
    {
      object (BreakRequest)
    }
  ],
  "frequencyConstraints": [
    {
      object (FrequencyConstraint)
    }
  ]
}
Trường
breakRequests[]

object (BreakRequest)

Trình tự các điểm chèn quảng cáo. Xem thông báo BreakRequest.

frequencyConstraints[]

object (FrequencyConstraint)

Có thể áp dụng một số FrequencyConstraint. Tất cả các điều kiện này phải được đáp ứng bởi BreakRequest của BreakRule này. Xem FrequencyConstraint.

BreakRequest

Bạn phải biết trước trình tự nghỉ giải lao (tức là số lần và thứ tự nghỉ giải lao) áp dụng cho từng xe. BreakRequest lặp lại xác định trình tự đó, theo thứ tự mà các bước phải xảy ra. Khung thời gian của họ (earliestStartTime/latestStartTime) có thể trùng lặp, nhưng phải tương thích với đơn đặt hàng (điều này đã được kiểm tra).

Biểu diễn dưới dạng JSON
{
  "earliestStartTime": string,
  "latestStartTime": string,
  "minDuration": string
}
Trường
earliestStartTime

string (Timestamp format)

Bắt buộc. Giới hạn dưới (bao gồm) khi bắt đầu nghỉ giải lao.

Hãy dùng RFC 3339, trong đó dữ liệu đầu ra được tạo sẽ luôn được chuẩn hoá theo múi giờ và sử dụng 0, 3, 6 hoặc 9 chữ số thập phân. Các khoảng lệch khác ngoài "Z" cũng được chấp nhận. Ví dụ: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" hoặc "2014-10-02T15:01:23+05:30".

latestStartTime

string (Timestamp format)

Bắt buộc. Giới hạn trên (bao gồm cả giới hạn này) của thời điểm bắt đầu nghỉ giải lao.

Hãy dùng RFC 3339, trong đó dữ liệu đầu ra được tạo sẽ luôn được chuẩn hoá theo múi giờ và sử dụng 0, 3, 6 hoặc 9 chữ số thập phân. Các khoảng lệch khác ngoài "Z" cũng được chấp nhận. Ví dụ: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" hoặc "2014-10-02T15:01:23+05:30".

minDuration

string (Duration format)

Bắt buộc. Thời lượng tối thiểu của điểm chèn quảng cáo. Phải là số dương.

FrequencyConstraint

Bạn có thể hạn chế thêm tần suất và thời lượng của các khoảng nghỉ nêu trên bằng cách thực thi tần suất nghỉ tối thiểu, chẳng hạn như "Phải có một khoảng nghỉ ít nhất 1 giờ sau mỗi 12 giờ". Giả sử điều này có thể được hiểu là "Trong bất kỳ khoảng thời gian trượt nào là 12 giờ, phải có ít nhất một khoảng nghỉ ít nhất một giờ", thì ví dụ đó sẽ được dịch sang FrequencyConstraint sau:

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

Thời gian và thời lượng của các điểm nghỉ trong giải pháp sẽ tuân thủ tất cả các quy tắc ràng buộc đó, ngoài khoảng thời gian và thời lượng tối thiểu đã được chỉ định trong BreakRequest.

Trên thực tế, FrequencyConstraint có thể áp dụng cho các điểm chèn quảng cáo không liên tiếp. Ví dụ: lịch biểu sau đây tuân thủ ví dụ "1 giờ mỗi 12 giờ":

  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
Biểu diễn dưới dạng JSON
{
  "minBreakDuration": string,
  "maxInterBreakDuration": string
}
Trường
minBreakDuration

string (Duration format)

Bắt buộc. Thời lượng nghỉ tối thiểu cho quy tắc ràng buộc này. Không âm. Xem nội dung mô tả về FrequencyConstraint.

maxInterBreakDuration

string (Duration format)

Bắt buộc. Khoảng thời gian tối đa được phép của bất kỳ khoảng thời gian nào trong tuyến đường không bao gồm ít nhất một phần thời gian nghỉ là duration >= minBreakDuration. Phải là số dương.

Mục tiêu

Mục tiêu thay thế hoàn toàn mô hình chi phí, do đó không tương thích với chi phí đã có từ trước. Mỗi mục tiêu liên kết với một số chi phí được xác định trước, ví dụ: phương tiện, lô hàng hoặc thuộc tính chuyển đổi.

Thử nghiệm: Hãy xem https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request để biết thêm thông tin.

Biểu diễn dưới dạng JSON
{
  "type": enum (Type),
  "weight": number
}
Trường
type

enum (Type)

Loại mục tiêu.

weight

number

Mức độ quan trọng của mục tiêu này so với các mục tiêu khác. Đây có thể là bất kỳ số không âm nào, tổng trọng số không nhất thiết phải bằng 1. Trọng số mặc định là 1.0.

Loại

Loại mục tiêu sẽ được liên kết với một nhóm chi phí.

Enum
DEFAULT Một tập hợp chi phí mặc định sẽ được sử dụng để đảm bảo giải pháp hợp lý. Lưu ý: bạn có thể sử dụng riêng mục tiêu này, nhưng mục tiêu này cũng sẽ luôn được thêm với trọng số 1,0 (làm cơ sở) vào các mục tiêu do người dùng chỉ định, nếu chưa có.
MIN_DISTANCE "MIN". Giảm thiểu tổng quãng đường đã đi.
MIN_WORKING_TIME Giảm thiểu tổng thời gian làm việc, được tính tổng trên tất cả các xe.
MIN_TRAVEL_TIME Tương tự như trên nhưng chỉ tập trung vào thời gian di chuyển.
MIN_NUM_VEHICLES Giảm thiểu số lượng xe được sử dụng.

DurationDistanceMatrix

Chỉ định ma trận thời lượng và khoảng cách từ vị trí bắt đầu của lượt ghé thăm và xe đến vị trí kết thúc của lượt ghé thăm và xe.

Biểu diễn dưới dạng JSON
{
  "rows": [
    {
      object (Row)
    }
  ],
  "vehicleStartTag": string
}
Trường
rows[]

object (Row)

Chỉ định các hàng của ma trận thời lượng và khoảng cách. Phần tử này phải có số phần tử bằng với ShipmentModel.duration_distance_matrix_src_tags.

vehicleStartTag

string

Thẻ xác định những phương tiện áp dụng ma trận thời lượng và khoảng cách này. Nếu bạn để trống, quy tắc này sẽ áp dụng cho tất cả các xe và chỉ có thể có một ma trận.

Mỗi điểm xuất phát của xe phải khớp với đúng một ma trận, tức là đúng một trong các trường startTags của xe phải khớp với vehicleStartTag của một ma trận (và chỉ của ma trận đó).

Tất cả ma trận phải có vehicleStartTag khác nhau.

Hàng

Chỉ định một hàng của ma trận thời lượng và khoảng cách.

Biểu diễn dưới dạng JSON
{
  "durations": [
    string
  ],
  "meters": [
    number
  ]
}
Trường
durations[]

string (Duration format)

Giá trị thời lượng cho một hàng nhất định. Phần tử này phải có số phần tử bằng với ShipmentModel.duration_distance_matrix_dst_tags.

meters[]

number

Giá trị khoảng cách cho một hàng nhất định. Nếu không có chi phí hoặc quy tắc ràng buộc nào liên quan đến khoảng cách trong mô hình, thì bạn có thể để trống; nếu không, thì mô hình phải có nhiều phần tử như durations.

TransitionAttributes

Chỉ định các thuộc tính của quá trình chuyển đổi giữa hai lượt ghé thăm liên tiếp trên một tuyến đường. Một số TransitionAttributes có thể áp dụng cho cùng một quá trình chuyển đổi: trong trường hợp đó, tất cả chi phí bổ sung sẽ được cộng dồn và áp dụng quy tắc ràng buộc hoặc giới hạn nghiêm ngặt nhất (theo ngữ nghĩa "AND" tự nhiên).

Biểu diễn dưới dạng JSON
{
  "srcTag": string,
  "excludedSrcTag": string,
  "dstTag": string,
  "excludedDstTag": string,
  "cost": number,
  "costPerKilometer": number,
  "distanceLimit": {
    object (DistanceLimit)
  },
  "delay": string
}
Trường
srcTag

string

Thẻ xác định tập hợp các hiệu ứng chuyển đổi (src->dst) mà các thuộc tính này áp dụng.

Một lượt ghé thăm hoặc lượt khởi hành của xe khớp với nguồn nếu VisitRequest.tags hoặc Vehicle.start_tags của lượt ghé thăm/lượt khởi hành đó chứa srcTag hoặc không chứa excludedSrcTag (tuỳ thuộc vào việc trường nào trong hai trường này không trống).

excludedSrcTag

string

Vui lòng xem srcTag. Chỉ được để trống một trong hai trường srcTag và excludedSrcTag.

dstTag

string

Lượt ghé thăm điểm đến hoặc điểm kết thúc của xe khớp nếu VisitRequest.tags hoặc Vehicle.end_tags chứa dstTag hoặc không chứa excludedDstTag (tuỳ thuộc vào việc trường nào trong hai trường này không trống).

excludedDstTag

string

Vui lòng xem dstTag. Chỉ được để trống một trong hai trường dstTag và excludedDstTag.

cost

number

Chỉ định chi phí để thực hiện quá trình chuyển đổi này. Giá trị này có cùng đơn vị với tất cả các chi phí khác trong mô hình và không được là số âm. Phí này được áp dụng ngoài tất cả các chi phí hiện có khác.

costPerKilometer

number

Chỉ định chi phí cho mỗi km áp dụng cho quãng đường đã đi trong khi thực hiện quá trình chuyển đổi này. Giá trị này được cộng vào mọi Vehicle.cost_per_kilometer được chỉ định trên xe.

distanceLimit

object (DistanceLimit)

Chỉ định giới hạn về quãng đường đã đi trong khi thực hiện quá trình chuyển đổi này.

Kể từ tháng 6 năm 2021, chỉ hỗ trợ giới hạn mềm.

delay

string (Duration format)

Chỉ định độ trễ phát sinh khi thực hiện transition này.

Độ trễ này luôn xảy ra sau khi kết thúc lượt truy cập nguồn và trước khi bắt đầu lượt truy cập đích.

ShipmentTypeIncompatibility

Chỉ định các điểm không tương thích giữa các lô hàng tuỳ thuộc vào shipmentType của lô hàng. Việc xuất hiện các lô hàng không tương thích trên cùng một tuyến đường sẽ bị hạn chế dựa trên chế độ không tương thích.

Biểu diễn dưới dạng JSON
{
  "types": [
    string
  ],
  "incompatibilityMode": enum (IncompatibilityMode)
}
Trường
types[]

string

Danh sách các loại không tương thích. Hai lô hàng có shipment_types khác nhau trong số những lô hàng được liệt kê là "không tương thích".

incompatibilityMode

enum (IncompatibilityMode)

Chế độ được áp dụng cho trường hợp không tương thích.

IncompatibilityMode

Các chế độ xác định cách hạn chế sự xuất hiện của các lô hàng không tương thích trên cùng một tuyến đường.

Enum
INCOMPATIBILITY_MODE_UNSPECIFIED Chế độ không tương thích chưa xác định. Không bao giờ được sử dụng giá trị này.
NOT_PERFORMED_BY_SAME_VEHICLE Ở chế độ này, hai lô hàng có loại không tương thích không bao giờ có thể dùng chung một phương tiện.
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

Ở chế độ này, hai lô hàng có loại không tương thích không bao giờ có thể ở trên cùng một xe cùng một lúc:

  • Hai đơn hàng này chỉ có thể dùng chung một phương tiện nếu một đơn hàng được giao trước khi đơn hàng còn lại được lấy.
  • Khi cả hai lô hàng đều chỉ là lô hàng lấy (không giao hàng) hoặc chỉ là lô hàng giao (không lấy hàng), thì chúng không thể dùng chung một xe.

ShipmentTypeRequirement

Chỉ định các yêu cầu giữa các lô hàng dựa trên shipmentType của chúng. Thông tin cụ thể về yêu cầu được xác định theo chế độ yêu cầu.

Biểu diễn dưới dạng JSON
{
  "requiredShipmentTypeAlternatives": [
    string
  ],
  "dependentShipmentTypes": [
    string
  ],
  "requirementMode": enum (RequirementMode)
}
Trường
requiredShipmentTypeAlternatives[]

string

Danh sách các loại lô hàng thay thế mà dependentShipmentTypes yêu cầu.

dependentShipmentTypes[]

string

Tất cả lô hàng có loại trong trường dependentShipmentTypes đều yêu cầu ít nhất một lô hàng thuộc loại requiredShipmentTypeAlternatives phải được ghé thăm trên cùng một tuyến đường.

LƯU Ý: Không được phép có chuỗi yêu cầu mà trong đó shipmentType phụ thuộc vào chính nó.

requirementMode

enum (RequirementMode)

Chế độ được áp dụng cho yêu cầu.

RequirementMode

Các chế độ xác định hình thức của các lô hàng phụ thuộc trên một tuyến đường.

Enum
REQUIREMENT_MODE_UNSPECIFIED Chế độ yêu cầu không xác định. Không bao giờ được sử dụng giá trị này.
PERFORMED_BY_SAME_VEHICLE Ở chế độ này, tất cả lô hàng "phụ thuộc" phải dùng chung xe với ít nhất một trong các lô hàng "bắt buộc".
IN_SAME_VEHICLE_AT_PICKUP_TIME

Với chế độ IN_SAME_VEHICLE_AT_PICKUP_TIME, tất cả lô hàng "phụ thuộc" cần phải có ít nhất một lô hàng "bắt buộc" trên xe tại thời điểm lấy hàng.

Do đó, một điểm lấy hàng "phụ thuộc" phải có:

  • Một lô hàng "bắt buộc" chỉ giao hàng được giao trên tuyến đường sau đó, hoặc
  • Một lô hàng "bắt buộc" được lấy trên tuyến đường trước đó và nếu lô hàng "bắt buộc" có một lần giao hàng, thì lần giao hàng này phải được thực hiện sau khi lấy lô hàng "phụ thuộc".
IN_SAME_VEHICLE_AT_DELIVERY_TIME Tương tự như trước, ngoại trừ việc các lô hàng "phụ thuộc" cần phải có một lô hàng "bắt buộc" trên xe tại thời điểm giao hàng.

PrecedenceRule

Quy tắc ưu tiên giữa hai sự kiện (mỗi sự kiện là việc lấy hàng hoặc giao hàng của một lô hàng): sự kiện "thứ hai" phải bắt đầu ít nhất offsetDuration sau khi sự kiện "thứ nhất" bắt đầu.

Một số thứ tự ưu tiên có thể tham chiếu đến cùng một sự kiện (hoặc sự kiện có liên quan), ví dụ: "việc lấy hàng B diễn ra sau khi giao hàng A" và "việc lấy hàng C diễn ra sau khi lấy hàng B".

Hơn nữa, mức độ ưu tiên chỉ áp dụng khi cả hai lô hàng đều được thực hiện và bị bỏ qua trong các trường hợp khác.

Biểu diễn dưới dạng JSON
{
  "firstIsDelivery": boolean,
  "secondIsDelivery": boolean,
  "offsetDuration": string,
  "firstIndex": integer,
  "secondIndex": integer
}
Trường
firstIsDelivery

boolean

Cho biết liệu sự kiện "đầu tiên" có phải là sự kiện giao hàng hay không.

secondIsDelivery

boolean

Cho biết liệu sự kiện "thứ hai" có phải là sự kiện phân phối hay không.

offsetDuration

string (Duration format)

Độ lệch giữa sự kiện "đầu tiên" và sự kiện "thứ hai". Có thể là số âm.

firstIndex

integer

Chỉ mục lô hàng của sự kiện "đầu tiên". Bạn phải chỉ định trường này.

secondIndex

integer

Chỉ mục lô hàng của sự kiện "thứ hai". Bạn phải chỉ định trường này.