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 Transition
và Visit
:
---+-------------------------------------+-----------------------------+-->
| 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 ( |
Trường | |
---|---|
vehicleIndex |
Xe đang đi theo tuyến đường, được xác định bằng chỉ mục của xe trong nguồn |
vehicleLabel |
Nhãn của xe thực hiện tuyến đường này, bằng |
vehicleStartTime |
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ụ: |
vehicleEndTime |
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ụ: |
visits[] |
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[] |
Danh sách chuyển đổi theo thứ tự của tuyến đường. |
hasTrafficInfeasibilities |
Khi bạn đặt
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 |
routePolyline |
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 |
breaks[] |
Các điểm ngắt đã lên lịch cho xe thực hiện tuyến đường này. Trình tự |
metrics |
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 |
routeCosts |
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 |
routeTotalCost |
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 ( |
Trường | |
---|---|
shipmentIndex |
Chỉ mục của trường |
isPickup |
Nếu đúng, lượt truy cập này tương ứng với việc nhận |
visitRequestIndex |
Chỉ mục của |
startTime |
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 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ụ: |
loadDemands |
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 Đối tượng chứa danh sách các cặp |
detour |
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:
Nếu không, giá trị này được tính từ xe
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 " |
shipmentLabel |
Bản sao của |
visitLabel |
Bản sao của |
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 ( |
Trường | |
---|---|
travelDuration |
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 " |
travelDistanceMeters |
Quãng đường đã đi trong quá trình chuyển đổi. |
trafficInfoUnavailable |
Khi có yêu cầu về lưu lượng truy cập qua |
delayDuration |
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à 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 " |
breakDuration |
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 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 " |
waitDuration |
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 " |
totalDuration |
Tổng thời lượng chuyển đổi, được cung cấp để thuận tiện. Giá trị này bằng:
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 " |
startTime |
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ụ: |
routePolyline |
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 |
vehicleLoads |
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 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, Đối tượng chứa danh sách các cặp |
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 |
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 |
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ụ: |
duration |
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 " |