ShipmentRoute

차량의 경로는 다음과 같이 시간 축을 따라 분해될 수 있습니다 (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이 옵니다.

확대하면 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

마지막으로 전환 중에 여행, 휴식, 지연, 대기를 설정하는 방법은 다음과 같습니다.

  • 서로 겹치지 않습니다.
  • 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 (Visit)
    }
  ],
  "transitions": [
    {
      object (Transition)
    }
  ],
  "hasTrafficInfeasibilities": boolean,
  "routePolyline": {
    object (EncodedPolyline)
  },
  "breaks": [
    {
      object (Break)
    }
  ],
  "metrics": {
    object (AggregatedMetrics)
  },
  "routeCosts": {
    string: number,
    ...
  },
  "routeTotalCost": number
}
입력란
vehicleIndex

integer

경로 수행 차량으로, 소스 ShipmentModel의 색인으로 식별됩니다.

vehicleLabel

string

이 경로를 운행하는 차량의 라벨입니다(지정된 경우 ShipmentModel.vehicles(vehicleIndex).label).

vehicleStartTime

string (Timestamp format)

차량이 경로를 시작하는 시간입니다.

RFC3339 UTC 'Zulu' 형식의 타임스탬프입니다(나노초 단위, 소수점 이하 9자리). 예를 들면 "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"입니다.

vehicleEndTime

string (Timestamp format)

차량이 경로를 끝내는 시간입니다.

RFC3339 UTC 'Zulu' 형식의 타임스탬프입니다(나노초 단위, 소수점 이하 9자리). 예를 들면 "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"입니다.

visits[]

object (Visit)

경로를 나타내는 방문의 순서가 지정된 순서입니다. visit[i] 은 경로에서 i번째 방문입니다. 이 필드가 비어 있으면 차량이 사용되지 않은 것으로 간주됩니다.

transitions[]

object (Transition)

경로의 순서가 지정된 전환 목록입니다.

hasTrafficInfeasibilities

boolean

OptimizeToursRequest.consider_road_traffic를 true로 설정하면 이 필드는 교통정보에 기반한 이동 시간 추정치를 사용하여 경로 타이밍의 불일치가 예측됨을 나타냅니다. 방문 및 차량 운행 시간 조건을 만족하면서 방문 간, 첫 번째 방문 전 또는 마지막 방문 후에 교통상황에 따른 이동, 지연, 휴식 시간을 완료하기에는 시간이 부족할 수 있습니다. 예를 들면 다음과 같습니다.

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

교통량으로 인해 예상 이동 시간(travelDuration(previous_visit, next_visit))이 증가하여 next_visit에 현재 시간보다 늦게 도착할 가능성이 높습니다. 또한 예상 이동 시간 및 방문 또는 휴식 시간 제한의 증가로 인해 휴식 시간이 방문과 강제로 겹칠 수 있습니다.

routePolyline

object (EncodedPolyline)

경로의 인코딩된 폴리라인 표현입니다. 이 필드는 OptimizeToursRequest.populate_polylines가 true로 설정된 경우에만 채워집니다.

breaks[]

object (Break)

이 경로를 운행하는 차량의 중단이 예정되어 있습니다. breaks 시퀀스는 시간 간격을 나타내며, 각각 해당하는 startTime에서 시작하여 duration초 동안 지속됩니다.

metrics

object (AggregatedMetrics)

이 경로의 소요 시간, 거리, 부하 측정항목입니다. AggregatedMetrics의 필드는 컨텍스트에 따라 모든 ShipmentRoute.transitions 또는 ShipmentRoute.visits에서 합산됩니다.

routeCosts

map (key: string, value: number)

경로의 비용으로, 비용 관련 요청 필드별로 분류됩니다. 키는 입력 OptimizationToursRequest를 기준으로 한 proto 경로(예: 'model.shipments.pickups.cost')이며 값은 해당 비용 필드에 의해 생성된 총 비용이며 전체 경로에 걸쳐 집계됩니다. 즉, 비용["model.shipments.pickups.cost"] 은 경로상에서 발생한 모든 수령 비용의 합계입니다. 2022년 1월 현재 집계 방식으로만 보고되는 TransitionAttributes와 관련된 비용을 제외하고 모델에 정의된 모든 비용은 여기에 자세히 보고됩니다.

