Bạn có thể phân ly tuyến đường của một xe dọc theo trục thời gian như sau (giả sử có n lượt truy cập):
| | | | | 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 tạo 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 của xe cũng như thời điểm bắt đầu và kết thúc của mỗi lượt truy cập (còn gọi là thời điểm đến và thời điểm rời đi). Các sự kiện này xảy ra tại một giây nhất định.
- "khoảng thời gian", chẳng hạn như chính lượt truy cập và chuyển đổi giữa các lượt truy cập. Mặc dù đôi khi khoảng thời gian có thể có thời lượng bằng 0 (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 lượt chuyển đổi.
- Một lượt truy cập luôn được bao quanh bởi một lượt chuyển đổi trước đó (cùng chỉ mục) và một lượt chuyển đổi sau đó (chỉ mục + 1).
- Quá trình khởi động xe luôn được theo sau bởi quá trình chuyển đổi #0.
- Điểm cuối của xe luôn đứng sau đoạn chuyển tiếp #n.
Khi phóng to, sau đây là những gì 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, sau đây là cách sắp xếp ĐI LẠI, NGỪNG, NGỪNG và CHỜ trong quá trình chuyển đổi.
- Các lớp này không trùng lặp.
- Thời gian chờ 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 khi phương tiện kết thúc). Do đó, bạn cần biết khoảng thời gian trễ để biết thời gian bắt đầu và kết thúc của sự kiện.
- BREAKS là các khoảng thời gian liền kề, không trùng lặp. Phản hồi này chỉ định thời gian bắt đầu và thời lượng của mỗi khoảng nghỉ.
- TRAVEL và WAIT là "có thể được ưu tiên": chúng 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 việc đi lại diễn ra "càng sớm càng tốt" và "chờ đợi" sẽ lấp đầy thời gian còn lại.
Một ví dụ (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 thực hiện tuyến đường, được xác định theo chỉ mục trong nguồn |
vehicleLabel |
Nhãn của xe thực hiện tuyến đường này, bằng |
vehicleStartTime |
Thời gian xe bắt đầu hành trình. Dấu thời gian ở định dạng "Zulu" RFC3339 UTC, có độ phân giải nano giây và tối đa 9 chữ số thập phân. Ví dụ: |
vehicleEndTime |
Thời điểm xe hoàn tất 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[] |
Trình tự các lượt truy cập theo thứ tự biểu thị một tuyến đường. lượt truy cập[i] là lượt truy cập thứ i trong tuyến đường. Nếu bạn để trống trường này, thì chiếc xe đó sẽ được coi là chưa sử dụng. |
transitions[] |
Danh sách các hiệu ứng chuyển đổi theo thứ tự cho tuyến đường. |
hasTrafficInfeasibilities |
Khi bạn đặt
Thời gian đến vào Next_visit có thể sẽ muộn hơn khoảng thời gian hiện tại do thời gian di chuyển ước tính cao hơn |
routePolyline |
Hình nhiều đường đã mã hoá đại diện cho tuyến đường. Trường này chỉ được điền sẵn nếu bạn đặt |
breaks[] |
Thời gian nghỉ theo lịch cho xe thực hiện tuyến đường này. Trình tự |
metrics |
Các chỉ số về thời lượng, quãng đường và tải 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í. Các khoá là đường dẫn proto, liên quan đến thông tin đầu vào OptimizeChuyếnsRequest (ví dụ: "model.shipments.pickups.cost") và các giá trị 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 tất cả chi phí đến lấy hàng trong suốt tuyến đường. Tất cả chi phí được xác định trong mô hình đều được báo cáo chi tiết tại đây, ngoại trừ 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/1/2022. Một đố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
Một lượt truy cập được thực hiện trong một tuyến đường. Lượt truy cập này tương ứng với một lượt 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 sẽ tương ứng với một lượt lấy hàng của |
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 thời gian này tại địa điểm đến. Thời gian phù hợp 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 số lô hàng và yêu cầu truy cập Một đối tượng chứa danh sách các cặp |
detour |
Thời gian đi đường vòng do các lô hàng được vận chuyển trên tuyến đường trước khi đến và thời gian chờ có thể tính theo khung thời gian. Nếu lượt ghé thăm là lượt giao hàng, thì quãng đường đi vòng sẽ được tính từ lượt ghé thăm đến lấy hàng tương ứng và bằng:
Nếu không, số liệu này sẽ được tính từ xe
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 " |
shipmentLabel |
Bản sao của |
visitLabel |
Bản sao của |
injectedSolutionLocationToken |
Mã thông báo mờ đại diện cho thông tin về vị trí lượt ghé thăm. Trường này có thể được điền vào các lượt truy cập của tuyến kết quả khi |
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ì các chỉ số tương ứng về hành trình sẽ là 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ố phân số, 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 lưu lượng truy cập qua |
delayDuration |
Tổng thời lượng độ trễ áp dụng cho quá trình chuyển đổi này. Nếu có, thời gian trễ sẽ bắt đầu đú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 " |
breakDuration |
Tổng thời lượng của các khoảng nghỉ 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 khoảng nghỉ được lưu trữ trong 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 " |
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 nhau. 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 " |
totalDuration |
Tổng thời lượng của quá trình 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, có 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ị bằng nhiều đường được mã hoá của tuyến đường đi theo trong quá trình chuyển đổi. Trường này chỉ được điền sẵn nếu bạn đặt |
vehicleLoads |
Số lượng xe trong quá trình chuyển đổi này, cho mỗi loại xuất hiện trong Các tải trong lần chuyển đổi đầu tiên là tải trọng bắt đầu trên tuyến đường của xe. Sau đó, sau mỗi lượt truy cập, Một đối tượng chứa danh sách các cặp |
EncodedPolyline
Đại diện đượ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 đườ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 đại diện cho việc thực thi một điểm ngắt.
Biểu diễn dưới dạng JSON |
---|
{ "startTime": string, "duration": string } |
Trường | |
---|---|
startTime |
Bắt đầu giờ nghỉ. 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 một khoảng nghỉ. 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 " |