차량의 경로는 다음과 같이 시간 축을 따라 분해될 수 있습니다 (n회의 방문이 있다고 가정).
| | | | | 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
다음 중 하나에 차이가 있습니다.
- 차량 시작 및 종료, 각 방문의 시작 및 종료 (일명 도착 및 출발) 등 '시간을 지키는 이벤트' 주어진 시간 내에 발생합니다.
- '시간 간격'(예: 방문 자체, 방문 간 전환) 시간 간격의 지속 시간은 0일 수 있지만(즉, 시작과 종료가 같은 초에 끝나기도 함) 대개는 양수입니다.
불변:
- 방문이 n이면 전환 수는 n+1입니다.
- 방문은 항상 그 이전의 전환 (같은 인덱스)과 그 다음의 전환 (색인 + 1)으로 둘러싸여 있습니다.
- 차량 시동 후에 항상 전환 #0이 나옵니다.
- 차량 끝 앞에는 항상 전환 #n이 옵니다.
확대하면 Transition
및 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
마지막으로 전환 중에 여행, 휴식, 지연, 대기를 설정하는 방법은 다음과 같습니다.
- 서로 겹치지 않습니다.
- DELAY(지연)는 고유하며 다음 방문(또는 차량 종료) 직전의 연속된 기간이어야 합니다. 따라서 지연 시간을 알면 시작 및 종료 시간을 알 수 있습니다.
- BREAK는 연속적이고 겹치지 않는 기간입니다. 응답은 각 광고 시점의 시작 시간과 지속 시간을 지정합니다.
- TRAVEL과 WAIT는 '선점 가능'하므로 이 전환 중에 여러 번 중단될 수 있습니다. 고객은 이동이 '최대한 빨리' 이루어지고 '대기'로 남은 시간이 채워질 것이라고 가정할 수 있습니다.
(복잡한) 예:
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 | | | | ||
|| | | | | | | ||
--++-----------------------------------------------------------------++-->
JSON 표현 |
---|
{ "vehicleIndex": integer, "vehicleLabel": string, "vehicleStartTime": string, "vehicleEndTime": string, "visits": [ { object ( |
입력란 | |
---|---|
vehicleIndex |
경로 수행 차량으로, 소스 |
vehicleLabel |
이 경로를 운행하는 차량의 라벨입니다(지정된 경우 |
vehicleStartTime |
차량이 경로를 시작하는 시간입니다. RFC3339 UTC 'Zulu' 형식의 타임스탬프입니다(나노초 단위, 소수점 이하 9자리). 예를 들면 |
vehicleEndTime |
차량이 경로를 끝내는 시간입니다. RFC3339 UTC 'Zulu' 형식의 타임스탬프입니다(나노초 단위, 소수점 이하 9자리). 예를 들면 |
visits[] |
경로를 나타내는 방문의 순서가 지정된 순서입니다. visit[i] 은 경로에서 i번째 방문입니다. 이 필드가 비어 있으면 차량이 사용되지 않은 것으로 간주됩니다. |
transitions[] |
경로의 순서가 지정된 전환 목록입니다. |
hasTrafficInfeasibilities |
교통량으로 인해 예상 이동 시간( |
routePolyline |
경로의 인코딩된 폴리라인 표현입니다. 이 필드는 |
breaks[] |
이 경로를 운행하는 차량의 중단이 예정되어 있습니다. |
metrics |
이 경로의 소요 시간, 거리, 부하 측정항목입니다. |
routeCosts |
경로의 비용으로, 비용 관련 요청 필드별로 분류됩니다. 키는 입력 OptimizationToursRequest를 기준으로 한 proto 경로(예: 'model.shipments.pickups.cost')이며 값은 해당 비용 필드에 의해 생성된 총 비용이며 전체 경로에 걸쳐 집계됩니다. 즉, 비용["model.shipments.pickups.cost"] 은 경로상에서 발생한 모든 수령 비용의 합계입니다. 2022년 1월 현재 집계 방식으로만 보고되는 TransitionAttributes와 관련된 비용을 제외하고 모델에 정의된 모든 비용은 여기에 자세히 보고됩니다.
|
routeTotalCost |
경로의 총비용입니다. 비용 맵에 표시된 모든 비용의 합계입니다. |
이동
경로 중간에 이루어진 방문입니다. 이 방문은 Shipment
의 수령 또는 배달에 해당합니다.
JSON 표현 |
---|
{
"shipmentIndex": integer,
"isPickup": boolean,
"visitRequestIndex": integer,
"startTime": string,
"loadDemands": {
string: {
object ( |
입력란 | |
---|---|
shipmentIndex |
소스 |
isPickup |
true인 경우 방문은 |
visitRequestIndex |
|
startTime |
방문이 시작되는 시간입니다. 차량이 이보다 앞서 방문 위치에 도착할 수 있습니다. 시간은 RFC3339 UTC 'Zulu' 형식의 타임스탬프입니다(나노초 단위, 소수점 이하 9자리). 예를 들면 |
loadDemands |
배송 및 방문 요청
|
detour |
방문 전에 경로에 있는 배송 물품과 시간대에 따라 발생할 수 있는 대기 시간으로 인해 추가적인 우회 시간이 발생합니다. 방문이 배달인 경우 해당 픽업 방문에서 우회로가 계산되며 다음과 같습니다.
그렇지 않으면 차량
소수점 아래가 최대 9자리까지이고 ' |
shipmentLabel |
상응하는 |
visitLabel |
상응하는 |
전환
경로에 있는 두 이벤트 간의 전환. ShipmentRoute
의 설명을 참고하세요.
차량에 startLocation
또는 endLocation
가 없으면 해당하는 이동 측정항목은 0입니다.
JSON 표현 |
---|
{ "travelDuration": string, "travelDistanceMeters": number, "trafficInfoUnavailable": boolean, "delayDuration": string, "breakDuration": string, "waitDuration": string, "totalDuration": string, "startTime": string, "routePolyline": { object ( |
입력란 | |
---|---|
travelDuration |
전환 기간의 이동 시간입니다. 소수점 아래가 최대 9자리까지이고 ' |
travelDistanceMeters |
전환 중에 이동한 거리입니다. |
trafficInfoUnavailable |
|
delayDuration |
이 전환에 적용된 지연 시간의 합계입니다. 지연이 있는 경우 다음 이벤트 (방문 또는 차량 종료)에서 정확히 소수점 아래가 최대 9자리까지이고 ' |
breakDuration |
전환 중에 발생하는 중단 시간의 합계입니다(있는 경우). 각 광고 시점의 시작 시간과 지속 시간에 관한 세부정보는 소수점 아래가 최대 9자리까지이고 ' |
waitDuration |
이 전환 중에 기다리는 데 소비한 시간입니다. 대기 시간은 유휴 시간에 해당하며 중단 시간은 포함되지 않습니다. 또한 이 대기 시간은 여러 개의 비연속 간격으로 분할될 수 있습니다. 소수점 아래가 최대 9자리까지이고 ' |
totalDuration |
총 전환 시간으로, 편의를 위해 제공됩니다. 다음과 같음:
소수점 아래가 최대 9자리까지이고 ' |
startTime |
이 전환의 시작 시간입니다. RFC3339 UTC 'Zulu' 형식의 타임스탬프입니다(나노초 단위, 소수점 이하 9자리). 예를 들면 |
routePolyline |
전환 중에 이어지는 경로의 인코딩된 폴리라인 표현입니다. 이 필드는 |
vehicleLoads |
전환 중 이 차량의 첫 번째 전환 중의 부하는 차량 경로의 시작 부하입니다. 그런 다음 각 방문 후 방문의
|
EncodedPolyline
폴리라인의 인코딩된 표현입니다. 다중선 인코딩에 대한 자세한 내용은 https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding에서 확인할 수 있습니다.
JSON 표현 |
---|
{ "points": string } |
입력란 | |
---|---|
points |
폴리라인의 인코딩된 점을 나타내는 문자열입니다. |
휴식 시간
광고 시점 실행을 나타내는 데이터입니다.
JSON 표현 |
---|
{ "startTime": string, "duration": string } |
입력란 | |
---|---|
startTime |
휴식 시작 시간입니다. RFC3339 UTC 'Zulu' 형식의 타임스탬프입니다(나노초 단위, 소수점 이하 9자리). 예를 들면 |
duration |
휴식 시간입니다. 소수점 아래가 최대 9자리까지이고 ' |