ShipmentModel

Mô hình vận chuyển bao gồm một nhóm phương tiện vận chuyển mà trong đó một nhóm phương tiện vận chuyển phải được thực hiện, đồng thời giảm thiểu tổng chi phí, tổng cộng của:

  • chi phí định tuyến xe (tổng chi phí trên tổng thời gian, chi phí cho mỗi thời gian di chuyển và chi phí cố định cho tất cả phương tiện).
  • các hình phạt khi vận chuyển không thực hiện được.
  • chi phí trong toàn bộ thời gian của lô hàng
Biểu diễn dưới dạng JSON
{
  "shipments": [
    {
      object (Shipment)
    }
  ],
  "vehicles": [
    {
      object (Vehicle)
    }
  ],
  "globalStartTime": string,
  "globalEndTime": string,
  "globalDurationCostPerHour": number,
  "durationDistanceMatrices": [
    {
      object (DurationDistanceMatrix)
    }
  ],
  "durationDistanceMatrixSrcTags": [
    string
  ],
  "durationDistanceMatrixDstTags": [
    string
  ],
  "transitionAttributes": [
    {
      object (TransitionAttributes)
    }
  ],
  "shipmentTypeIncompatibilities": [
    {
      object (ShipmentTypeIncompatibility)
    }
  ],
  "shipmentTypeRequirements": [
    {
      object (ShipmentTypeRequirement)
    }
  ],
  "precedenceRules": [
    {
      object (PrecedenceRule)
    }
  ],
  "maxActiveVehicles": integer
}
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 các lượt ghé thăm.

globalStartTime

string (Timestamp format)

Thời gian bắt đầu và kết thúc trên toàn cầu của mô hình: không có thời gian nào nằm ngoài phạm vi này có thể đượ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 để nâng cao 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 chính sách này, thì 00:00:00 giờ UTC, ngày 1 tháng 1 năm 1970 (tức là giây: 0, nano: 0) sẽ được sử dụng theo mặc định.

Dấu thời gian theo múi giờ "Zulu" RFC3339 (giờ UTC) với độ phân giải nano giây và lên đến 9 chữ số phân số. Ví dụ: "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z".

globalEndTime

string (Timestamp format)

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

Dấu thời gian theo múi giờ "Zulu" RFC3339 (giờ UTC) với độ phân giải nano giây và lên đến 9 chữ số phân số. Ví dụ: "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z".

globalDurationCostPerHour

number

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

durationDistanceMatrices[]

object (DurationDistanceMatrix)

Chỉ định thời lượng và ma trận 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 sử dụng, tuỳ thuộc vào giá trị của trường useGeodesicDistances. Nếu giá trị này không trống, thì useGeodesicDistances không được có giá trị true và cả durationDistanceMatrixSrcTags hoặc durationDistanceMatrixDstTags đều không được để trống.

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

  • Có hai vị trí: locA và locB.
  • 1 chiếc xe bắt đầu tuyến đường tại vị trí locA và kết thúc tại vị trí 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 chiếc xe bắt đầu tuyến đường tại locA và kết thúc tại locB, sử dụng ma trận "nhanh".
  • 1 chiếc 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 chiếc xe bắt đầu tuyến đường tại locB và kết thúc tại locB, sử dụng ma trận "nhanh".
  • 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

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ừ lượt truy cập có thẻ durationDistanceMatrixSrcTags(j) đến lượt truy cập 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) (phản hồi durationDistanceMatrices(i).rows(j).meters(k)) xác định thời lượng (tương ứng khoảng cách) của hành trình 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)

Tập hợp các loại_Lô_hàng không tương thích (xem ShipmentTypeIncompatibility).

shipmentTypeRequirements[]

object (ShipmentTypeRequirement)

Bộ yêu cầu shipmentType (xem ShipmentTypeRequirement).

precedenceRules[]

object (PrecedenceRule)

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

maxActiveVehicles

integer

Giới hạn số lượng xe đang hoạt động tối đa. Một chiếc xe đ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 tính năng 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ố phương tiện và nhóm phương tiện không đồng nhất. Sau đó, quá trình tối ưu hoá sẽ chọn một nhóm nhỏ xe phù hợp nhất để sử dụng. Phải hoàn toàn có giá trị dương.

Lô hàng