"key": value 쌍 목록을 포함하는 객체입니다. 예: { "name": "wrench", "mass": "1.3kg", "count": "3" }

routeTotalCost

number

경로의 총비용입니다. 비용 맵에 표시된 모든 비용의 합계입니다.

이동

경로 중간에 이루어진 방문입니다. 이 방문은 Shipment의 수령 또는 배달에 해당합니다.

JSON 표현
{
  "shipmentIndex": integer,
  "isPickup": boolean,
  "visitRequestIndex": integer,
  "startTime": string,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "detour": string,
  "shipmentLabel": string,
  "visitLabel": string
}
입력란
shipmentIndex

integer

소스 ShipmentModel에 있는 shipments 필드의 색인입니다.

isPickup

boolean

true인 경우 방문은 Shipment의 수령에 해당합니다. 그렇지 않으면 게재에 해당합니다.

visitRequestIndex

integer

Shipment의 수령 또는 배달 필드에 있는 VisitRequest의 색인입니다 (isPickup 참고).

startTime

string (Timestamp format)

방문이 시작되는 시간입니다. 차량이 이보다 앞서 방문 위치에 도착할 수 있습니다. 시간은 ShipmentModel을 따릅니다.

RFC3339 UTC 'Zulu' 형식의 타임스탬프입니다(나노초 단위, 소수점 이하 9자리). 예를 들면 "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"입니다.

loadDemands

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

배송 및 방문 요청 loadDemands의 합계에 대한 총 방문 수 수요입니다. 방문이 배달인 경우 값은 음수입니다. 수요는 Transition.loads와 동일한 유형에 보고됩니다 (이 필드 참고).

"key": value 쌍 목록을 포함하는 객체입니다. 예: { "name": "wrench", "mass": "1.3kg", "count": "3" }

detour

string (Duration format)

방문 전에 경로에 있는 배송 물품과 시간대에 따라 발생할 수 있는 대기 시간으로 인해 추가적인 우회 시간이 발생합니다. 방문이 배달인 경우 해당 픽업 방문에서 우회로가 계산되며 다음과 같습니다.

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

그렇지 않으면 차량 startLocation에서 계산되며 다음과 같습니다.

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

소수점 아래가 최대 9자리까지이고 's'로 끝나는 초 단위 기간입니다. 예를 들면 "3.5s"입니다.

shipmentLabel

string

상응하는 Shipment.label의 사본입니다(Shipment에 지정된 경우).

visitLabel

string

상응하는 VisitRequest.label의 사본입니다(VisitRequest에 지정된 경우).

전환

경로에 있는 두 이벤트 간의 전환. ShipmentRoute의 설명을 참고하세요.

차량에 startLocation 또는 endLocation가 없으면 해당하는 이동 측정항목은 0입니다.

JSON 표현
{
  "travelDuration": string,
  "travelDistanceMeters": number,
  "trafficInfoUnavailable": boolean,
  "delayDuration": string,
  "breakDuration": string,
  "waitDuration": string,
  "totalDuration": string,
  "startTime": string,
  "routePolyline": {
    object (EncodedPolyline)
  },
  "vehicleLoads": {
    string: {
      object (VehicleLoad)
    },
    ...
  }
}
입력란
travelDuration

string (Duration format)

전환 기간의 이동 시간입니다.

소수점 아래가 최대 9자리까지이고 's'로 끝나는 초 단위 기간입니다. 예를 들면 "3.5s"입니다.

travelDistanceMeters

number

전환 중에 이동한 거리입니다.

trafficInfoUnavailable

boolean

OptimizeToursRequest.consider_road_traffic를 통해 트래픽이 요청되고 Transition의 교통정보를 가져올 수 없는 경우 이 불리언이 true로 설정됩니다. 일시적인 문제 (실시간 트래픽 서버에서 드물게 발생하는 문제)이거나 영구적인 문제 (이 위치에 대한 데이터 없음)일 수 있습니다.

