ShipmentModel

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

  • chi phí định tuyến cho các xe (tổng chi phí cho tổng thời gian, chi phí cho thời gian di chuyển và chi phí cố định cho tất cả các xe).
  • các khoản tiền phạt đối với lô hàng không được thực hiện.
  • chi phí cho thời gian vận chuyển trên toàn cầu
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 chuyến thăm.

objectives[]

object (Objective)

Tập hợp các mục tiêu cho mô hình này mà chúng ta sẽ chuyển đổi thành chi phí. Nếu không trống, mô hình đầu vào phải không tốn kém. Để nhận được 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: Xem https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request để biết thêm thông tin chi tiết.

globalStartTime

string (Timestamp format)

Thời gian bắt đầu và kết thúc chung của mô hình: không có thời gian nào bên ngoài phạm vi này đượ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à globalEndTimeglobalStartTime phải cách nhau trong vòng 31536000 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 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, hệ thống sẽ dùng 00:00:00 UTC, ngày 1 tháng 1 năm 1970 (tức là giây: 0, nano giây: 0) 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 giá trị này, hệ thống sẽ sử dụng 00:00:00 UTC, ngày 1 tháng 1 năm 1971 (tức là giây: 31536000, nano giây: 0) 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 kế hoạch tổng thể là khoảng thời gian chênh lệch 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 phương tiện. Người dùng có thể chỉ định chi phí mỗi giờ cho số lượng đó để cố gắng tối ưu hoá nhằm hoàn thành công việc sớm nhất, chẳng hạn như vậy. Chi phí này phải có cùng đơn vị với Shipment.penalty_cost.

durationDistanceMatrices[]

object (DurationDistanceMatrix)

Chỉ định ma trận khoảng thời gian và khoảng cách được dùng trong mô hình. Nếu trường này trống, Google Maps hoặc khoảng cách trắc địa sẽ được dùng thay thế, 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 thể 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 "slow".
  • 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.

Các thẻ tương ứng với VisitRequest.tags hoặc Vehicle.start_tags. Một VisitRequest hoặc Vehicle nhất định 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) (tương ứng. durationDistanceMatrices(i).rows(j).meters(k)) xác định thời lượng (tương ứng là khoảng cách) của chuyến đi từ lượt truy cập có thẻ durationDistanceMatrixSrcTags(j) đến lượt truy cập có thẻ durationDistanceMatrixDstTags(k) trong ma trận i.

Các thẻ tương ứng với VisitRequest.tags hoặc Vehicle.start_tags. Một VisitRequest hoặc Vehicle nhất định 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_type không tương thích (xem ShipmentTypeIncompatibility).

shipmentTypeRequirements[]

object (ShipmentTypeRequirement)

