ShipmentRoute

Tuyến đường của xe có thể bị phân rã, dọc theo trục thời gian, như sau (chúng tôi giả định có n lượt ghé thăm):

  |            |            |          |       |  T[2], |        |      |
  | Transition |  Visit #0  |          |       |  V[2], |        |      |
  |     #0     |    aka     |   T[1]   |  V[1] |  ...   | V[n-1] | T[n] |
  |  aka T[0]  |    V[0]    |          |       | V[n-2],|        |      |
  |            |            |          |       | T[n-1] |        |      |
  ^            ^            ^          ^       ^        ^        ^      ^
vehicle    V[0].start   V[0].end     V[1].   V[1].    V[n].    V[n]. vehicle
 start     (arrival)   (departure)   start   end      start    end     end

Xin lưu ý rằng chúng tôi có sự khác biệt giữa:

  • "sự kiện đúng giờ", chẳng hạn như thời điểm bắt đầu và kết thúc phương tiện, cũng như thời điểm bắt đầu và kết thúc của mỗi lượt ghé thăm (còn gọi là thời điểm đến và khởi hành). Chúng xảy ra tại một giây nhất định.
  • "khoảng thời gian", chẳng hạn như chính các lượt truy cập và chuyển đổi giữa các lượt truy cập. Mặc dù đôi khi các khoảng thời gian có thể có thời lượng bằng không, tức là bắt đầu và kết thúc tại cùng một giây, nhưng chúng thường có thời lượng dương.

Bất biến:

  • Nếu có n lượt truy cập, thì có n+1 chuyển đổi.
  • Lượt truy cập luôn được bao quanh bởi một chuyển đổi trước nó (cùng một chỉ mục) và một chuyển đổi sau nó (chỉ mục + 1).
  • Quá trình khởi động xe luôn theo sau quá trình chuyển đổi #0.
  • Điểm cuối của xe luôn đứng sau nút chuyển #n.

Khi phóng to, sau đây là những gì sẽ xảy ra trong TransitionVisit:

---+-------------------------------------+-----------------------------+-->
   |           TRANSITION[i]             |           VISIT[i]          |
   |                                     |                             |
   |  * TRAVEL: the vehicle moves from   |      PERFORM the visit:     |
   |    VISIT[i-1].departure_location to |                             |
   |    VISIT[i].arrival_location, which |  * Spend some time:         |
   |    takes a given travel duration    |    the "visit duration".    |
   |    and distance                     |                             |
   |                                     |  * Load or unload           |
   |  * BREAKS: the driver may have      |    some quantities from the |
   |    breaks (e.g. lunch break).       |    vehicle: the "demand".   |
   |                                     |                             |
   |  * WAIT: the driver/vehicle does    |                             |
   |    nothing. This can happen for     |                             |
   |    many reasons, for example when   |                             |
   |    the vehicle reaches the next     |                             |
   |    event's destination before the   |                             |
   |    start of its time window         |                             |
   |                                     |                             |
   |  * DELAY: *right before* the next   |                             |
   |    arrival. E.g. the vehicle and/or |                             |
   |    driver spends time unloading.    |                             |
   |                                     |                             |
---+-------------------------------------+-----------------------------+-->
   ^                                     ^                             ^
V[i-1].end                           V[i].start                    V[i].end

Cuối cùng, đây là cách sắp xếp DU LỊCH, BREAKS, TẠM DỪNG và CHỜ trong suốt quá trình chuyển đổi.

  • Chúng không chồng chéo nhau.
  • Thời gian chờ trước khi kết thúc cuộc gọi là duy nhất và phải là một khoảng thời gian liền nhau ngay trước lần ghé thăm tiếp theo (hoặc điểm cuối phương tiện). Do đó, bạn chỉ cần biết khoảng thời gian trễ để biết thời gian bắt đầu và kết thúc.
  • BREAKS là các khoảng thời gian liền nhau và không chồng chéo nhau. Phản hồi chỉ định thời gian bắt đầu và thời lượng của mỗi điểm chèn.
  • DU LỊCH và CHỜ "có thể được ưu tiên": các hoạt động này có thể bị gián đoạn nhiều lần trong quá trình chuyển đổi này. Khách hàng có thể giả định rằng quá trình di chuyển diễn ra "càng sớm càng tốt" và "chờ" để lấp đầy thời gian còn lại.