delayDuration

string (Duration format)

이 전환에 적용된 지연 시간의 합계입니다. 지연이 있는 경우 다음 이벤트 (방문 또는 차량 종료)에서 정확히 delayDuration초 전에 지연이 시작됩니다. TransitionAttributes.delay 페이지를 참고하세요.

소수점 아래가 최대 9자리까지이고 's'로 끝나는 초 단위 기간입니다. 예를 들면 "3.5s"입니다.

breakDuration

string (Duration format)

전환 중에 발생하는 중단 시간의 합계입니다(있는 경우). 각 광고 시점의 시작 시간과 지속 시간에 관한 세부정보는 ShipmentRoute.breaks에 저장됩니다.

소수점 아래가 최대 9자리까지이고 's'로 끝나는 초 단위 기간입니다. 예를 들면 "3.5s"입니다.

waitDuration

string (Duration format)

이 전환 중에 기다리는 데 소비한 시간입니다. 대기 시간은 유휴 시간에 해당하며 중단 시간은 포함되지 않습니다. 또한 이 대기 시간은 여러 개의 비연속 간격으로 분할될 수 있습니다.

소수점 아래가 최대 9자리까지이고 's'로 끝나는 초 단위 기간입니다. 예를 들면 "3.5s"입니다.

totalDuration

string (Duration format)

총 전환 시간으로, 편의를 위해 제공됩니다. 다음과 같음:

  • 다음 방문 startTime (또는 마지막 전환인 경우 vehicleEndTime) - 이 전환의 startTime
  • ShipmentRoute.has_traffic_infeasibilities가 false인 경우 `totalDuration = travelDuration +모든 지연 시간}가 추가로 유지됩니다.
  • breakDuration + waitDuration`입니다.

소수점 아래가 최대 9자리까지이고 's'로 끝나는 초 단위 기간입니다. 예를 들면 "3.5s"입니다.

startTime

string (Timestamp format)

이 전환의 시작 시간입니다.

RFC3339 UTC 'Zulu' 형식의 타임스탬프입니다(나노초 단위, 소수점 이하 9자리). 예를 들면 "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"입니다.

routePolyline

object (EncodedPolyline)

전환 중에 이어지는 경로의 인코딩된 폴리라인 표현입니다. 이 필드는 populateTransitionPolylines가 true로 설정된 경우에만 채워집니다.

vehicleLoads

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

전환 중 이 차량의 Vehicle.load_limits에 표시되거나 이 경로에서 일부 배송에 0이 아닌 Shipment.load_demands이 있는 각 유형의 차량 수

첫 번째 전환 중의 부하는 차량 경로의 시작 부하입니다. 그런 다음 각 방문 후 방문의 loadDemands를 더하거나 빼서 방문이 방문이 수령인지 배달인지에 따라 다음 전환의 로드를 가져옵니다.

"key": value 쌍 목록을 포함하는 객체입니다. 예: { "name": "wrench", "mass": "1.3kg", "count": "3" }

EncodedPolyline

폴리라인의 인코딩된 표현입니다. 다중선 인코딩에 대한 자세한 내용은 https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding에서 확인할 수 있습니다.

JSON 표현
{
  "points": string
}
입력란
points

string

폴리라인의 인코딩된 점을 나타내는 문자열입니다.

휴식 시간

광고 시점 실행을 나타내는 데이터입니다.

JSON 표현
{
  "startTime": string,
  "duration": string
}
입력란
startTime

string (Timestamp format)

휴식 시작 시간입니다.

RFC3339 UTC 'Zulu' 형식의 타임스탬프입니다(나노초 단위, 소수점 이하 9자리). 예를 들면 "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"입니다.

duration

string (Duration format)

휴식 시간입니다.

소수점 아래가 최대 9자리까지이고 's'로 끝나는 초 단위 기간입니다. 예를 들면 "3.5s"입니다.