Bộ yêu cầu shipmentType (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 vấn đề có thể được tối ưu hoá. Các yêu cầu sử dụng quy tắc thứ tự ưu tiên bao gồm nhiều lô hàng có thể bị từ chối.

maxActiveVehicles

integer

Hạn chế số lượng tối đa các phương tiện đang hoạt động. 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 giao hàng. Bạn có thể dùng tham số này để giới hạn số lượng tuyến đường trong trường hợp có ít tài xế hơn số lượng xe và đội xe không đồng nhất. Sau đó, quá trình tối ưu hoá sẽ chọn nhóm nhỏ gồm những chiếc xe phù hợp nhất để sử dụng. Phải là số dương.

Lô hàng

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. Để được coi là đã thực hiện chuyến giao hàng, một chiếc xe riêng biệt phải đến một trong các địa điểm lấy hàng (và giảm công suất dự phòng tương ứng), sau đó đến một trong các địa điểm giao hàng (và do đó tăng công suất 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 lựa chọn thay thế để tự đến lấy hàng liên quan đến lô hàng. Nếu không được chỉ định, xe chỉ cần ghé thăm một vị trí tương ứng với các lượt giao hàng.

deliveries[]

object (VisitRequest)

Tập hợp các lựa chọn thay thế về việc giao hàng liên quan đến lô hàng. Nếu không được chỉ định, xe chỉ cần ghé thăm một vị trí tương ứng với các điểm đón.

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.). Các 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à cũng bao gồm cá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 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 chuyến vận chuyển này. Nếu bạn để trống, tất cả các phương tiện đều có thể thực hiện thao tác này. Phương tiện được cung cấp theo chỉ mục trong danh sách ShipmentModel của vehicles.

costsPerVehicle[]

number

Cho biết chi phí phát sinh khi mỗi chiếc xe giao lô hàng này. Nếu được chỉ định, thì giá trị này PHẢI có MỘT TRONG HAI:

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

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

costsPerVehicleIndices[]

integer

Chỉ số của những chiếc xe mà costsPerVehicle áp dụng. 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 thể 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 đó là 0.

pickupToDeliveryAbsoluteDetourLimit

string (Duration format)

Chỉ định thời gian đi đường vòng tối đa so với đường đi ngắn nhất từ điểm 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 và một lần giao hàng.

Ví dụ: giả sử t là thời gian ngắn nhất để đi từ địa điểm tự đến lấy đã chọn đến địa điểm giao hàng đã 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à tuyệt đối đều được chỉ định trên 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 nhận hàng/giao hàng có thể có. Kể từ ngày 10/2017, chúng tôi chỉ hỗ trợ đường vòng khi thời gian di chuyển không phụ thuộc vào phương tiện.

Thời lượng tính bằng giây, có tối đa 9 chữ số thập phân, kết thúc bằng "s". Ví dụ: "3.5s".

pickupToDeliveryTimeLimit

string (Duration format)

Chỉ định khoảng 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 và một lần giao hàng. Điều này không phụ thuộc vào lựa chọn thay thế nào được chọn để lấy hàng và giao hàng, cũng như tốc độ của xe. Bạn có thể chỉ định thông số này cùng với các ràng buộc tối đa về đường vòng: giải pháp sẽ tuân thủ cả hai thông số kỹ thuật.

Thời lượng tính bằng giây, có tối đa 9 chữ số thập phân, kết thúc bằng "s". Ví dụ: "3.5s".

shipmentType

string

Chuỗi không trống chỉ định một "type" 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 shipmentTypeIncompatibilitiesshipmentTypeRequirements trong ShipmentModel).

Khác với visitTypes được chỉ định cho một lần ghé thăm: Tất cả các lần nhận hàng/giao hàng thuộc cùng một lô hàng đều có cùng một 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ó thể bỏ qua một chuyến giao hàng được thực hiện trong injectedFirstSolutionRoutes hoặc injectedSolutionConstraint; trình giải quyết sẽ xoá các lượt ghé thăm liên quan để lấy/giao hàng 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 chưa hoàn tất việc vận chuyển, khoản tiền phạt này sẽ được cộng vào tổng chi phí của các tuyến đường. Một chuyến hàng được coi là hoàn tất nếu bạn truy cập vào một trong các lựa chọn thay thế về việc đến lấy hàng và giao hàng. Bạn có thể biểu thị chi phí bằng cùng đơn vị được 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 bạn không chỉ định mức phạt này, thì mức phạt sẽ được coi là vô hạn, tức là bạn phải hoàn tất việc vận chuyển.

pickupToDeliveryRelativeDetourLimit

number

Chỉ định thời gian đi đường tối đa so với đường đi ngắn nhất từ điểm 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 và một lần giao hàng.