Quá trình vận chuyển một mặt hàng, từ một trong những lần đến lấy hàng cho đến một trong những lần giao hàng. Để việc vận chuyển được coi là đã thực hiện, một phương tiện riêng biệt phải đến một trong các địa điểm nhận hàng của mình (và giảm tải trọng dự phòng tương ứng), sau đó ghé thăm một trong các địa điểm giao hàng sau đó (và do đó tăng lại sức chứa dự phòng cho phù hợp).

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. Mã này có thể dài tối đa 63 ký tự và có thể sử dụng ký tự UTF-8.

pickups[]

object (VisitRequest)

Tập hợp các lựa chọn đế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 gói hàng.

deliveries[]

object (VisitRequest)

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

loadDemands

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

Nhu cầu về tải trọng 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à các giá trị nhận dạng mô tả loại tải tương ứng, tốt nhất là nên bao gồm cả các đơn vị. Ví dụ: "weight_kg", "volume_gallons", "pallet_count", v.v. Nếu khoá đã cho không xuất hiện trên bản đồ, thì tải tương ứng được coi là rỗng.

Một đối tượng chứa danh sách các cặp "key": value. Ví dụ: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

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 trống, tất cả xe đều có thể hoạt động. Xe được nêu theo chỉ số trong danh sách vehicles của ShipmentModel.

costsPerVehicle[]

number

Cho biết chi phí phát sinh khi mỗi chiếc xe vận chuyển lô hàng này. Nếu được chỉ định, hình ảnh phải có CÁC LOẠI:

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

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

costsPerVehicleIndices[]

integer

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

pickupToDeliveryAbsoluteDetourLimit

string (Duration format)

Chỉ định thời gian đường vòng tuyệt đối tối đa so với đoạn đường ngắn nhất từ lúc đến lấy hàng đến khi giao hàng. Nếu được chỉ định thì giá trị này phải là số không âm và kiện hàng phải có dịch vụ đến lấy hàng và giao hàng.

Ví dụ: Đặt t là thời gian ngắn nhất để đi trực tiếp từ lựa chọn đến lấy hàng thay thế đã chọn đến lựa chọn phân phối thay thế đã chọn. Sau đó, việc đặt pickupToDeliveryAbsoluteDetourLimit sẽ thực thi:

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

Nếu bạn chỉ định cả giới hạn tương đối và giới hạn tuyệt đối cho cùng một lô hàng, thì giới hạn ràng buộc nhiều hơn sẽ được áp dụng cho mỗi cặp đến lấy hàng/giao hàng. Kể từ năm 2017/10, đườ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.

Thời lượng tính bằng giây với tối đa 9 chữ số phân số, 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 đến khi khách hàng đến lấy hàng để được giao hàng. Nếu được chỉ định thì giá trị này phải là số không âm và kiện hàng phải có dịch vụ đến lấy hàng và giao hàng. Việc này không phụ thuộc vào việc lựa chọn phương án thay thế nào để đến lấy hàng và giao hàng, cũng như tốc độ của xe. Điều này có thể được chỉ định cùng với các hạn chế về đường vòng tối đa: 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 với tối đa 9 chữ số phân số, kết thúc bằng "s". Ví dụ: "3.5s".

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 sự không tương thích hoặc yêu cầu giữa shipment_types (xem shipmentTypeIncompatibilitiesshipmentTypeRequirements trong ShipmentModel).

Khác biệt với visitTypes được chỉ định cho một lượt truy cập: Tất cả các sản phẩm đến lấy hàng/giao trong cùng một lô hàng đều có cùng shipmentType.

label

string

Chỉ định một 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 toán sẽ xoá những lượt ghé thăm đến lấy hàng/giao hàng có liên quan khỏi tuyến đường đang 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 việc vận chuyển không 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 khách hàng sử dụng một trong các cách khác để đến lấy hàng và giao hàng. Chi phí có thể được biểu thị 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 bạn không chỉ định hình phạt này, hình phạt này sẽ được coi là vô hạn, tức là bạn phải hoàn thành việc vận chuyển.

pickupToDeliveryRelativeDetourLimit

number

Chỉ định thời gian đường vòng tương đối tối đa so với đoạn đường ngắn nhất từ lúc đến lấy hàng đến lúc giao hàng. Nếu được chỉ định thì giá trị này phải là số không âm và kiện hàng phải có dịch vụ đến lấy hàng và giao hàng.