Ví dụ về (phức tạp):

                               TRANSITION[i]
--++-----+-----------------------------------------------------------++-->
  ||     |       |           |       |           |         |         ||
  ||  T  |   B   |     T     |       |     B     |         |    D    ||
  ||  r  |   r   |     r     |   W   |     r     |    W    |    e    ||
  ||  a  |   e   |     a     |   a   |     e     |    a    |    l    ||
  ||  v  |   a   |     v     |   i   |     a     |    i    |    a    ||
  ||  e  |   k   |     e     |   t   |     k     |    t    |    y    ||
  ||  l  |       |     l     |       |           |         |         ||
  ||     |       |           |       |           |         |         ||
--++-----------------------------------------------------------------++-->
Biểu diễn dưới dạng JSON
{
  "vehicleIndex": integer,
  "vehicleLabel": string,
  "vehicleStartTime": string,
  "vehicleEndTime": string,
  "visits": [
    {
      object (Visit)
    }
  ],
  "transitions": [
    {
      object (Transition)
    }
  ],
  "hasTrafficInfeasibilities": boolean,
  "routePolyline": {
    object (EncodedPolyline)
  },
  "breaks": [
    {
      object (Break)
    }
  ],
  "metrics": {
    object (AggregatedMetrics)
  },
  "routeCosts": {
    string: number,
    ...
  },
  "routeTotalCost": number
}
Trường
vehicleIndex

integer

Xe đang đi theo tuyến đường, được xác định bằng chỉ mục của xe trong nguồn ShipmentModel.

vehicleLabel

string

Nhãn của xe thực hiện tuyến đường này, bằng ShipmentModel.vehicles(vehicleIndex).label, nếu được chỉ định.

vehicleStartTime

string (Timestamp format)

Thời điểm xe bắt đầu tuyến đường.

Dấu thời gian ở định dạng "Zulu" RFC3339 UTC, với độ phân giải nano giây và tối đa 9 chữ số phân số. Ví dụ: "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z".

vehicleEndTime

string (Timestamp format)

Thời điểm xe hoàn thành tuyến đường.

Dấu thời gian ở định dạng "Zulu" RFC3339 UTC, với độ phân giải nano giây và tối đa 9 chữ số phân số. Ví dụ: "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z".

visits[]

object (Visit)

Chuỗi lượt ghé thăm theo thứ tự đại diện cho một tuyến đường. Lượt ghé thăm[i] là lượt ghé thăm thứ i trong tuyến đường. Nếu trường này trống, xe được coi là chưa sử dụng.

transitions[]

object (Transition)

Danh sách chuyển đổi theo thứ tự của tuyến đường.

hasTrafficInfeasibilities

boolean

Khi bạn đặt OptimizeToursRequest.consider_road_traffic thành true, trường này cho biết rằng thời gian tuyến đường sẽ không nhất quán bằng cách sử dụng ước tính thời lượng di chuyển dựa trên giao thông. Có thể không có đủ thời gian để hoàn thành việc đi lại đã điều chỉnh theo lưu lượng giao thông, sự chậm trễ và nghỉ giữa các lượt ghé thăm, trước lượt ghé thăm đầu tiên hoặc sau lượt ghé thăm sau cùng, trong khi vẫn đáp ứng được khoảng thời gian ghé thăm và khung thời gian xe chạy. Ví dụ:

  startTime(previous_visit) + duration(previous_visit) +
  travelDuration(previous_visit, next_visit) > startTime(next_visit)

Chuyến đến next_visit có thể sẽ diễn ra muộn hơn khung thời gian hiện tại do thời gian di chuyển ước tính tăng travelDuration(previous_visit, next_visit) do giao thông. Ngoài ra, điểm chèn quảng cáo có thể trùng lặp với một lượt ghé thăm do tăng ước tính thời gian đi lại và các hạn chế về thời lượng ghé thăm hoặc thời gian nghỉ.

routePolyline

object (EncodedPolyline)

Biểu thị nhiều đường được mã hoá của tuyến. Trường này chỉ được điền nếu bạn đặt OptimizeToursRequest.populate_polylines thành true.

breaks[]

object (Break)

Các điểm ngắt đã lên lịch cho xe thực hiện tuyến đường này. Trình tự breaks biểu thị các khoảng thời gian, mỗi khoảng thời gian bắt đầu tại startTime tương ứng và kéo dài duration giây.