Ví dụ: giả sử t là thời gian ngắn nhất để đi từ địa điểm tự đến lấy đã chọn đến địa điểm giao hàng đã 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à tuyệt đối đều được chỉ định trên 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 nhận hàng/giao hàng có thể có. Kể từ ngày 10/2017, chúng tôi chỉ hỗ trợ đường vòng 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 xe: yêu cầu này có vị trí địa lý (hoặc hai vị trí, xem bên dưới), thời gian mở và đóng được biểu thị bằng khoảng thời gian và thời gian thực hiện dịch vụ (thời gian xe đã đến để nhận 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 vận chuyển có ma trận khoảng cách về thời gian, 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 vận chuyển có ma trận khoảng cách về thời gian, 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. Bạn có thể bỏ qua nếu URL này giống với arrivalLocation. Nếu mô hình vận chuyển có ma trận khoảng cách về thời gian, bạn không được chỉ định departureLocation.

departureWaypoint

object (Waypoint)

Điểm tham chiếu nơi phương tiện khởi hành sau khi hoàn thành VisitRequest này. Bạn có thể bỏ qua nếu URL này giống với arrivalWaypoint. Nếu mô hình vận chuyển có ma trận khoảng cách về thời gian, 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 có chuỗi trống hoặc chuỗi trùng lặp.

timeWindows[]

object (TimeWindow)

Khung thời gian giới hạn thời gian đến của một lượt truy cập. Xin lưu ý rằng xe có thể khởi hành bên ngoài khung thời gian đến, tức là thời gian đến + thời lượng không cần nằm trong một khung thời gian. Điều này có thể dẫn đến thời gian 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 khung thời gian phải rời rạc, tức là không có khung thời gian nào được chồng chéo hoặc liền kề với khung thời gian khác và các khung thời gian phải theo thứ tự tăng dần.

Bạn chỉ có thể đặt costPerHourAfterSoftEndTimesoftEndTime nếu chỉ có một khung thời gian.

duration

string (Duration format)

Thời gian của chuyến ghé thăm, tức là thời gian mà xe đã dành ra giữa thời điểm đến và thời điểm rời đi (sẽ được thêm vào thời gian chờ có thể có; xem timeWindows).

Thời lượng tính bằng giây, có tối đa 9 chữ số thập phân, kết thúc bằng "s". Ví dụ: "3.5s".

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ể sử dụng thuộc tính này để thanh toán các khoản phí khác nhau cho từng lựa chọn thay thế để đến lấy hàng hoặc giao hàng 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 là số âm.

loadDemands

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

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

visitTypes[]

string

Chỉ định các loại lượt truy cập. Bạn có thể dùng thông tin này để phân bổ thêm thời gian cần thiết cho xe hoàn tất chuyến 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 trong các tuyến đường lái xe tại vị trí này hay không. Tính năng tránh quay đầu xe sẽ cố gắng hết sức để hoạt động và không đảm bảo tránh hoàn toàn. Đây là một tính năng thử nghiệm và hành vi của tính năng này có thể thay đổi.

Thử nghiệm: 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 cặp vĩ độ/kinh độ. Thông tin này được biểu thị dưới dạng một cặp số có độ chính xác gấp đôi để biểu thị vĩ độ và kinh độ theo độ. 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 được 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 VisitRequest, cũng như vị trí bắt đầu và kết thúc của Vehicle.

Biểu diễn dưới dạng JSON
{
  "sideOfRoad": boolean,
  "vehicleStopover": 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.
}
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 có nghĩa là xe nên 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í đó hướng đến từ giữa đường. Lựa chọn này không hoạt động đối với chế độ di chuyển "ĐI BỘ".

vehicleStopover

boolean

Cho biết rằng điểm tham chiếu là nơi mà các phương tiện dừng lại, với mục đích đón hoặc trả khách. Lựa chọn này chỉ hoạt động cho chế độ 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.

Trường nhóm location_type. Các cách thể hiện vị trí. location_type chỉ có thể là một trong những trạng thái sau:
location

object (Location)

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

placeId

string

Mã địa điểm của địa điểm yêu thích được 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 chỉ đường đến địa điểm đó. Ví dụ: mã địa điểm đại diện cho một toà nhà là phù hợp, nhưng mã địa điểm đại diện cho một con đường thì không nên dùng.

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 đánh dấu.

heading

integer

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

TimeWindow

Khung thời gian giới hạn 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 chiếc xe.

Các ranh giới của khung thời gian cố định, startTimeendTime, 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. Hạn dưới của khoảng thời gian linh hoạt, softStartTime, thể hiện sự ưu tiên cho sự kiện xảy ra tại hoặc sau softStartTime bằng cách chịu chi phí tương ứng với khoảng thời gian trước softStartTime mà sự kiện xảy ra. Giới hạn trên của khoảng thời gian linh hoạt, softEndTime, thể hiện một lựa chọn ưu tiên cho sự kiện xảy ra tại hoặc trước softEndTime bằng cách chịu một chi phí tỷ lệ thuận với khoảng thời gian sau softEndTime mà sự kiện xảy ra. startTime, endTime, softStartTimesoftEndTime phải nằm trong giới hạn thời gian toàn cầu (xem ShipmentModel.global_start_timeShipmentModel.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 khung thời gian cố định. Nếu bạn không 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 bạn không 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 khung 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 tương đối của khung 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 một chiếc xe trong vấn đề về lô hàng. 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 chiếc xe này. Tuyến đường là một chuỗi các lượt ghé thăm (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)

Chế độ 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 một chiếc xe nhất định.

startLocation

object (LatLng)

Vị trí địa lý nơi xe bắt đầu hành trình trước khi nhận bất kỳ lô hàng nào. Nếu bạn không chỉ định, xe sẽ bắt đầu tại điểm đón đầu tiên. Nếu mô hình vận chuyển có ma trận khoảng cách và thời gian, 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 nhận bất kỳ lô hàng nào. Nếu bạn không chỉ định startWaypoint hoặc startLocation, thì xe sẽ bắt đầu từ điểm đón đầu tiên. Nếu mô hình vận chuyển có ma trận khoảng cách và thời gian, 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 bạn không 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 vận chuyển có ma trận khoảng cách và thời gian, 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 hoặc endLocation, thì ShipmentRoute của xe sẽ kết thúc ngay khi xe hoàn thành VisitRequest cuối cùng. Nếu mô hình vận chuyển có ma trận khoảng cách và thời gian, thì bạn không được chỉ định endWaypoint.

startTags[]

string

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

Không được phép có 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 có chuỗi trống hoặc chuỗi trùng lặp.

startTimeWindows[]

object (TimeWindow)

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

Các khung thời gian thuộc cùng một trường lặp lại phải rời rạc, tức là không có khung thời gian nào được trùng lặp hoặc nằm cạnh một khung thời gian khác và các khung thời gian phải theo thứ tự thời gian.

Bạn chỉ có thể đặt costPerHourAfterSoftEndTimesoftEndTime nếu chỉ có một khung 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 toàn cầu (xem các trường ShipmentModel.global_*). Nếu không được chỉ định, sẽ không có giới hạn nào ngoài những giới hạn thời gian chung đó.

Các khung thời gian thuộc cùng một trường lặp lại phải rời rạc, tức là không có khung thời gian nào được trùng lặp hoặc nằm cạnh một khung thời gian khác và các khung thời gian phải theo thứ tự thời gian.

Bạn chỉ có thể đặt costPerHourAfterSoftEndTimesoftEndTime nếu chỉ có một khung 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 cho phương tiện. Chi phí này được áp dụng cho tổng thời gian của tuyến đường, bao gồm 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ể dẫn đến độ trễ bổ sung.

costPerTraveledHour

number

Chi phí cho mỗi giờ di chuyển của tuyến đường dành cho 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 ki-lô-mét của tuyến đường dành cho xe. 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 ngầm định đi từ arrivalLocation đến departureLocation của một VisitRequest duy nhất.

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 những xe không vận chuyển hàng hoá trên tuyến đường của mình. Thuộc tính này cho biết liệu xe có được coi là xe đã qua sử dụng hay không trong trường hợp này.

Nếu đúng, xe sẽ đi từ vị trí bắt đầu đế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à khoảng cách phát sinh từ hành trình bắt đầu --> kết thúc sẽ được tính đến.

Nếu không, xe sẽ không di chuyển từ vị trí bắt đầu đến vị trí kết thúc và không có breakRule hoặc thời gian 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 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 mà xe đi. Trong một OptimizeToursResponse nhất định, thời lượng của tuyến đường của một xe là khoảng thời gian chênh lệch giữa vehicleEndTimevehicleStartTime.

travelDurationLimit

object (DurationLimit)

Giới hạn được áp dụng cho thời gian di chuyển của tuyến đường mà xe đi. Trong một OptimizeToursResponse nhất định, thời gian di chuyển theo 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 của 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 một bản đồ từ các chuỗi visitTypes đến thời lượng. Thời lượng là thời gian ngoài VisitRequest.duration được tính cho 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. Không được để trống các khoá (tức là visitTypes).

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

breakRule

object (BreakRule)

Mô tả lịch nghỉ giải lao bắt buộc đối với xe này. Nếu bạn không nhập thông tin, thì sẽ không có thời gian nghỉ nào được lên lịch cho xe này.

label

string

Chỉ định một 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 là true, thì usedIfRouteIsEmpty phải là false và chiếc 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 phương tiện 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 nhận/giao hàng liên quan đều bị hạn chế ở 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 phương tiện được phép đều bị bỏ qua, thì lô hàng đó sẽ bị bỏ qua trong phản hồi.

travelDurationMultiple

number

Chỉ định 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.0, tức là chiếc xe này chạy chậm hơn và thời gian di chuyển gấp đôi so với xe tiêu chuẩn. Hệ số này không ảnh hưởng đến thời lượng của lượt truy cập. Đ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 phạm vi [0,001, 1000,0]. 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.0.

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 hệ số này được áp dụng nhưng trước khi thực hiện bất kỳ thao tác số học nào. Do đó, hệ số nhỏ có thể dẫn đến việc mất độ chính xác.

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

TravelMode

Các chế độ di chuyển mà xe có thể sử dụng.

Đây phải là một nhóm nhỏ các chế độ di chuyển của Routes API của Nền tảng Google Maps, hãy xem: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode

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

Enum
TRAVEL_MODE_UNSPECIFIED Chế độ di chuyển không được chỉ định, tương đương với DRIVING.
DRIVING Chế độ di chuyển tương ứng với chỉ đường lái xe (ô tô, ...).
WALKING Chế độ di chuyển tương ứng với chỉ đường đi bộ.

RouteModifiers

Đóng gói một nhóm các điều kiện không bắt buộc cần đáp ứng khi tính toán tuyến đường cho xe. Tham số này tương tự như RouteModifiers trong API Tuyến đường ưu tiên của Nền tảng Google Maps; 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 có nên tránh đường thu phí nếu có thể hay không. Chúng tôi sẽ ưu tiên những tuyến đường không có đường thu phí. Chỉ áp dụng cho các chế độ di chuyển bằng động cơ.

avoidHighways

boolean

Chỉ định xem có nên tránh đường cao tốc hay không (nếu có thể). Các tuyến đường không có đường cao tốc sẽ được ưu tiên. Chỉ áp dụng cho các chế độ di chuyển bằng động cơ.

avoidFerries

boolean

Chỉ định xem có tránh phà khi hợp lý hay không. Các tuyến đường không có phà sẽ được ưu tiên. Chỉ áp dụng cho các chế độ di chuyển bằng động cơ.

avoidIndoor

boolean

Không bắt buộc. Chỉ định có nên tránh điều hướng trong nhà khi hợp lý hay không. Các tuyến đường không có chỉ dẫn điều hướng trong nhà sẽ được ưu tiên. Chỉ áp dụng cho chế độ di chuyển WALKING.

UnloadingPolicy

Chính sách về cách dỡ xe. Chỉ áp dụng cho những lô hàng có cả dịch vụ đến lấy hàng và giao hàng.

Các chuyến vận chuyển khác có thể diễn ra ở 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 được chỉ định; các lượt giao hàng chỉ được phép diễn ra sau lượt 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 đến lấy hàng
FIRST_IN_FIRST_OUT Việc giao hàng phải diễn ra theo thứ tự giống như việc đến lấy hàng

LoadLimit

Xác định giới hạn tải trọng áp dụng cho một chiếc xe, ví dụ: "xe tải này chỉ được phép 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. Vui lòng xem costPerUnitAboveSoftMax.

costPerUnitAboveSoftMax

number

Nếu tải trọng vượt quá softMaxLoad trên 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ả các chi phí đều được cộng lại 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 các loại chỉ áp dụng cho việc đến lấy hoặc chỉ áp dụng cho việc giao hàng trong toàn bộ mô hình.

startLoadInterval

object (Interval)

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

endLoadInterval

object (Interval)

Khoảng thời gian chấp nhận được để tải hàng lên xe ở cuối tuyến đường.

maxLoad

string (int64 format)

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

costPerKilometer

object (LoadCost)

Chi phí di chuyển một đơn vị tải trọng trên quãng đường một ki-lô-mét cho xe này. Bạn có thể dùng thông tin này làm thông tin thay thế cho mức tiêu thụ nhiên liệu: nếu tải là trọng lượng (tính bằng Newton), thì tải*km sẽ có kích thước của năng lượng.

Thử nghiệm: 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 trong một giờ cho xe này.

Thử nghiệm: 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 thời gian

Khoảng thời gian có thể chấp nhận được đối với số lượng tải.

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

string (int64 format)

Mức tải tối thiểu có thể chấp nhận được. Phải lớn hơn hoặc bằng 0. Nếu cả hai đều được chỉ định, thì min phải ≤ max.

max

string (int64 format)

Mức tải tối đa chấp nhận được. Phải lớn hơn hoặc bằng 0. Nếu không được chỉ định, thông báo này sẽ không giới hạn tải trọng tối đa. Nếu cả hai đều được chỉ định, 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 đáp ứng nhu cầu cao trước hoặc tương đương với việc đáp ứng 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 nó là start,pickup,pickup,delivery,delivery,end với các hiệu ứng 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í mà LoadCost này phải chịu là (cost_below * load_below * kilometers + cost_above * load_above * kms)

  • chuyển cảnh 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.0
  • chuyển đổi 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • chuyển cảnh 4: 0.0

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

Tuy nhiên, nếu tuyến đường là start,pickup,delivery,pickup,delivery,end có hiệu ứng chuyển cảnh:

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í mà LoadCost này phải chịu là

  • chuyển cảnh 0: 0,0
  • chuyển đổi 1: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • chuyển cảnh 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 cảnh tải nhiều dữ liệu trở nên tốn kém hơn.

Thử nghiệm: 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à khi vượt quá, 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à lớn hơn hoặc bằng 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, 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à lớn hơn hoặc bằng 0.

DurationLimit

Một giới hạn xác định thời lượng tối đa của tuyến đường của một chiếc xe. Có thể là cứng hoặc mềm.

Khi bạn xác định một 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 cùng nhau.

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)

Một giới hạn cứng ràng buộc thời lượng tối đa là maxDuration.

Thời lượng tính bằng giây, có tối đa 9 chữ số thập phân, kết thúc bằng "s". Ví dụ: "3.5s".

softMaxDuration

string (Duration format)

Giới hạn mềm không áp dụng giới hạn thời lượng tối đa, nhưng khi bị vi phạm, tuyến đường sẽ phát sinh chi phí. Chi phí này cộng với 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.

Thời lượng tính bằng giây, có tối đa 9 chữ số thập phân, kết thúc bằng "s". Ví dụ: "3.5s".

quadraticSoftMaxDuration

string (Duration format)

Giới hạn mềm không áp dụng 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ình phương theo thời lượng. Chi phí này cộng với 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, quadraticSoftMaxDuration phải là số không âm. Nếu bạn cũng xác định maxDuration, thì quadraticSoftMaxDuration phải nhỏ hơn maxDuration và sự khác biệt không được lớn hơn một ngày:

maxDuration - quadraticSoftMaxDuration <= 86400 seconds

Thời lượng tính bằng giây, có tối đa 9 chữ số thập phân, kết thúc bằng "s". Ví dụ: "3.5s".

costPerHourAfterSoftMax

number

Chi phí mỗi giờ phát sinh nếu bạn vi phạm ngưỡng softMaxDuration. Chi phí phát sinh thêm 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í cho mỗi giờ vuông phát sinh nếu bạn vi phạm ngưỡng quadraticSoftMaxDuration.

Chi phí phát sinh thêm 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

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

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

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

string (int64 format)

Một giới hạn cứng ràng buộc khoảng cách tối đa là maxMeters. Giới hạn không được là số âm.

softMaxMeters

string (int64 format)

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

Nếu được xác định, softMaxMeters phải nhỏ hơn maxMeters và phải có giá trị 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í trên mỗi km phát sinh nếu khoảng cách vượt quá giới hạn softMaxMeters. Chi phí bổ sung là 0 nếu khoảng cách dưới hạn mức, 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

Các quy tắc để tạo khoảng thời gian nghỉ cho xe (ví dụ: giờ nghỉ trưa). Thời gian nghỉ là một khoảng thời gian liên tục mà xe vẫn ở trạng thái không hoạt động 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 chèn có thể xuất hiện:

  • trong thời gian di chuyển giữa hai lượt truy cập (bao gồm cả thời gian ngay trước hoặc ngay sau một lượt truy cập, nhưng không phải ở giữa một lượt truy cập), 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 truy cập,
  • hoặc trước khi xe khởi động (xe có thể không khởi động trong lúc nghỉ), trong trường hợp này, thời gian nghỉ 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ự, có 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 đoạn nghỉ. 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 trước ngày BreakRequest của BreakRule. Hãy xem FrequencyConstraint.

BreakRequest

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

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 cả giới hạn này) khi bắt đầu khoảng thời gian nghỉ.

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ủa thời điểm bắt đầu khoảng thời gian ngắt.

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 khoảng thời gian nghỉ. Phải là số dương.