Ví dụ: Đặt t là thời gian ngắn nhất để đi trực tiếp từ lựa chọn đến lấy hàng thay thế đã chọn đến lựa chọn phân phối thay thế đã chọn. Sau đó, việc đặt pickupToDeliveryRelativeDetourLimit sẽ thực thi:

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

Nếu bạn chỉ định cả giới hạn tương đối và giới hạn tuyệt đối cho cùng một lô hàng, thì giới hạn ràng buộc nhiều hơn sẽ được áp dụng cho mỗi cặp đến lấy hàng/giao hàng. Kể từ năm 2017/10, đườ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 ghé thăm mà một chiếc xe có thể thực hiện: có một vị trí địa lý (hoặc hai, xem bên dưới), thời gian mở cửa và đóng cửa được thể hiện theo khoảng thời gian và thời gian phục vụ (thời gian mà xe đã sử dụng khi đến lấy hàng hoặc trả 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
}
Trường
arrivalLocation

object (LatLng)

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

arrivalWaypoint

object (Waypoint)

Điểm tham chiếu 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 về khoảng cách thời gian, thì 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 vận chuyển có ma trận về khoảng cách thời gian, thì 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 vận chuyển có ma trận về khoảng cách thời gian, thì bạn không được chỉ định departureWaypoint.

tags[]

string

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

timeWindows[]

object (TimeWindow)

Cửa sổ thời gian ràng buộc thời gian đến tại một lượt truy cập. Xin lưu ý rằng xe có thể khởi hành ngoài khung thời gian đến, tức là thời gian đến và thời gian đến không nhất thiết phải nằm trong khung thời gian. Việc 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, xe có thể thực hiện lượt ghé thăm này bất cứ lúc nào.

Các khoảng thời gian phải rời rạc, tức là không có khoảng thời gian nào phải chồng chéo hoặc liền kề một khoảng thời gian khác và phải theo thứ tự tăng dần.

Bạn chỉ có thể thiết lập costPerHourAfterSoftEndTimesoftEndTime nếu có một khoảng thời gian duy nhất.

duration

string (Duration format)

Thời lượng ghé thăm, tức là thời gian mà xe dành cho từ thời điểm đến đến lúc khởi hành (được thêm vào thời gian chờ có thể có; xem timeWindows).

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

cost

number

Chi phí phục vụ cho yêu cầu ghé thăm này trên một tuyến đường của phương tiện. Cách tính này có thể dùng để thanh toán các chi phí khác nhau cho mỗi lần đến lấy hàng hoặc giao hàng thay thế. 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 nhu 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ì cho toàn bộ Shipment. Các nhu cầu nêu ở đây được thêm vào các yêu cầu được liệt kê trong Shipment.load_demands.

Một đối tượng chứa danh sách các cặp "key": value. Ví dụ: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

visitTypes[]

string

Chỉ định loại lượt truy cập. Thông tin này có thể dùng để phân bổ thêm thời gian cần thiết để một chiếc 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 một nhãn cho VisitRequest này. Nhãn này được báo cáo trong phản hồi là visitLabel trong ShipmentRoute.Visit tương ứng.

LatLng

Đối tượng đại diện cho cặp vĩ độ/kinh độ. Giá trị này được biểu thị bằng cặp số đại diện cho 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 Xe.

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

  // Union field location_type can be only one of the following:
  "location": {
    object (Location)
  },
  "placeId": string
  // End of list of possible types for union field location_type.
}
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 dành cho xe cộ ưu tiê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í này để xe có thể dừng ở bên đường mà vị trí lệch về phía giữa đường. Tuỳ chọn này không hoạt động cho tính năng "WALKING" phương tiện đi lại.

Trường kết hợp location_type. Các cách khác nhau để thể hiện một vị trí. location_type chỉ có thể là một trong những trạng thái sau đây:
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 POI được liên kết với điểm tham chiếu.

Vị trí

Đóng gói vị trí (điểm địa lý và tiêu đề tùy chọn).

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 kết với hướng cho phép lưu thông. Giá trị này dùng để chỉ định lề đường dùng để đón và trả xe. Giá trị tiêu đề có thể từ 0 đến 360, trong đó 0 chỉ định một tiêu đề đến hạn là Bắc, 90 chỉ định một tiêu đề đến hạn Đô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 nơi tại một lượt ghé thăm, thời gian bắt đầu và kết thúc của một chiếc xe.