metrics

object (AggregatedMetrics)

Các chỉ số thời lượng, khoảng cách và tải trọng cho tuyến đường này. Các trường của AggregatedMetrics được tính tổng trên toàn bộ ShipmentRoute.transitions hoặc ShipmentRoute.visits, tuỳ thuộc vào ngữ cảnh.

routeCosts

map (key: string, value: number)

Chi phí của tuyến đường, được chia nhỏ theo các trường yêu cầu liên quan đến chi phí. Khoá là đường dẫn proto, so với dữ liệu đầu vào Optimize ToursRequest, ví dụ: "model.shipments.pickups.cost" và các giá trị này là tổng chi phí do trường chi phí tương ứng tạo ra, được tổng hợp trên toàn bộ tuyến đường. Nói cách khác, chi phí["model.shipments.pickups.cost"] là tổng của tất cả chi phí đến lấy hàng trong suốt lộ trình. Tất cả chi phí xác định trong mô hình đều được báo cáo chi tiết tại đây, ngoại trừ các chi phí liên quan đến TransitionAttributes chỉ được báo cáo theo cách tổng hợp kể từ ngày 1 tháng 1 năm 2022.

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

routeTotalCost

number

Tổng chi phí của tuyến đường. Tổng của tất cả chi phí trong bản đồ chi phí.

Truy cập

Lượt ghé thăm được thực hiện trong một tuyến đường. Lượt truy cập này tương ứng với việc đến lấy hàng hoặc giao hàng của Shipment.

Biểu diễn dưới dạng JSON
{
  "shipmentIndex": integer,
  "isPickup": boolean,
  "visitRequestIndex": integer,
  "startTime": string,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "detour": string,
  "shipmentLabel": string,
  "visitLabel": string
}
Trường
shipmentIndex

integer

Chỉ mục của trường shipments trong ShipmentModel nguồn.

isPickup

boolean

Nếu đúng, lượt truy cập này tương ứng với việc nhận Shipment. Nếu không, nó tương ứng với một phân phối.

visitRequestIndex

integer

Chỉ mục của VisitRequest trong trường đến lấy hàng hoặc giao hàng của Shipment (xem isPickup).

startTime

string (Timestamp format)

Thời gian bắt đầu lượt truy cập. Xin lưu ý rằng xe có thể đến sớm hơn tại địa điểm ghé thăm. Thời gian phải nhất quán với ShipmentModel.

Dấu thời gian ở định dạng "Zulu" RFC3339 UTC, với độ phân giải nano giây và tối đa 9 chữ số phân số. Ví dụ: "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z".

loadDemands

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

Tổng nhu cầu tải lượt truy cập là tổng của lô hàng và yêu cầu lượt truy cập loadDemands. Các giá trị là số âm nếu lượt truy cập là một lần phân phối. Nhu cầu được báo cáo cho các loại giống như Transition.loads (xem trường này).

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

detour

string (Duration format)

Thời gian đi vòng thêm do các chuyến hàng đã được khách đến trên tuyến đường trước khi tới và do có thể phải chờ đợi do cửa sổ thời gian. Nếu lượt ghé thăm là một chuyến giao hàng, thì đường vòng được tính từ lượt ghé thăm tương ứng và bằng:

startTime(delivery) - startTime(pickup)
- (duration(pickup) + travel duration from the pickup location
to the delivery location).

Nếu không, giá trị này được tính từ xe startLocation và bằng:

startTime - vehicleStartTime - travel duration from
the vehicle's `startLocation` to the visit.

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

shipmentLabel

string

Bản sao của Shipment.label tương ứng, nếu được chỉ định trong Shipment.

visitLabel

string

Bản sao của VisitRequest.label tương ứng, nếu được chỉ định trong VisitRequest.

Hiệu ứng chuyển cảnh

Chuyển đổi giữa hai sự kiện trên tuyến đường. Xem nội dung mô tả về ShipmentRoute.

Nếu xe không có startLocation và/hoặc endLocation, thì chỉ số về hành trình tương ứng sẽ bằng 0.

Biểu diễn dưới dạng JSON
{
  "travelDuration": string,
  "travelDistanceMeters": number,
  "trafficInfoUnavailable": boolean,
  "delayDuration": string,
  "breakDuration": string,
  "waitDuration": string,
  "totalDuration": string,
  "startTime": string,
  "routePolyline": {
    object (EncodedPolyline)
  },
  "vehicleLoads": {
    string: {
      object (VehicleLoad)
    },
    ...
  }
}
Trường
travelDuration