Thời lượng tính bằng giây, có tối đa 9 chữ số thập phân, kết thúc bằng "s". Ví dụ: "3.5s".

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ỉ được chỉ định ở 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ó khoảng nghỉ ít nhất 1 giờ sau mỗi 12 giờ". Giả sử rằng điều này có thể được diễn giải là "Trong bất kỳ khoảng thời gian 12 giờ nào, phải có ít nhất một khoảng nghỉ dài ít nhất một giờ", ví dụ đó sẽ được chuyển thành FrequencyConstraint sau đây:

{
   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 khoảng nghỉ trong giải pháp sẽ tuân thủ tất cả các ràng buộc đó, ngoài các 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 khoảng thời gian không liên tục. Ví dụ: lịch biểu sau đây tuân theo 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.

Thời lượng tính bằng giây, có tối đa 9 chữ số thập phân, kết thúc bằng "s". Ví dụ: "3.5s".

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ỉ ngơi là duration >= minBreakDuration. Phải là số dương.

Thời lượng tính bằng giây, có tối đa 9 chữ số thập phân, kết thúc bằng "s". Ví dụ: "3.5s".

Mục tiêu

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

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

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, trọng số không nhất thiết phải có tổng 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 bộ chi phí mặc định sẽ được sử dụng để đảm bảo có một giải pháp hợp lý. Lưu ý: mục tiêu này có thể được sử dụng riêng, nhưng cũng sẽ luôn được thêm với trọng số 1.0, làm đường cơ sở, vào các mục tiêu do người dùng chỉ định, nếu mục tiêu này chưa có.
MIN_DISTANCE Mục tiêu "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 khoảng cách và thời lượng từ vị trí bắt đầu của lượt ghé thăm và phương tiện đến vị trí kết thúc của lượt ghé thăm và phương tiện.

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 khoảng thời gian và khoảng cách. Phần tử này phải có số lượng phần tử bằng với ShipmentModel.duration_distance_matrix_src_tags.

vehicleStartTag

string

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

Mỗi điểm bắt đầu của xe phải khớp chính xác với một ma trận, tức là đúng một trường startTags của điểm bắt đầu đó phải khớp với vehicleStartTag của một ma trận (và chỉ ma trận đó).

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

Hàng

Chỉ định một hàng của ma trận khoảng thời gian 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ố lượng phần tử bằng với ShipmentModel.duration_distance_matrix_dst_tags.

Thời lượng tính bằng giây, có tối đa 9 chữ số thập phân, kết thúc bằng "s". Ví dụ: "3.5s".

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 ràng buộc nào đề cập đến khoảng cách trong mô hình, thì bạn có thể để trống trường này; nếu không, trường này phải có số lượng phần tử bằng với durations.

TransitionAttributes

Chỉ định các thuộc tính của quá trình chuyển đổi giữa hai lượt truy cập liên tiếp trên một tuyến đường. Có thể áp dụng một số TransitionAttributes cho cùng một lượt chuyển đổi: trong trường hợp đó, tất cả các chi phí bổ sung sẽ cộng lại và quy tắc hạn chế hoặc giới hạn nghiêm ngặt nhất sẽ được áp dụng (theo ngữ nghĩa "VÀ" 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

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

Một lượt truy cập vào nguồn hoặc lượt khởi động xe sẽ khớp nếu VisitRequest.tags hoặc Vehicle.start_tags của lượt truy cập đó chứa srcTag hoặc không chứa excludedSrcTag (tuỳ thuộc vào trường nào trong hai trường này không trống).

excludedSrcTag

string

Vui lòng xem srcTag. Phải có đúng một trong srcTagexcludedSrcTag.

dstTag

string

Một lượt ghé thăm điểm đến hoặc điểm cuối của xe sẽ 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 trường nào trong hai trường này không trống).

excludedDstTag

string

Vui lòng xem dstTag. Phải có đúng một trong dstTagexcludedDstTag.

cost

number

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

costPerKilometer

number

Xác định chi phí trên mỗi ki-lô-mét áp dụng cho quãng đường đã đi trong khi thực hiện quá trình chuyển đổi này. Khoản phí này được cộng thêm vào bất kỳ Vehicle.cost_per_kilometer nào đượ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 hiệu ứng chuyển đổi này.

Kể từ ngày 6/2021, chỉ giới hạn mềm được hỗ trợ.

delay

string (Duration format)

Chỉ định độ trễ phát sinh khi thực hiện hiệu ứng chuyển đổi này.

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

Thời lượng tính bằng giây, có tối đa 9 chữ số thập phân, kết thúc bằng "s". Ví dụ: "3.5s".

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 chúng. 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 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 sự 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 được chỉ định. Bạn không bao giờ nên 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 chiếc xe.
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 phép ở trên cùng một xe cùng một lúc:

  • Họ chỉ có thể dùng chung một chiếc xe nếu một người đã nhận xe trước khi người kia đến lấy.
  • Khi cả hai lô hàng đều chỉ có thể đến lấy (không giao hàng) hoặc chỉ giao hàng (không đến lấy), thì chúng hoàn toàn không thể dùng chung một chiếc xe.

ShipmentTypeRequirement

Nêu rõ các yêu cầu giữa các lô hàng dựa trên shipmentType. Các 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 hình vận chuyển thay thế mà dependentShipmentTypes yêu cầu.

dependentShipmentTypes[]

string

Tất cả cá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 được ghé thăm trên cùng một tuyến đường.

LƯU Ý: Không được phép có các chuỗi yêu cầu mà 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 chưa chỉ định. Bạn không bao giờ nên sử dụng giá trị này.
PERFORMED_BY_SAME_VEHICLE Ở chế độ này, tất cả các lô hàng "phụ thuộc" phải dùng chung một chiếc xe với ít nhất một trong các lô hàng "bắt buộc".
IN_SAME_VEHICLE_AT_PICKUP_TIME

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

Do đó, một yêu cầu lấy hàng "phụ thuộc" phải có một trong hai thông tin sau:

  • Một chuyến hàng "bắt buộc" chỉ giao hàng được giao trên tuyến đường sau khi, 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ượt giao hàng, thì lượt giao hàng này phải được thực hiện sau khi lô hàng "phụ thuộc" được lấy.
IN_SAME_VEHICLE_AT_DELIVERY_TIME Tương tự như trước đây, 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 về thứ tự ưu tiên giữa 2 sự kiện (mỗi sự kiện là việc lấy hàng hoặc giao 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ể đề cập đến cùng một (hoặc các) sự kiện liên quan, ví dụ: "B đến lấy hàng sau khi giao A" và "C đến lấy hàng sau khi B đến lấy hàng".

Ngoài ra, thứ tự ưu tiên chỉ áp dụng khi cả hai lô hàng đều được thực hiện, nếu không thì sẽ bị bỏ qua.

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à một lượt phân phối hay không.

secondIsDelivery

boolean

Cho biết liệu sự kiện "thứ hai" có phải là một lượt 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". Điều này có thể gây ảnh hưởng tiêu cực.

Thời lượng tính bằng giây, có tối đa 9 chữ số thập phân, kết thúc bằng "s". Ví dụ: "3.5s".

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.