Giới hạn khoảng 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, chẳng hạn như startTime <= event_time <= endTime. Giới hạn dưới của khoảng thời gian mềm softStartTime, thể hiện sự ưu tiên xảy ra sự kiện vào lúc hoặc sau softStartTime bằng cách phát sinh chi phí tỷ lệ với khoảng thời gian trước khi sự kiện khởi động mềm. Giới hạn trên của khoảng thời gian mềm softEndTime cho biết sự kiện cần xảy ra vào lúc hoặc trước softEndTime bằng cách phát sinh chi phí tỷ lệ với khoảng thời gian sau khi softEndTime xảy ra sự kiện. startTime, endTime, softStartTimesoftEndTime phải nằm trong giới hạn thời gian chung (xem ShipmentModel.global_start_timeShipmentModel.global_end_time) và phải tuân theo:

  0 <= `startTime` <= `softStartTime` <= `endTime` and
  0 <= `startTime` <= `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 khoảng thời gian cố định. Nếu bạn chưa chỉ định, thì chế độ cài đặt này sẽ được đặt thành ShipmentModel.global_start_time.

Dấu thời gian theo múi giờ "Zulu" RFC3339 (giờ UTC) với độ phân giải nano giây và lên đến 9 chữ số phân số. Ví dụ: "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z".

endTime

string (Timestamp format)

Thời gian kết thúc của khoảng thời gian cố định. Nếu bạn chưa chỉ định, thì chế độ cài đặt này sẽ được đặt thành ShipmentModel.global_end_time.

Dấu thời gian theo múi giờ "Zulu" RFC3339 (giờ UTC) với độ phân giải nano giây và lên đến 9 chữ số phân số. Ví dụ: "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z".

softStartTime

string (Timestamp format)

Thời gian khởi động mềm của khoảng thời gian.

Dấu thời gian theo múi giờ "Zulu" RFC3339 (giờ UTC) với độ phân giải nano giây và lên đến 9 chữ số phân số. Ví dụ: "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z".

softEndTime

string (Timestamp format)

Thời gian kết thúc tạm thời của khoảng thời gian.

Dấu thời gian theo múi giờ "Zulu" RFC3339 (giờ UTC) với độ phân giải nano giây và lên đến 9 chữ số phân số. Ví dụ: "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z".

costPerHourBeforeSoftStartTime

number

Chi phí mỗi giờ được cộng 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 cộng 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.

Loại xe

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

Biểu diễn dưới dạng JSON
{
  "displayName": string,
  "travelMode": enum (TravelMode),
  "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ị của xe do người dùng xác định. Mã này có thể dài tối đa 63 ký tự và có thể sử dụng ký tự UTF-8.

travelMode

enum (TravelMode)

Phương tiện đi lại ảnh hưởng đến đường mà xe có thể sử dụng và tốc độ của xe. Xem thêm travelDurationMultiple.

startLocation

object (LatLng)

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

startWaypoint

object (Waypoint)

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

endLocation

object (LatLng)

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

endWaypoint

object (Waypoint)

Điểm tham chiếu biểu thị một vị trí địa lý nơi chiếc xe kết thúc sau khi đã chạy xong VisitRequest cuối cùng. Nếu bạn không chỉ định endWaypointendLocation, thì ShipmentRoute của xe sẽ kết thúc ngay khi kết thúc VisitRequest cuối cùng. Nếu mô hình vận chuyển có ma trận thời lượng và khoảng cách, 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 tuyến đường của xe.

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

endTags[]

string

Chỉ định các thẻ được gắn ở cuối tuyến đường của xe.

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

startTimeWindows[]

object (TimeWindow)

Khoảng thời gian mà xe có thể rời khỏi vị trí bắt đầu. Các trường này phải nằm trong giới hạn thời gian chung (xem các trường ShipmentModel.global_*). Nếu bạn không chỉ định, thì sẽ không có giới hạn nào khác 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 rời rạc, tức là không có khoảng thời gian nào có thể chồng chéo hoặc liền kề một khoảng thời gian khác, đồng thời các khoảng thời gian này phải theo trình tự thời gian.

Bạn chỉ có thể thiết lập costPerHourAfterSoftEndTimesoftEndTime nếu có một khoảng thời gian duy nhất.

endTimeWindows[]

object (TimeWindow)

Khoảng thời gian mà xe có thể đến vị trí kết thúc. Các trường này phải nằm trong giới hạn thời gian chung (xem các trường ShipmentModel.global_*). Nếu bạn không chỉ định, thì sẽ không có giới hạn nào khác 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 rời rạc, tức là không có khoảng thời gian nào có thể chồng chéo hoặc liền kề một khoảng thời gian khác, đồng thời các khoảng thời gian này phải theo trình tự thời gian.

Bạn chỉ có thể thiết lập costPerHourAfterSoftEndTimesoftEndTime nếu có một khoảng thời gian duy nhất.

unloadingPolicy

enum (UnloadingPolicy)

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

loadLimits

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

Tải trọng của xe (ví dụ: trọng lượng, thể tích, số lượng thùng xe). Các khoá trong tệp ánh xạ 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 không có một khoá cụ thể nào trên bản đồ này, thì dung lượng tương ứng được coi là không có giới hạn.

Một đối tượng chứa danh sách các cặp "key": value. Ví dụ: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

costPerHour

number

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

Chi phí mỗi giờ trên tuyến đường của phương tiện. Chi phí này được áp dụng cho tổng thời gian đi theo 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ể khiến độ trễ tăng thêm.

costPerTraveledHour

number

Chi phí mỗi giờ đi lại trên tuyến đường của phương tiện. Chi phí này chỉ được áp dụng cho thời gian đi lại của tuyến đường (tức là được báo cáo bằng ShipmentRoute.transitions), không bao gồm thời gian chờ và thời gian ghé thăm.

costPerKilometer

number

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

fixedCost

number

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

usedIfRouteIsEmpty

boolean

Trường này chỉ áp dụng cho các phương tiện vận chuyển khi tuyến đường của xe không vận chuyển hàng. Mã này cho biết có nên xem xe là đã qua sử dụng hay không trong trường hợp này.

Nếu đúng, chiếc xe sẽ đi từ điểm xuất phát đến vị trí kết thúc ngay cả khi không vận chuyển hàng nào, đồng thời chi phí về thời gian và quãng đường phát sinh từ điểm xuất phát --> cuối cùng sẽ được tính đến.

Nếu không, xe này sẽ không di chuyển từ vị trí bắt đầu đến vị trí kết thúc và sẽ không có breakRule hoặc chuyến chậm trễ nào (từ TransitionAttributes) đượ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ỉ số và nhãn xe.

routeDurationLimit

object (DurationLimit)

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

travelDurationLimit

object (DurationLimit)

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

routeDistanceLimit

object (DistanceLimit)

Giới hạn được áp dụng cho tổng quãng đường trên tuyến đường của xe. 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 của tuyến đường đó.

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. Khoảng thời gian này là thời gian ngoài VisitRequest.duration được thực hiện tại các lượt truy cập có visitTypes được chỉ định. Thời lượng truy cập 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 truy cập có nhiều loại, thì thời lượng sẽ được thêm cho mỗi loại trong bản đồ.

Một đối tượng chứa danh sách các cặp "key": value. Ví dụ: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

breakRule

object (BreakRule)

Mô tả lịch nghỉ thực thi trên xe này. Nếu trống, sẽ không có giờ 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 đúng, usedIfRouteIsEmpty phải là sai và xe này sẽ vẫn không được sử dụng.

Nếu quá trình vận chuyển được thực hiện bởi một phương tiện bị bỏ qua trong injectedFirstSolutionRoutes, thì quá trình vận chuyển đó 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 quá trình vận chuyển do một phương tiện bị bỏ qua thực hiện trong injectedSolutionConstraint và mọi hành động đến lấy hàng/giao hàng có liên quan bị buộc phải ở lại trên xe (tức là không thả lỏng để lên cấp RELAX_ALL_AFTER_THRESHOLD), thì phương tiện đó 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 một hệ số nhân có thể dùng để tăng hoặc giảm thời gian di chuyển của xe này. Ví dụ: việc đặt giá trị này thành 2.0 có nghĩa là xe này chạy chậm hơn và có thời gian di chuyển gấp đôi so với xe tiêu chuẩn. Bội số này không ảnh hưởng đến thời lượng truy cập. Yếu tố này có ả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,0]. Nếu bạn không đặt chính sách này, xe sẽ là xe tiêu chuẩn và bội 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 áp dụng bội số này, nhưng trước khi thực hiện bất kỳ thao tác số nào, do đó, nếu chỉ số bội số nhỏ có thể làm giảm độ chính xác, thì thời gian di chuyển sẽ được làm tròn đến giây gần nhất.

Hãy xem thêm extraVisitDurationForVisitType bên dưới.

TravelMode

Phương tiện đi lại mà xe có thể sử dụng.

Những phương thức di chuyển này phải là một nhóm nhỏ các phương thức đi lại sử dụng API ưu tiên cho Tuyến đường trên Nền tảng Google Maps, vui lòng xem: https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.

Enum
TRAVEL_MODE_UNSPECIFIED Chế độ đi lại chưa xác định, tương đương với DRIVING.
DRIVING Chế độ đi lại tương ứng với chỉ đường lái xe (ô tô, ...).
WALKING Chế độ đi lại tương ứng với chỉ đường đi bộ.

UnloadingPolicy

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

Các gói vận chuyển khác được miễn phí tại bất cứ đâu trên tuyến đường mà không phụ thuộc vào unloadingPolicy.

Enum
UNLOADING_POLICY_UNSPECIFIED Chính sách huỷ tải không xác định; việc phân phối chỉ được diễn ra sau lần đến lấy hàng tương ứng.
LAST_IN_FIRST_OUT Việc giao hàng phải diễn ra theo thứ tự đảo ngược thời gian giao hàng
FIRST_IN_FIRST_OUT Việc giao hàng phải diễn ra theo cùng thứ tự với dịch vụ đến lấy hàng

LoadLimit

Xác định giới hạn tải áp dụng cho một chiếc xe, ví dụ: "xe tải này chỉ có thể chở tối đa 3500 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
}
Trường
softMaxLoad

string (int64 format)

Giới hạn tải nhẹ. 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ộng lại và phải ở cùng đơn vị với Shipment.penalty_cost.

startLoadInterval

object (Interval)

Khoảng tải trọng chấp nhận được của xe tại thời điểm 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)

Tải trọng tối đa chấp nhận được.

Khoảng thời gian

Khoảng thời gian tải chấp nhận được.

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

string (int64 format)

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

max

string (int64 format)

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

DurationLimit

Giới hạn xác định thời lượng tối đa của tuyến đường mà phương tiện di chuyển. Tấm này có thể cứng hoặc 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 của ngưỡng đó.

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 cố định ràng buộc thời lượng ở mức tối đa là maxDuration.

Thời lượng tính bằng giây với tối đa 9 chữ số phân số, 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 sẽ khiến tuyến đường phải chịu 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 không được là số â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 với tối đa 9 chữ số phân số, 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 vi phạm sẽ khiến tuyến đường phải chịu chi phí, gấp đôi trong khoảng thời gian đó. 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 không được là số âm. Nếu maxDuration cũng được định nghĩa, thì quadraticSoftMaxDuration phải nhỏ hơn maxDuration và chênh lệch 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 với tối đa 9 chữ số phân số, kết thúc bằng "s". Ví dụ: "3.5s".

costPerHourAfterSoftMax

number

Chi phí mỗi giờ phải chịu nếu vi phạm ngưỡng softMaxDuration. Chi phí bổ sung là 0 nếu thời lượng nằm dưới ngưỡng, nếu không thì 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ờ vuông phải chịu nếu vi phạm ngưỡng quadraticSoftMaxDuration.

Chi phí bổ sung là 0 nếu thời lượng nằm dưới ngưỡng, nếu không thì 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 quãng đường tối đa có thể đi được. Tấm này có thể cứng hoặc mềm.

Nếu đã 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 là số âm.

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

string (int64 format)

Một giới hạn cố định ràng buộc khoảng cách ở mức 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 vi phạm sẽ dẫn đến chi phí cộng với các chi phí khác được xác định trong mô hình, với cùng một đơn vị.

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

costPerKilometerAboveSoftMax

number

Chi phí 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 dưới giới hạn, nếu không, công thức dùng để tính chi phí như sau:

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

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

BreakRule

Quy tắc tạo giờ nghỉ giải lao trên xe (ví dụ: giờ nghỉ trưa). Giờ nghỉ giải lao là khoảng thời gian liền nhau mà trong đó xe vẫn không hoạt động ở vị trí hiện tại và không thực hiện được hoạt động ghé qua nào. Tạm thời có thể bị tạm ngừng:

  • trong quá trình di chuyển giữa hai lượt ghé thăm (bao gồm thời gian ngay trước hoặc ngay sau khi ghé thăm, nhưng không phải giữa lượt ghé thăm), trong trường hợp này, thời gian vận chuyển sẽ kéo dài 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 vào 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 xe kết thúc (ditto, với thời gian kết thúc của xe).
Biểu diễn dưới dạng JSON
{
  "breakRequests": [
    {
      object (BreakRequest)
    }
  ],
  "frequencyConstraints": [
    {
      object (FrequencyConstraint)
    }
  ]
}
Trường
breakRequests[]

object (BreakRequest)

Trình tự nghỉ ngơi. Xem thông báo BreakRequest.

frequencyConstraints[]

object (FrequencyConstraint)

Có thể áp dụng nhiều FrequencyConstraint. Tất cả các giá trị này đều phải đáp ứng các BreakRequest của BreakRule này. Vui lòng xem FrequencyConstraint.

BreakRequest

Bạn phải biết trước trình tự chèn quảng cáo (tức là số lượng và thứ tự của chúng) cho từng chiếc xe. BreakRequest lặp lại xác định trình tự đó theo thứ tự mà chúng phải xảy ra. Khoảng thời gian (earliestStartTime / latestStartTime) có thể trùng lặp, nhưng phải tương thích với thứ tự (bạn đánh dấu vào ô 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) ở đầu điểm chèn.

Dấu thời gian theo múi giờ "Zulu" RFC3339 (giờ UTC) với độ phân giải nano giây và lên đến 9 chữ số phân số. Ví dụ: "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z".

latestStartTime

string (Timestamp format)

Bắt buộc. Giới hạn trên (bao gồm) khi bắt đầu điểm chèn.

Dấu thời gian theo múi giờ "Zulu" RFC3339 (giờ UTC) với độ phân giải nano giây và lên đến 9 chữ số phân số. Ví dụ: "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z".

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.

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

FrequencyConstraint

Một thời gian có thể hạn chế hơn nữa tần suất và thời lượng của các điểm chèn nêu trên, bằng cách áp dụng tần suất chèn tối thiểu, chẳng hạn như "Cứ 12 giờ phải có một khoảng nghỉ ít nhất là 1 giờ". Giả sử điều này có thể được hiểu là "Trong khoảng thời gian trượt bất kỳ 12 giờ, phải có ít nhất một lần nghỉ ít nhất một giờ", thì ví dụ đó sẽ chuyển thành 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 chèn trong giải pháp sẽ tuân theo mọi quy tắ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 điểm nghỉ không liên tiếp. Ví dụ: lịch biểu sau đây tôn trọng "1h mỗi 12h" ví dụ:

  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 chèn tối thiểu cho quy tắc ràng buộc này. Không âm. Xem mô tả về FrequencyConstraint.

Thời lượng tính bằng giây với tối đa 9 chữ số phân số, 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 cho 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 ngắt kết nối duration >= minBreakDuration. Phải là số dương.

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

DurationDistanceMatrix

Cho biết thời lượng và khoảng cách từ vị trí lượt ghé thăm và vị trí bắt đầu của xe đến lượt ghé thăm và vị trí kết thúc 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ử tối đa là ShipmentModel.duration_distance_matrix_src_tags.

vehicleStartTag

string

Thẻ xác định loại xe áp dụng ma trận thời lượng và quãng đường này. Nếu trống, thuộc tính này sẽ áp dụng cho tất cả các loại xe và chỉ được có một ma trận duy nhất.

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

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

Hàng

Chỉ định một hàng 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ử tối đa là ShipmentModel.duration_distance_matrix_dst_tags.

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

TransitionAttributes

Chỉ định các thuộc tính của lượt chuyển đổi giữa hai lượt truy cập 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 đó, mọi chi phí phát sinh cộng thêm và điều kiện ràng buộc hoặc giới hạn nghiêm ngặt nhất sẽ được áp dụng (tuân 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

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

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

excludedSrcTag

string

Vui lòng xem srcTag. Không được để trống một trong hai giá trị srcTagexcludedSrcTag.

dstTag

string

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

excludedDstTag

string

Vui lòng xem dstTag. Không được để trống một trong hai giá trị dstTagexcludedDstTag.

cost

number

Chỉ định chi phí để thực hiện quá trình chuyển đổi này. Giá trị này sẽ có cùng đơn vị với tất 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 cùng với tất cả chi phí khác hiện có.

costPerKilometer

number

Chỉ định chi phí 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. Tổng số tiền bằng 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ừ ngày 6 tháng 2 năm 2021, chúng tôi chỉ hỗ trợ các giới hạn tạm thời.

delay

string (Duration format)

Chỉ định độ trễ phát sinh khi thực hiện quá trình chuyển đổi 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.

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

ShipmentTypeIncompatibility

Chỉ định sự không tương thích giữa các gói hàng tuỳ theo lô hàng của các lô hàng đó. Việc các kiện hàng không tương thích trong cùng một tuyến đường bị hạn chế do 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 gói hàng có shipment_types khác nhau trong số các 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 phương thức xác định việc hạn chế xuất hiện những 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 không xác định. Tuyệt đối không sử dụng giá trị này.
NOT_PERFORMED_BY_SAME_VEHICLE Ở chế độ này, hai gói hàng có các loại không tương thích tuyệt đối không thể dùng chung một phương tiện.
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

Đối với hai gói hàng có loại hình không tương thích có chế độ không tương thích với NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY:

  • Nếu cả hai đều chỉ có dịch vụ đến lấy hàng (không giao hàng) hoặc chỉ giao hàng (không có dịch vụ đến lấy hàng), thì bạn không thể dùng chung một phương tiện.
  • Nếu một trong hai lô hàng được giao trước khi đến lấy hàng, hai lô hàng có thể dùng chung một phương tiện nếu lô hàng cũ được giao trước khi đến lấy hàng.

ShipmentTypeRequirement

Cho biết yêu cầu giữa các gói hàng dựa trên hình thức vận chuyển tương ứng. Các nội dung cụ thể của yêu cầu này đượ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ế theo yêu cầu của dependentShipmentTypes.

dependentShipmentTypes[]

string

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

LƯU Ý: Không được phép sử dụng 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 phương thức xác định việc xuất hiện của các gói hàng phụ thuộc trên một tuyến đường.

Enum
REQUIREMENT_MODE_UNSPECIFIED Chế độ yêu cầu chưa được chỉ định. Tuyệt đối không sử dụng giá trị này.
PERFORMED_BY_SAME_VEHICLE Ở chế độ này, tất cả các quảng cáo "phụ thuộc" các gói hàng phải có cùng phương tiện vận chuyển với ít nhất một trong những phương tiện vận chuyển "bắt buộc" lô hàng.
IN_SAME_VEHICLE_AT_PICKUP_TIME

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

Người "phụ thuộc" do đó, phương thức lấy hàng để vận chuyển phải có:

  • Mục "Bắt buộc" chỉ để phân phối lô hàng được giao trên tuyến đường sau, hoặc
  • A "bắt buộc" lô hàng đã được lấy trên tuyến đường trước đó và nếu "bắt buộc" thì việc giao hàng này phải được thực hiện sau phần "phụ thuộc" đến lấy hàng.
IN_SAME_VEHICLE_AT_DELIVERY_TIME Giữ nguyên như trước, ngoại trừ phần "phụ thuộc" gói hàng cần có thông tin "bắt buộc" vận chuyển 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à lấy hàng hoặc giao hàng): "thứ hai" sự kiện phải bắt đầu ít nhất offsetDuration sau ngày "đầu tiên" đã bắt đầu.

Một số mức độ ưu tiên có thể đề cập đến cùng một sự kiện (hoặc có liên quan), ví dụ: "đến lấy hàng B sau khi giao hàng A" và "đến lấy hàng C sau khi đến 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à 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 giá trị "đầu tiên" là lần giao hàng.

secondIsDelivery

boolean

Cho biết liệu "thứ hai" là lần giao hàng.

offsetDuration

string (Duration format)

Sự chênh lệch giữa giá trị "đầu tiên" và "second" sự kiện. Thông tin này có thể mang giá trị âm.

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

firstIndex

integer

Chỉ số vận chuyển của gói hàng "đầu tiên" sự kiện. Bạn phải chỉ định trường này.

secondIndex

integer

Chỉ số vận chuyển của "giây" sự kiện. Bạn phải chỉ định trường này.