string (Duration format)

Thời gian di chuyển trong quá trình chuyển đổi này.

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

travelDistanceMeters

number

Quãng đường đã đi trong quá trình chuyển đổi.

trafficInfoUnavailable

boolean

Khi có yêu cầu về lưu lượng truy cập qua OptimizeToursRequest.consider_road_traffic và không thể truy xuất thông tin lưu lượng truy cập cho Transition, giá trị boolean này được đặt thành true. Đây có thể là sự cố tạm thời (hiếm khi xảy ra trục trặc trong các máy chủ lưu lượng truy cập theo thời gian thực) hoặc vĩnh viễn (không có dữ liệu cho vị trí này).

delayDuration

string (Duration format)

Tổng khoảng thời gian trễ áp dụng cho quá trình chuyển đổi này. Nếu có, thời gian trễ sẽ bắt đầu chính xác là delayDuration giây trước sự kiện tiếp theo (lượt ghé thăm hoặc kết thúc xe). Vui lòng xem TransitionAttributes.delay.

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

breakDuration

string (Duration format)

Tổng thời lượng các điểm chèn xảy ra trong quá trình chuyển đổi này, nếu có. Thông tin chi tiết về thời gian bắt đầu và thời lượng của mỗi điểm chèn được lưu trữ trong ShipmentRoute.breaks.

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

waitDuration

string (Duration format)

Thời gian chờ trong quá trình chuyển đổi này. Thời gian chờ tương ứng với thời gian không hoạt động và không bao gồm thời gian nghỉ. Ngoài ra, xin lưu ý rằng thời gian chờ này có thể được chia thành nhiều khoảng thời gian không liên tiếp.

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

totalDuration

string (Duration format)

Tổng thời lượng chuyển đổi, được cung cấp để thuận tiện. Giá trị này bằng:

  • hãy truy cập startTime (hoặc vehicleEndTime nếu đây là chuyển đổi cuối cùng) - chuyển đổi này là startTime;
  • nếu ShipmentRoute.has_traffic_infeasibilities là false, thì các nội dung sau đây cũng sẽ được lưu giữ: "totalDuration = TourismDuration + CPMDuration
  • breakThời lượng + khoảng thời gian chờ".

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

startTime

string (Timestamp format)

Thời gian bắt đầu của quá trình chuyển đổi này.

Dấu thời gian ở định dạng "Zulu" RFC3339 UTC, với độ phân giải nano giây và tối đa 9 chữ số phân số. Ví dụ: "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z".

routePolyline

object (EncodedPolyline)

Nội dung biểu thị nhiều đường được mã hoá của tuyến đường mà theo đó trong quá trình chuyển đổi. Trường này chỉ được điền nếu bạn đặt populateTransitionPolylines thành true.

vehicleLoads

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

Tải trọng xe trong quá trình chuyển đổi này, đối với mỗi loại xuất hiện trong Vehicle.load_limits của xe này, hoặc loại có Shipment.load_demands khác 0 trong một số lô hàng được thực hiện trên tuyến đường này.

Tải trọng trong quá trình chuyển đổi đầu tiên là tải trọng bắt đầu của tuyến đường xe chạy. Sau đó, sau mỗi lượt truy cập, loadDemands của lượt truy cập sẽ được cộng hoặc trừ để nhận được lượt tải của lượt chuyển đổi tiếp theo, tuỳ thuộc vào việc lượt truy cập đó là đến lấy hàng hay giao hàng.

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

EncodedPolyline

Biểu thị được mã hoá của một hình nhiều đường. Bạn có thể tìm thêm thông tin về mã hoá nhiều dòng tại đây: https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding.

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

string

Chuỗi đại diện cho các điểm được mã hoá của hình nhiều đường.

Nghỉ giải lao

Dữ liệu biểu thị quá trình thực thi điểm chèn quảng cáo.

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

string (Timestamp format)

Bắt đầu thời gian nghỉ giải lao.

Dấu thời gian ở định dạng "Zulu" RFC3339 UTC, với độ phân giải nano giây và tối đa 9 chữ số phân số. Ví dụ: "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z".

duration

string (Duration format)

Thời lượng của điểm chèn quảng cáo.

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