ShipmentModel

배송 모델에는 차량 세트에서 수행해야 하는 배송 세트가 포함되며, 전체 비용을 최소화합니다. 전체 비용은 다음의 합계입니다.

  • 차량 경로 지정 비용 (총 시간당 비용, 이동 시간당 비용, 모든 차량의 고정 비용의 합계)
  • 미이행 배송 페널티를 부과할 수 있습니다.
  • 배송의 전체 기간 비용
JSON 표현
{
  "shipments": [
    {
      object (Shipment)
    }
  ],
  "vehicles": [
    {
      object (Vehicle)
    }
  ],
  "objectives": [
    {
      object (Objective)
    }
  ],
  "globalStartTime": string,
  "globalEndTime": string,
  "globalDurationCostPerHour": number,
  "durationDistanceMatrices": [
    {
      object (DurationDistanceMatrix)
    }
  ],
  "durationDistanceMatrixSrcTags": [
    string
  ],
  "durationDistanceMatrixDstTags": [
    string
  ],
  "transitionAttributes": [
    {
      object (TransitionAttributes)
    }
  ],
  "shipmentTypeIncompatibilities": [
    {
      object (ShipmentTypeIncompatibility)
    }
  ],
  "shipmentTypeRequirements": [
    {
      object (ShipmentTypeRequirement)
    }
  ],
  "precedenceRules": [
    {
      object (PrecedenceRule)
    }
  ],
  "maxActiveVehicles": integer
}
필드
shipments[]

object (Shipment)

모델에서 수행해야 하는 배송 집합입니다.

vehicles[]

object (Vehicle)

방문을 수행하는 데 사용할 수 있는 차량 집합입니다.

objectives[]

object (Objective)

비용으로 변환할 이 모델의 목표 집합입니다. 비어 있지 않은 경우 입력 모델은 비용이 들지 않아야 합니다. 수정된 요청을 가져오려면 solvingMode = TRANSFORM_AND_RETURN_REQUEST를 사용하세요. 이 경우 요청이 해결되지 않습니다. 해당 문서를 참고하세요.

실험용: 자세한 내용은 https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request를 참고하세요.

globalStartTime

string (Timestamp format)

모델의 전역 시작 및 종료 시간: 이 범위를 벗어나는 시간은 유효한 것으로 간주되지 않습니다.

모델의 기간은 1년 미만이어야 합니다. 즉, globalEndTime 및 globalStartTime는 서로 31,536,000초 이내여야 합니다.

cost_per_*hour 필드를 사용할 때는 성능을 높이기 위해 이 기간을 더 짧은 간격으로 설정하는 것이 좋습니다 (예: 하루를 모델링하는 경우 전역 시간 제한을 해당 날짜로 설정해야 함). 설정하지 않으면 1970년 1월 1일 00:00:00 UTC (즉, 초: 0, 나노초: 0)가 기본값으로 사용됩니다.

생성된 출력은 항상 Z-정규화되고 소수점 이하 0, 3, 6 또는 9자리인 RFC 3339를 사용합니다. 'Z' 이외의 오프셋도 허용됩니다. 예를 들면 "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" 또는 "2014-10-02T15:01:23+05:30"입니다.

globalEndTime

string (Timestamp format)

설정하지 않으면 1971년 1월 1일 00:00:00 UTC (즉, 초: 31536000, 나노초: 0)가 기본값으로 사용됩니다.

생성된 출력은 항상 Z-정규화되고 소수점 이하 0, 3, 6 또는 9자리인 RFC 3339를 사용합니다. 'Z' 이외의 오프셋도 허용됩니다. 예를 들면 "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" 또는 "2014-10-02T15:01:23+05:30"입니다.

globalDurationCostPerHour

number

전체 계획의 '전체 기간'은 모든 차량의 가장 이른 유효 시작 시간과 가장 늦은 유효 종료 시간의 차이입니다. 예를 들어 사용자는 해당 수량에 시간당 비용을 할당하여 가장 빠른 작업 완료를 위해 최적화할 수 있습니다. 이 비용은 Shipment.penalty_cost과 동일한 단위여야 합니다.

durationDistanceMatrices[]

object (DurationDistanceMatrix)

모델에 사용되는 소요 시간 및 거리 행렬을 지정합니다. 이 필드가 비어 있으면 useGeodesicDistances 필드의 값에 따라 Google 지도 또는 측지 거리가 대신 사용됩니다. 비어 있지 않으면 useGeodesicDistances은 true일 수 없으며 durationDistanceMatrixSrcTags 및 durationDistanceMatrixDstTags는 비어 있을 수 없습니다.

사용 예시:

  • locA와 locB라는 두 위치가 있습니다.
  • locA에서 경로를 시작하고 locA에서 종료하는 차량 1대
  • locB에서 수거 방문 요청 1건
model {
  vehicles { startTags: "locA"  endTags: "locA" }
  shipments { pickups { tags: "locB" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixDstTags: "locA"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrices {
    rows {  # from: locA
      durations { seconds: 0 }   meters: 0    # to: locA
      durations { seconds: 100 } meters: 1000 # to: locB
    }
    rows {  # from: locB
      durations { seconds: 102 } meters: 990 # to: locA
      durations { seconds: 0 }   meters: 0   # to: locB
    }
  }
}
  • locA, locB, locC의 세 위치가 있습니다.
  • locA에서 경로를 시작하고 locB에서 종료하는 차량 1대, 'fast' 행렬 사용
  • locB에서 경로를 시작하고 locB에서 종료하는 차량 1대('slow' 행렬 사용)
  • locB에서 경로를 시작하고 locB에서 종료하는 차량 1대, 'fast' 행렬 사용
  • locC에서 수거 방문 요청 1건
model {
  vehicles { startTags: "locA" endTags: "locB" startTags: "fast" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "slow" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "fast" }
  shipments { pickups { tags: "locC" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixSrcTags: "locC"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrixDstTags: "locC"
  durationDistanceMatrices {
    vehicleStartTag: "fast"
    rows {  # from: locA
      durations { seconds: 1000 } meters: 2000 # to: locB
      durations { seconds: 600 }  meters: 1000 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }   meters: 0    # to: locB
      durations { seconds: 700 } meters: 1200 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 702 } meters: 1190 # to: locB
      durations { seconds: 0 }   meters: 0    # to: locC
    }
  }
  durationDistanceMatrices {
    vehicleStartTag: "slow"
    rows {  # from: locA
      durations { seconds: 1800 } meters: 2001 # to: locB
      durations { seconds: 900 }  meters: 1002 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }    meters: 0    # to: locB
      durations { seconds: 1000 } meters: 1202 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 1001 } meters: 1195 # to: locB
      durations { seconds: 0 }    meters: 0    # to: locC
    }
  }
}
durationDistanceMatrixSrcTags[]

string

소요 시간 및 거리 행렬의 소스를 정의하는 태그입니다. durationDistanceMatrices(i).rows(j)는 태그 durationDistanceMatrixSrcTags(j)가 있는 방문에서 행렬 i의 다른 방문까지의 소요 시간과 거리를 정의합니다.

태그는 VisitRequest.tags 또는 Vehicle.start_tags에 해당합니다. 지정된 VisitRequest 또는 Vehicle는 이 필드의 태그 하나와 정확히 일치해야 합니다. Vehicle의 소스, 대상, 매트릭스 태그는 동일할 수 있습니다. 마찬가지로 VisitRequest의 소스 및 대상 태그도 동일할 수 있습니다. 모든 태그는 서로 달라야 하며 빈 문자열일 수 없습니다. 이 필드가 비어 있지 않으면 durationDistanceMatrices가 비어 있지 않아야 합니다.

durationDistanceMatrixDstTags[]

string

소요 시간 및 거리 행렬의 목적지를 정의하는 태그입니다. durationDistanceMatrices(i).rows(j).durations(k) (각각 durationDistanceMatrices(i).rows(j).meters(k))는 행렬 i에서 태그 durationDistanceMatrixSrcTags(j)가 있는 방문에서 태그 durationDistanceMatrixDstTags(k)가 있는 방문까지의 이동 시간 (또는 거리)을 정의합니다.

태그는 VisitRequest.tags 또는 Vehicle.start_tags에 해당합니다. 지정된 VisitRequest 또는 Vehicle는 이 필드의 태그 하나와 정확히 일치해야 합니다. Vehicle의 소스, 대상, 매트릭스 태그는 동일할 수 있습니다. 마찬가지로 VisitRequest의 소스 및 대상 태그도 동일할 수 있습니다. 모든 태그는 서로 달라야 하며 빈 문자열일 수 없습니다. 이 필드가 비어 있지 않으면 durationDistanceMatrices가 비어 있지 않아야 합니다.

transitionAttributes[]

object (TransitionAttributes)

모델에 전환 속성이 추가되었습니다.

shipmentTypeIncompatibilities[]

object (ShipmentTypeIncompatibility)

호환되지 않는 shipment_types 집합(ShipmentTypeIncompatibility 참고)

shipmentTypeRequirements[]

object (ShipmentTypeRequirement)

shipmentType 요구사항 집합(ShipmentTypeRequirement 참고)

precedenceRules[]

object (PrecedenceRule)

모델에서 적용해야 하는 우선순위 규칙 집합입니다.

중요: 우선순위 규칙을 사용하면 최적화할 수 있는 문제의 크기가 제한됩니다. 많은 배송이 포함된 우선순위 규칙을 사용하는 요청은 거부될 수 있습니다.

maxActiveVehicles

integer

활성 차량의 최대 수를 제한합니다. 경로에서 배송을 하나 이상 수행하는 경우 차량이 활성 상태입니다. 이는 운전자 수가 차량 수보다 적고 차량이 이기종인 경우 경로 수를 제한하는 데 사용할 수 있습니다. 그러면 최적화에서 사용할 최적의 차량 하위 집합을 선택합니다. 양수여야 합니다.

배송

단일 상품의 배송으로, 수령 중 하나에서 배송 중 하나까지입니다. 배송이 수행된 것으로 간주되려면 고유 차량이 수령 위치 중 하나를 방문하고 (이에 따라 예비 용량을 줄임) 나중에 배송 위치 중 하나를 방문해야 합니다 (이에 따라 예비 용량을 다시 늘림).

JSON 표현
{
  "displayName": string,
  "pickups": [
    {
      object (VisitRequest)
    }
  ],
  "deliveries": [
    {
      object (VisitRequest)
    }
  ],
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "allowedVehicleIndices": [
    integer
  ],
  "costsPerVehicle": [
    number
  ],
  "costsPerVehicleIndices": [
    integer
  ],
  "pickupToDeliveryAbsoluteDetourLimit": string,
  "pickupToDeliveryTimeLimit": string,
  "shipmentType": string,
  "label": string,
  "ignore": boolean,
  "penaltyCost": number,
  "pickupToDeliveryRelativeDetourLimit": number
}
필드
displayName

string

사용자가 정의한 배송의 표시 이름입니다. 최대 길이는 63자(영문 기준)이며 UTF-8 문자를 사용할 수 있습니다.

pickups[]

object (VisitRequest)

배송과 연결된 수령 대안 집합입니다. 지정하지 않으면 차량은 배송에 해당하는 위치만 방문하면 됩니다.

deliveries[]

object (VisitRequest)

배송과 연결된 배송 대안 집합입니다. 지정하지 않으면 차량은 수령에 해당하는 위치만 방문하면 됩니다.

loadDemands

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

배송의 적재 요구사항 (예: 중량, 부피, 팔레트 수 등) 맵의 키는 해당 부하의 유형을 설명하는 식별자여야 하며, 이상적으로는 단위도 포함해야 합니다. 예를 들어 'weight_kg', 'volume_gallons', 'pallet_count' 등이 있습니다. 지정된 키가 맵에 표시되지 않으면 해당 부하는 null로 간주됩니다.

allowedVehicleIndices[]

integer

이 배송을 수행할 수 있는 차량 집합입니다. 비어 있으면 모든 차량이 수행할 수 있습니다. 차량은 ShipmentModel의 vehicles 목록에 있는 색인으로 지정됩니다.

costsPerVehicle[]

number

각 차량에서 이 배송을 배송할 때 발생하는 비용을 지정합니다. 지정된 경우 다음 중 하나를 포함해야 합니다.

  • costsPerVehicleIndices와 동일한 수의 요소가 있습니다. costsPerVehicle[i]는 모델의 차량 costsPerVehicleIndices[i]에 해당합니다.
  • 모델의 차량 수와 동일한 수의 요소가 있어야 합니다. i번째 요소는 모델의 차량 #i에 해당합니다.

이러한 비용은 penaltyCost와 동일한 단위여야 하며 음수가 아니어야 합니다. 이러한 비용이 없는 경우 이 입력란을 비워 둡니다.

costsPerVehicleIndices[]

integer

costsPerVehicle이 적용되는 차량의 색인입니다. 비어 있지 않은 경우 요소 수가 costsPerVehicle와 같아야 합니다. 차량 색인은 두 번 이상 지정할 수 없습니다. 차량이 costsPerVehicleIndices에서 제외되면 비용은 0입니다.

pickupToDeliveryAbsoluteDetourLimit

string (Duration format)

픽업에서 배송까지의 최단 경로와 비교하여 최대 절대 우회 시간을 지정합니다. 지정된 경우 음수가 아니어야 하며 배송에는 최소한 수령 및 배송이 포함되어야 합니다.

예를 들어 t를 선택한 수령 대안에서 선택한 배송 대안으로 직접 이동하는 데 걸리는 최단 시간이라고 가정해 보겠습니다. 그러면 pickupToDeliveryAbsoluteDetourLimit 설정이 다음을 적용합니다.

startTime(delivery) - startTime(pickup) <=
t + pickupToDeliveryAbsoluteDetourLimit

동일한 배송에 상대적 한도와 절대적 한도가 모두 지정된 경우 가능한 각 수령/배송 쌍에 더 제한적인 한도가 사용됩니다. 2017년 10월 현재 우회는 이동 시간이 차량에 따라 달라지지 않는 경우에만 지원됩니다.

pickupToDeliveryTimeLimit

string (Duration format)

배송 상품의 수령 시작부터 배송 시작까지의 최대 기간을 지정합니다. 지정된 경우 음수가 아니어야 하며 배송에는 최소한 수령 및 배송이 포함되어야 합니다. 이는 수령 및 배송에 선택된 대안이나 차량 속도에 따라 달라지지 않습니다. 이는 최대 우회 제약조건과 함께 지정할 수 있으며, 솔루션은 두 사양을 모두 준수합니다.

shipmentType

string

이 배송의 '유형'을 지정하는 비어 있지 않은 문자열입니다. 이 기능을 사용하여 shipment_types 간의 비호환성 또는 요구사항을 정의할 수 있습니다(ShipmentModel의 shipmentTypeIncompatibilities 및 shipmentTypeRequirements 참고).

단일 방문에 지정된 visitTypes와 다릅니다. 동일한 배송에 속하는 모든 수령/배송은 동일한 shipmentType를 공유합니다.

label

string

이 배송의 라벨을 지정합니다. 이 라벨은 해당 ShipmentRoute.Visit의 shipmentLabel에 있는 응답에 보고됩니다.

ignore

boolean

true인 경우 이 배송을 건너뛰지만 penaltyCost을 적용하지 않습니다.

모델에 shipmentTypeRequirements가 있는 경우 배송을 무시하면 검증 오류가 발생합니다.

injectedFirstSolutionRoutes 또는 injectedSolutionConstraint에서 수행되는 배송을 무시할 수 있습니다. 솔버는 수행 경로에서 관련 픽업/배송 방문을 삭제합니다. 무시된 배송을 참조하는 precedenceRules도 무시됩니다.

penaltyCost

number

배송이 완료되지 않으면 이 페널티가 경로의 전체 비용에 추가됩니다. 배송은 수령 및 배송 대안 중 하나를 방문하면 완료된 것으로 간주됩니다. 비용은 모델의 다른 모든 비용 관련 필드에 사용되는 것과 동일한 단위로 표시될 수 있으며 양수여야 합니다.

중요: 이 페널티를 지정하지 않으면 무한으로 간주됩니다. 즉, 배송을 완료해야 합니다.

pickupToDeliveryRelativeDetourLimit

number

인수에서 배송까지의 최단 경로와 비교한 최대 상대 우회 시간을 지정합니다. 지정된 경우 음수가 아니어야 하며 배송에는 최소한 수령 및 배송이 포함되어야 합니다.

예를 들어 t를 선택한 수령 대안에서 선택한 배송 대안으로 직접 이동하는 데 걸리는 최단 시간이라고 가정해 보겠습니다. 그러면 pickupToDeliveryRelativeDetourLimit 설정이 다음을 적용합니다.

startTime(delivery) - startTime(pickup) <=
std::ceil(t * (1.0 + pickupToDeliveryRelativeDetourLimit))

동일한 배송에 상대적 한도와 절대적 한도가 모두 지정된 경우 가능한 각 수령/배송 쌍에 더 제한적인 한도가 사용됩니다. 2017년 10월 현재 우회는 이동 시간이 차량에 따라 달라지지 않는 경우에만 지원됩니다.

VisitRequest

차량으로 수행할 수 있는 방문 요청: 지리적 위치 (또는 2개, 아래 참고), 시간대로 표시되는 영업시간 및 마감 시간, 서비스 기간 (차량이 상품을 수령하거나 하차하기 위해 도착한 후 소요되는 시간)이 있습니다.

JSON 표현
{
  "arrivalLocation": {
    object (LatLng)
  },
  "arrivalWaypoint": {
    object (Waypoint)
  },
  "departureLocation": {
    object (LatLng)
  },
  "departureWaypoint": {
    object (Waypoint)
  },
  "tags": [
    string
  ],
  "timeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "duration": string,
  "cost": number,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "visitTypes": [
    string
  ],
  "label": string,
  "avoidUTurns": boolean
}
필드
arrivalLocation

object (LatLng)

이 VisitRequest를 수행할 때 차량이 도착하는 지리적 위치입니다. 배송 모델에 기간 거리 행렬이 있는 경우 arrivalLocation을 지정하면 안 됩니다.

arrivalWaypoint

object (Waypoint)

이 VisitRequest을 수행할 때 차량이 도착하는 경유지입니다. 배송 모델에 기간 거리 행렬이 있는 경우 arrivalWaypoint을 지정하면 안 됩니다.

departureLocation

object (LatLng)

이 VisitRequest를 완료한 후 차량이 출발하는 지리적 위치입니다. arrivalLocation과 동일한 경우 생략할 수 있습니다. 배송 모델에 기간 거리 행렬이 있는 경우 departureLocation을 지정하면 안 됩니다.

departureWaypoint

object (Waypoint)

이 VisitRequest를 완료한 후 차량이 출발하는 경유지입니다. arrivalWaypoint과 동일한 경우 생략할 수 있습니다. 배송 모델에 기간 거리 행렬이 있는 경우 departureWaypoint을 지정하면 안 됩니다.

tags[]

string

방문 요청에 연결된 태그를 지정합니다. 비어 있거나 중복된 문자열은 허용되지 않습니다.

timeWindows[]

object (TimeWindow)

방문 시 도착 시간을 제한하는 기간입니다. 차량은 도착 시간대 외에 출발할 수 있습니다. 즉, 도착 시간과 소요 시간의 합이 시간대 내에 있을 필요는 없습니다. 이로 인해 차량이 TimeWindow.start_time 전에 도착하면 대기 시간이 발생할 수 있습니다.

TimeWindow가 없으면 차량이 언제든지 이 방문을 수행할 수 있습니다.

기간은 분리되어야 합니다. 즉, 기간이 다른 기간과 겹치거나 인접해서는 안 되며 오름차순이어야 합니다.

costPerHourAfterSoftEndTime 및 softEndTime는 기간이 하나인 경우에만 설정할 수 있습니다.

duration

string (Duration format)

방문 시간, 즉 차량이 도착과 출발 사이에 소비한 시간입니다 (가능한 대기 시간에 추가됨, timeWindows 참고).

cost

number

차량 경로에서 이 방문 요청을 처리하는 데 드는 비용입니다. 이 속성은 배송 상품의 대체 수령 또는 배송마다 다른 비용을 지불하는 데 사용할 수 있습니다. 이 비용은 Shipment.penalty_cost와 동일한 단위여야 하며 음수여서는 안 됩니다.

loadDemands

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

이 방문 요청의 부하 수요입니다. 이는 Shipment.load_demands 필드와 동일하지만 전체 Shipment가 아닌 이 VisitRequest에만 적용됩니다. 여기에 나열된 요구사항은 Shipment.load_demands에 나열된 요구사항에 추가됩니다.

visitTypes[]

string

방문 유형을 지정합니다. 차량이 이 방문을 완료하는 데 필요한 추가 시간을 할당하는 데 사용할 수 있습니다(Vehicle.extra_visit_duration_for_visit_type 참고).

유형은 한 번만 표시될 수 있습니다.

label

string

이 VisitRequest의 라벨을 지정합니다. 이 라벨은 응답에서 해당 ShipmentRoute.Visit의 visitLabel로 보고됩니다.

avoidUTurns

boolean

이 위치의 운전 경로에서 유턴을 피해야 하는지 지정합니다. U턴 회피는 최선의 노력으로 이루어지며 완전한 회피는 보장되지 않습니다. 이 기능은 실험용이며 동작은 변경될 수 있습니다.

실험용: 자세한 내용은 https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request를 참고하세요.

LatLng

위도/경도 쌍을 나타내는 객체로 위도(도)와 경도(도)를 나타내는 double의 쌍으로 표현됩니다. 달리 명시되지 않는 한 이 객체는 WGS84 표준을 준수해야 합니다. 값은 정규화된 범위 내에 있어야 합니다.

JSON 표현
{
  "latitude": number,
  "longitude": number
}
필드
latitude

number

위도입니다. 범위는 [-90.0, +90.0]입니다.

longitude

number

경도입니다. 범위는 [-180.0, +180.0]입니다.

경유지

경유지를 캡슐화합니다. 경유지는 VisitRequest의 도착 및 출발 위치와 차량의 시작 및 종료 위치를 표시합니다.

JSON 표현
{
  "sideOfRoad": boolean,
  "vehicleStopover": boolean,

  // The following is a list of mutually exclusive fields. At most one of the
  // fields will be set in a response:
  "location": {
    object (Location)
  },
  "placeId": string
  // End of mutually exclusive fields.
}
필드
sideOfRoad

boolean

선택사항입니다. 이 경유지의 위치가 차량이 도로의 특정 측면에 정차하는 것을 선호함을 나타냅니다. 이 값을 설정하면 경로가 위치를 통과하므로 차량이 도로 중앙에서 위치가 치우친 도로변에 정차할 수 있습니다. 이 옵션은 'WALKING' 이동 수단에는 작동하지 않습니다.

vehicleStopover

boolean

차량이 승차 또는 하차를 위해 정차하는 경유지임을 나타냅니다. 이 옵션은 'DRIVING' 이동 수단에만 적용되며 'locationType'이 'location'인 경우에만 작동합니다.

실험용: 이 필드의 동작 또는 존재 여부는 향후 변경될 수 있습니다.

위치를 나타내는 다양한 방법 다음은 상호 배타적인 필드 목록입니다. 응답에서 최대 하나의 필드가 설정됩니다.
location

object (Location)

지리적 좌표를 사용하여 지정된 지점이며, 선택적으로 방향을 포함합니다.

placeId

string

경유지와 연결된 관심 장소 ID입니다.

장소 ID를 사용하여 VisitRequest의 도착 또는 출발 위치를 지정할 때는 장소로 이동하기 위한 LatLng 위치를 결정할 수 있을 만큼 구체적인 장소 ID를 사용하세요. 예를 들어 건물을 나타내는 장소 ID는 적합하지만 도로를 나타내는 장소 ID는 사용하지 않는 것이 좋습니다.

상호 배타적 필드의 끝입니다.

위치

위치 (지리적 지점 및 선택적 방향)를 캡슐화합니다.

JSON 표현
{
  "latLng": {
    object (LatLng)
  },
  "heading": integer
}
필드
latLng

object (LatLng)

경유지의 지리적 좌표입니다.

heading

integer

교통 흐름의 방향과 연결된 나침반 방향입니다. 이 값은 승차 및 하차에 사용할 도로의 측면을 지정하는 데 사용됩니다. 방향 값은 0에서 360까지일 수 있으며, 여기서 0은 정북 방향, 90은 정동 방향 등을 지정합니다.

TimeWindow

기간은 방문 시 도착 시간 또는 차량의 시작 및 종료 시간과 같은 이벤트 시간을 제한합니다.

엄격한 시간대 경계인 startTime 및 endTime는 이벤트의 가장 이른 시간과 가장 늦은 시간을 적용하므로 startTime <= event_time <= endTime입니다. 소프트 시간대 하한인 softStartTime는 softStartTime 이전에 이벤트가 발생하는 시간에 비례하여 비용을 발생시켜 softStartTime 이후에 이벤트가 발생하는 것을 선호함을 나타냅니다. 소프트 시간대 상한인 softEndTime는 이벤트가 softEndTime 이후에 발생하는 시간에 비례하여 비용을 발생시켜 이벤트가 softEndTime 또는 그 이전에 발생하는 것을 선호함을 나타냅니다. startTime, endTime, softStartTime, softEndTime는 전역 시간 제한(ShipmentModel.global_start_time 및 ShipmentModel.global_end_time 참고) 내에 있어야 하며 다음을 준수해야 합니다.

  0 <= `startTime` <= `endTime` and
  0 <= `startTime` <= `softStartTime` and
  0 <= `softEndTime` <= `endTime`.
JSON 표현
{
  "startTime": string,
  "endTime": string,
  "softStartTime": string,
  "softEndTime": string,
  "costPerHourBeforeSoftStartTime": number,
  "costPerHourAfterSoftEndTime": number
}
필드
startTime

string (Timestamp format)

엄격한 시간대 시작 시간입니다. 지정하지 않으면 ShipmentModel.global_start_time로 설정됩니다.

생성된 출력은 항상 Z-정규화되고 소수점 이하 0, 3, 6 또는 9자리인 RFC 3339를 사용합니다. 'Z' 이외의 오프셋도 허용됩니다. 예를 들면 "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" 또는 "2014-10-02T15:01:23+05:30"입니다.

endTime

string (Timestamp format)

엄격한 시간대 종료 시간입니다. 지정하지 않으면 ShipmentModel.global_end_time로 설정됩니다.

생성된 출력은 항상 Z-정규화되고 소수점 이하 0, 3, 6 또는 9자리인 RFC 3339를 사용합니다. 'Z' 이외의 오프셋도 허용됩니다. 예를 들면 "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" 또는 "2014-10-02T15:01:23+05:30"입니다.

softStartTime

string (Timestamp format)

기간의 소프트 시작 시간입니다.

생성된 출력은 항상 Z-정규화되고 소수점 이하 0, 3, 6 또는 9자리인 RFC 3339를 사용합니다. 'Z' 이외의 오프셋도 허용됩니다. 예를 들면 "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" 또는 "2014-10-02T15:01:23+05:30"입니다.

softEndTime

string (Timestamp format)

기간의 소프트 종료 시간입니다.

생성된 출력은 항상 Z-정규화되고 소수점 이하 0, 3, 6 또는 9자리인 RFC 3339를 사용합니다. 'Z' 이외의 오프셋도 허용됩니다. 예를 들면 "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" 또는 "2014-10-02T15:01:23+05:30"입니다.

costPerHourBeforeSoftStartTime

number

이벤트가 softStartTime 전에 발생하는 경우 모델의 다른 비용에 추가되는 시간당 비용으로, 다음과 같이 계산됩니다.

   max(0, softStartTime - t.seconds)
                          * costPerHourBeforeSoftStartTime / 3600,
t being the time of the event.

이 비용은 양수여야 하며 softStartTime이 설정된 경우에만 이 필드를 설정할 수 있습니다.

costPerHourAfterSoftEndTime

number

이벤트가 softEndTime 이후에 발생하는 경우 모델의 다른 비용에 추가되는 시간당 비용으로, 다음과 같이 계산됩니다.

   max(0, t.seconds - softEndTime.seconds)
                    * costPerHourAfterSoftEndTime / 3600,
t being the time of the event.

이 비용은 양수여야 하며 softEndTime가 설정된 경우에만 필드를 설정할 수 있습니다.

차량

배송 문제에서 차량을 모델링합니다. 배송 문제를 해결하면 이 차량의 startLocation에서 시작하여 endLocation에서 끝나는 경로가 빌드됩니다. 경로는 일련의 방문입니다(ShipmentRoute 참고).

JSON 표현
{
  "displayName": string,
  "travelMode": enum (TravelMode),
  "routeModifiers": {
    object (RouteModifiers)
  },
  "startLocation": {
    object (LatLng)
  },
  "startWaypoint": {
    object (Waypoint)
  },
  "endLocation": {
    object (LatLng)
  },
  "endWaypoint": {
    object (Waypoint)
  },
  "startTags": [
    string
  ],
  "endTags": [
    string
  ],
  "startTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "endTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "unloadingPolicy": enum (UnloadingPolicy),
  "loadLimits": {
    string: {
      object (LoadLimit)
    },
    ...
  },
  "costPerHour": number,
  "costPerTraveledHour": number,
  "costPerKilometer": number,
  "fixedCost": number,
  "usedIfRouteIsEmpty": boolean,
  "routeDurationLimit": {
    object (DurationLimit)
  },
  "travelDurationLimit": {
    object (DurationLimit)
  },
  "routeDistanceLimit": {
    object (DistanceLimit)
  },
  "extraVisitDurationForVisitType": {
    string: string,
    ...
  },
  "breakRule": {
    object (BreakRule)
  },
  "label": string,
  "ignore": boolean,
  "travelDurationMultiple": number
}
필드
displayName

string

차량의 사용자 정의 표시 이름입니다. 최대 길이는 63자(영문 기준)이며 UTF-8 문자를 사용할 수 있습니다.

travelMode

enum (TravelMode)

차량이 사용할 수 있는 도로와 속도에 영향을 미치는 이동 수단입니다. travelDurationMultiple을 참고하세요.

routeModifiers

object (RouteModifiers)

지정된 차량의 경로 계산 방식에 영향을 미치는 충족해야 하는 조건 집합입니다.

startLocation

object (LatLng)

배송을 수령하기 전에 차량이 시작되는 지리적 위치입니다. 지정하지 않으면 차량이 첫 번째 픽업에서 시작됩니다. 배송 모델에 소요 시간 및 거리 행렬이 있는 경우 startLocation을 지정하면 안 됩니다.

startWaypoint

object (Waypoint)

배송을 수령하기 전에 차량이 시작되는 지리적 위치를 나타내는 경유지입니다. startWaypoint 및 startLocation가 모두 지정되지 않으면 차량은 첫 번째 픽업에서 시작합니다. 배송 모델에 소요 시간 및 거리 행렬이 있는 경우 startWaypoint을 지정하면 안 됩니다.

endLocation

object (LatLng)

차량이 마지막 VisitRequest를 완료한 후 종료되는 지리적 위치입니다. 지정하지 않으면 차량의 ShipmentRoute는 마지막 VisitRequest를 완료하는 즉시 종료됩니다. 배송 모델에 소요 시간 및 거리 행렬이 있는 경우 endLocation을 지정하면 안 됩니다.

endWaypoint

object (Waypoint)

차량이 마지막 VisitRequest를 완료한 후 종료되는 지리적 위치를 나타내는 경유지입니다. endWaypoint 및 endLocation를 모두 지정하지 않으면 차량의 ShipmentRoute는 마지막 VisitRequest를 완료하는 즉시 종료됩니다. 배송 모델에 소요 시간 및 거리 행렬이 있는 경우 endWaypoint을 지정하면 안 됩니다.

startTags[]

string

차량 경로의 시작 부분에 연결된 태그를 지정합니다.

비어 있거나 중복된 문자열은 허용되지 않습니다.

endTags[]

string

차량 경로 끝에 연결된 태그를 지정합니다.

비어 있거나 중복된 문자열은 허용되지 않습니다.

startTimeWindows[]

object (TimeWindow)

차량이 시작 위치에서 출발할 수 있는 기간입니다. 전역 시간 제한 내에 있어야 합니다(ShipmentModel.global_* 필드 참고). 지정하지 않으면 전역 시간 제한 외에는 제한이 없습니다.

동일한 반복되는 입력란에 속하는 시간 범위는 분리되어야 합니다. 즉, 시간 범위가 다른 시간 범위와 겹치거나 인접할 수 없으며 시간순이어야 합니다.

costPerHourAfterSoftEndTime 및 softEndTime는 기간이 하나인 경우에만 설정할 수 있습니다.

endTimeWindows[]

object (TimeWindow)

차량이 최종 위치에 도착할 수 있는 기간입니다. 전역 시간 제한 내에 있어야 합니다(ShipmentModel.global_* 필드 참고). 지정하지 않으면 전역 시간 제한 외에는 제한이 없습니다.

동일한 반복되는 입력란에 속하는 시간 범위는 분리되어야 합니다. 즉, 시간 범위가 다른 시간 범위와 겹치거나 인접할 수 없으며 시간순이어야 합니다.

costPerHourAfterSoftEndTime 및 softEndTime는 기간이 하나인 경우에만 설정할 수 있습니다.

unloadingPolicy

enum (UnloadingPolicy)

차량에 적용되는 하차 정책입니다.

loadLimits

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

차량의 용량 (예: 중량, 부피, 팔레트 수)입니다. 맵의 키는 로드 유형의 식별자이며 Shipment.load_demands 필드의 키와 일치합니다. 주어진 키가 이 맵에 없으면 해당 용량은 무제한으로 간주됩니다.

costPerHour

number

차량 비용: 모든 비용이 합산되며 Shipment.penalty_cost과 동일한 단위여야 합니다.

차량 경로의 시간당 비용입니다. 이 비용은 경로에 소요된 총 시간에 적용되며 이동 시간, 대기 시간, 방문 시간이 포함됩니다. costPerTraveledHour 대신 costPerHour를 사용하면 지연 시간이 추가될 수 있습니다.

costPerTraveledHour

number

차량 경로의 이동 시간당 비용입니다. 이 비용은 경로에 소요된 이동 시간 (즉, ShipmentRoute.transitions에 보고된 시간)에만 적용되며 대기 시간과 방문 시간은 제외됩니다.

costPerKilometer

number

차량 경로의 킬로미터당 비용입니다. 이 비용은 ShipmentRoute.transitions에 보고된 거리에 적용되며 단일 VisitRequest의 arrivalLocation에서 departureLocation까지 암시적으로 이동한 거리에는 적용되지 않습니다.

fixedCost

number

이 차량이 배송을 처리하는 데 사용되는 경우 적용되는 고정 비용입니다.

usedIfRouteIsEmpty

boolean

이 필드는 경로가 배송을 처리하지 않는 차량에만 적용됩니다. 이 경우 차량을 중고로 간주해야 하는지 여부를 나타냅니다.

true인 경우 차량은 배송을 처리하지 않더라도 시작 위치에서 종료 위치로 이동하며 시작 --> 종료 이동으로 인한 시간 및 거리 비용이 고려됩니다.

그렇지 않으면 시작 위치에서 종료 위치로 이동하지 않으며 이 차량에 대해 breakRule 또는 지연(TransitionAttributes에서)이 예약되지 않습니다. 이 경우 차량의 ShipmentRoute에는 차량 색인과 라벨을 제외한 정보가 포함되지 않습니다.

routeDurationLimit

object (DurationLimit)

차량 경로의 총 시간에 적용되는 한도입니다. 특정 OptimizeToursResponse에서 차량의 경로 소요 시간은 vehicleEndTime와 vehicleStartTime의 차이입니다.

travelDurationLimit

object (DurationLimit)

차량 경로의 이동 시간에 적용되는 한도입니다. 특정 OptimizeToursResponse에서 경로 이동 시간은 모든 transitions.travel_duration의 합계입니다.

routeDistanceLimit

object (DistanceLimit)

차량 경로의 총 거리에 적용되는 한도입니다. 특정 OptimizeToursResponse에서 경로 거리는 모든 transitions.travel_distance_meters의 합계입니다.

extraVisitDurationForVisitType

map (key: string, value: string (Duration format))

visitTypes 문자열에서 기간으로의 매핑을 지정합니다. 소요 시간은 지정된 visitTypes를 사용한 방문에 소요되는 VisitRequest.duration에 추가되는 시간입니다. costPerHour가 지정된 경우 이 추가 방문 시간으로 인해 비용이 추가됩니다. 키 (예: visitTypes)는 빈 문자열일 수 없습니다.

방문 요청에 여러 유형이 있는 경우 지도에서 각 유형에 대한 기간이 추가됩니다.

breakRule

object (BreakRule)

이 차량에 적용할 휴식 일정을 설명합니다. 비어 있으면 이 차량에 휴식이 예약되지 않습니다.

label

string

이 차량의 라벨을 지정합니다. 이 라벨은 응답에서 해당 ShipmentRoute의 vehicleLabel로 보고됩니다.

ignore

boolean

true인 경우 usedIfRouteIsEmpty는 false여야 하며 이 차량은 사용되지 않은 상태로 유지됩니다.

injectedFirstSolutionRoutes에서 무시된 차량이 배송을 수행하는 경우 첫 번째 솔루션에서는 건너뛰지만 응답에서 자유롭게 수행할 수 있습니다.

injectedSolutionConstraint에서 무시된 차량이 배송을 수행하고 관련 수령/배송이 차량에 남아 있도록 제한된 경우 (즉, RELAX_ALL_AFTER_THRESHOLD 수준으로 완화되지 않음) 응답에서 건너뜁니다. 배송에 비어 있지 않은 allowedVehicleIndices 필드가 있고 허용된 모든 차량이 무시되면 응답에서 건너뜁니다.

travelDurationMultiple

number

이 차량의 이동 시간을 늘리거나 줄이는 데 사용할 수 있는 곱셈 계수를 지정합니다. 예를 들어 이 값을 2.0으로 설정하면 이 차량이 더 느리고 이동 시간이 표준 차량의 두 배라는 의미입니다. 이 배수는 방문 시간에 영향을 미치지 않습니다. costPerHour 또는 costPerTraveledHour가 지정된 경우 비용에 영향을 미칩니다. 이 값은 [0.001, 1000.0] 범위 내에 있어야 합니다. 설정하지 않으면 차량이 표준이고 이 배수는 1.0으로 간주됩니다.

경고: 이동 시간은 이 배수가 적용된 후 수치 연산을 수행하기 전에 가장 가까운 초 단위로 반올림되므로 배수가 작으면 정밀도가 떨어질 수 있습니다.

아래의 extraVisitDurationForVisitType도 참고하세요.

TravelMode

차량에서 사용할 수 있는 이동 수단입니다.

Google Maps Platform Routes API 이동 수단의 하위 집합이어야 합니다. https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode를 참고하세요.

참고: WALKING 경로는 베타 버전이며 명확한 보도 또는 보행자 전용 도로가 누락될 수 있습니다. 앱에 표시하는 모든 도보 경로에 대해 이 경고를 사용자에게 표시해야 합니다.

열거형
TRAVEL_MODE_UNSPECIFIED 지정되지 않은 이동 수단으로, DRIVING과 동일합니다.
DRIVING 운전 경로에 해당하는 이동 수단 (자동차 등)입니다.
WALKING 도보 경로에 해당하는 이동 수단입니다.
TWO_WHEELER 이륜 전동 차량입니다. 예를 들어 오토바이입니다. 이는 인력으로 움직이는 이동 수단을 포함하는 BICYCLING 이동 수단과 다릅니다. 이 이동 수단은 오토바이 경로가 지원되는 국가 및 지역에 나열된 국가에서만 지원됩니다.

RouteModifiers

차량 경로를 계산할 때 충족해야 하는 선택적 조건 집합을 캡슐화합니다. 이는 Google Maps Platform Routes Preferred API의 RouteModifiers와 유사합니다. https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers를 참고하세요.

JSON 표현
{
  "avoidTolls": boolean,
  "avoidHighways": boolean,
  "avoidFerries": boolean,
  "avoidIndoor": boolean
}
필드
avoidTolls

boolean

가능한 경우 유료 도로를 피할지 여부를 지정합니다. 유료 도로가 포함되지 않은 경로가 우선적으로 선택됩니다. 동력 이동 수단 모드에만 적용됩니다.

avoidHighways

boolean

가능한 경우 고속도로를 피할지 여부를 지정합니다. 고속도로가 포함되지 않은 경로가 우선적으로 선택됩니다. 동력 이동 수단 모드에만 적용됩니다.

avoidFerries

boolean

가능한 경우 페리를 피할지 여부를 지정합니다. 페리를 이용하지 않는 경로가 우선적으로 표시됩니다. 동력 이동 수단 모드에만 적용됩니다.

avoidIndoor

boolean

선택사항입니다. 가능한 경우 실내 탐색을 피할지 여부를 지정합니다. 실내 내비게이션이 포함되지 않은 경로가 우선적으로 표시됩니다. WALKING 이동 수단에만 적용됩니다.

UnloadingPolicy

차량을 하역하는 방법에 관한 정책입니다. 수령과 배송이 모두 있는 배송에만 적용됩니다.

다른 배송은 unloadingPolicy와 관계없이 경로의 어느 곳에서나 자유롭게 발생할 수 있습니다.

열거형
UNLOADING_POLICY_UNSPECIFIED 지정되지 않은 하역 정책입니다. 배송은 해당 수령 후에만 이루어져야 합니다.
LAST_IN_FIRST_OUT 배송은 수령의 역순으로 이루어져야 합니다.
FIRST_IN_FIRST_OUT 배송은 수령과 동일한 순서로 이루어져야 함

LoadLimit

차량에 적용되는 적재 한도를 정의합니다(예: '이 트럭은 최대 3, 500kg까지만 적재할 수 있음'). loadLimits를 참조하세요.

JSON 표현
{
  "softMaxLoad": string,
  "costPerUnitAboveSoftMax": number,
  "startLoadInterval": {
    object (Interval)
  },
  "endLoadInterval": {
    object (Interval)
  },
  "maxLoad": string,
  "costPerKilometer": {
    object (LoadCost)
  },
  "costPerTraveledHour": {
    object (LoadCost)
  }
}
필드
softMaxLoad

string (int64 format)

부하의 소프트 한도입니다. costPerUnitAboveSoftMax를 참조하세요.

costPerUnitAboveSoftMax

number

이 차량의 경로에서 적재량이 softMaxLoad을 초과하면 다음 비용 페널티가 적용됩니다 (차량당 한 번만 적용). (적재량 - softMaxLoad) * costPerUnitAboveSoftMax 모든 비용이 합산되며 Shipment.penalty_cost와 동일한 단위여야 합니다. 소프트 한도는 모델 전체에서 수령에만 적용되거나 배송에만 적용되는 유형에만 정의할 수 있습니다.

startLoadInterval

object (Interval)

경로 시작 시 차량의 허용 가능한 적재 간격입니다.

endLoadInterval

object (Interval)

경로 끝에서 차량의 허용 가능한 적재 간격입니다.

maxLoad

string (int64 format)

허용되는 최대 부하량입니다.

costPerKilometer

object (LoadCost)

이 차량의 1km당 1단위의 적재물을 이동하는 비용입니다. 이는 연료 소비의 프록시로 사용할 수 있습니다. 부하가 무게 (뉴턴)인 경우 부하*킬로미터는 에너지의 차원을 갖습니다.

실험용: 자세한 내용은 https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request를 참고하세요.

costPerTraveledHour

object (LoadCost)

이 차량의 1시간 동안 단위 부하로 이동하는 비용입니다.

실험용: 자세한 내용은 https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request를 참고하세요.

간격

허용 가능한 부하량의 간격입니다.

JSON 표현
{
  "min": string,
  "max": string
}
필드
min

string (int64 format)

허용되는 최소 부하입니다. 0 이상이어야 합니다. 둘 다 지정된 경우 min는 max 이하여야 합니다.

max

string (int64 format)

최대 허용 부하 0 이상이어야 합니다. 지정하지 않으면 이 메시지로 최대 부하가 제한되지 않습니다. 둘 다 지정된 경우 min는 max 이하여야 합니다.

LoadCost

Transition 동안 부하 단위 하나를 이동하는 비용입니다. 특정 부하의 경우 비용은 다음 두 부분의 합계입니다.

  • min(load, loadThreshold) * costPerUnitBelowThreshold
  • max(0, load - loadThreshold) * costPerUnitAboveThreshold

이 비용을 사용하면 솔루션은 수요가 많은 배송을 먼저 처리하거나 수요가 많은 수령을 마지막에 처리하는 것을 선호합니다. 예를 들어 차량에

load_limit {
  key: "weight"
  value {
    costPerKilometer {
      loadThreshold: 15
      costPerUnitBelowThreshold: 2.0
      costPerUnitAboveThreshold: 10.0
    }
  }
}

경로는 start,pickup,pickup,delivery,delivery,end이며 전환은 다음과 같습니다.

transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }

이 LoadCost에서 발생하는 비용은 (cost_below * load_below * kilometers + cost_above * load_above * kms)입니다.

  • 전환 0: 0.0
  • 전환 1: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • 전환 2: 2.0 * 15 * 1.0 + 10.0 * (20 - 15) * 1.0 = 80.0
  • 전환 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • 전환 4: 0.0

따라서 경로의 LoadCost는 120.0입니다.

하지만 경로가 start,pickup,delivery,pickup,delivery,end이고 전환이 다음과 같은 경우:

transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }

이 LoadCost에서 발생하는 비용은 다음과 같습니다.

  • 전환 0: 0.0
  • 전환 1: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • 전환 2: 0.0
  • 전환 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • 전환 4: 0.0

여기서 경로의 LoadCost는 40.0입니다.

LoadCost는 전환이 많이 발생하는 솔루션의 비용을 높입니다.

실험용: 자세한 내용은 https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request를 참고하세요.

JSON 표현
{
  "loadThreshold": string,
  "costPerUnitBelowThreshold": number,
  "costPerUnitAboveThreshold": number
}
필드
loadThreshold

string (int64 format)

부하 단위 이동 비용이 costPerUnitBelowThreshold에서 costPerUnitAboveThreshold로 변경되는 부하량입니다. 0 이상이어야 합니다.

costPerUnitBelowThreshold

number

0과 기준점 사이의 각 단위에 대해 부하 단위를 이동하는 비용입니다. 유한한 값이어야 하며 0 이상이어야 합니다.

costPerUnitAboveThreshold

number

기준점을 초과하는 각 단위에 대해 부하 단위를 이동하는 비용입니다. 기준점이 0인 특별한 경우, 이는 단위당 고정 비용입니다. 유한한 값이어야 하며 0 이상이어야 합니다.

DurationLimit

차량 경로의 최대 기간을 정의하는 한도입니다. 하드 또는 소프트일 수 있습니다.

소프트 한도 필드가 정의되면 소프트 최대 기준점과 관련 비용을 모두 함께 정의해야 합니다.

JSON 표현
{
  "maxDuration": string,
  "softMaxDuration": string,
  "quadraticSoftMaxDuration": string,
  "costPerHourAfterSoftMax": number,
  "costPerSquareHourAfterQuadraticSoftMax": number
}
필드
maxDuration

string (Duration format)

기간을 최대 maxDuration으로 제한하는 엄격한 한도입니다.

softMaxDuration

string (Duration format)

최대 기간 한도를 적용하지 않는 가벼운 한도이지만 위반 시 경로에 비용이 발생합니다. 이 비용은 모델에 정의된 다른 비용과 동일한 단위로 합산됩니다.

정의된 경우 softMaxDuration는 음수가 아니어야 합니다. maxDuration도 정의된 경우 softMaxDuration는 maxDuration보다 작아야 합니다.

quadraticSoftMaxDuration

string (Duration format)

최대 기간 한도를 적용하지 않는 소프트 한도이지만 위반 시 경로에 비용이 발생하며 기간에 따라 기하급수적으로 증가합니다. 이 비용은 모델에 정의된 다른 비용과 동일한 단위로 합산됩니다.

quadraticSoftMaxDuration가 설정된 경우 다음 조건을 충족해야 합니다.

  • 음수가 아니어야 합니다.
  • maxDuration를 정의해야 합니다.
  • quadraticSoftMaxDuration은(는) maxDuration보다 작아야 합니다.
  • 차이는 하루 이하여야 합니다. maxDuration - quadraticSoftMaxDuration <= 86400 seconds
costPerHourAfterSoftMax

number

softMaxDuration 기준을 위반할 경우 발생하는 시간당 비용입니다. 기간이 기준 미만인 경우 추가 비용은 0이며, 그렇지 않으면 다음과 같이 기간에 따라 비용이 달라집니다.

  costPerHourAfterSoftMax * (duration - softMaxDuration)

비용은 음수가 아니어야 합니다.

costPerSquareHourAfterQuadraticSoftMax

number

quadraticSoftMaxDuration 기준을 위반하는 경우 발생하는 제곱 시간당 비용입니다.

기간이 기준 미만인 경우 추가 비용은 0이며, 그렇지 않으면 다음과 같이 기간에 따라 비용이 달라집니다.

  costPerSquareHourAfterQuadraticSoftMax *
  (duration - quadraticSoftMaxDuration)^2

비용은 음수가 아니어야 합니다.

DistanceLimit

이동할 수 있는 최대 거리를 정의하는 한도입니다. 하드 또는 소프트일 수 있습니다.

소프트 한도가 정의된 경우 softMaxMeters 및 costPerKilometerAboveSoftMax를 모두 정의해야 하며 음수가 아니어야 합니다.

JSON 표현
{
  "maxMeters": string,
  "softMaxMeters": string,
  "costPerKilometerBelowSoftMax": number,
  "costPerKilometerAboveSoftMax": number
}
필드
maxMeters

string (int64 format)

거리를 최대 maxMeters로 제한하는 엄격한 한도입니다. 한도는 음수가 아니어야 합니다.

softMaxMeters

string (int64 format)

최대 거리 한도를 적용하지 않는 소프트 한도이지만 위반 시 모델에 정의된 다른 비용에 동일한 단위로 합산되는 비용이 발생합니다.

정의된 경우 softMaxMeters는 maxMeters보다 작아야 하며 음수가 아니어야 합니다.

costPerKilometerBelowSoftMax

number

킬로미터당 비용이 발생하며 최대 softMaxMeters까지 증가합니다. 공식은 다음과 같습니다.

  min(distanceMeters, softMaxMeters) / 1000.0 *
  costPerKilometerBelowSoftMax.

routeDistanceLimit에서는 이 비용이 지원되지 않습니다.

costPerKilometerAboveSoftMax

number

거리가 softMaxMeters 한도를 초과하는 경우 발생하는 킬로미터당 비용입니다. 거리가 한도 미만인 경우 추가 비용은 0이며, 그렇지 않은 경우 비용을 계산하는 데 사용되는 수식은 다음과 같습니다.

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

비용은 음수가 아니어야 합니다.

BreakRule

차량의 휴식 시간 (예: 점심시간)을 생성하는 규칙입니다. 휴식은 차량이 현재 위치에서 유휴 상태로 유지되고 방문을 수행할 수 없는 연속적인 기간입니다. 다음과 같은 경우에 중단이 발생할 수 있습니다.

  • 두 방문 사이의 이동 중 (방문 직전 또는 직후의 시간은 포함되지만 방문 중간은 포함되지 않음). 이 경우 방문 간의 해당 운송 기간이 연장됩니다.
  • 또는 차량 시동 전에 (차량은 휴식 중에 시동이 걸리지 않을 수 있음) 발생할 수 있으며, 이 경우 차량 시동 시간에 영향을 미치지 않습니다.
  • 또는 차량 종료 후 (차량 종료 시간 포함)
JSON 표현
{
  "breakRequests": [
    {
      object (BreakRequest)
    }
  ],
  "frequencyConstraints": [
    {
      object (FrequencyConstraint)
    }
  ]
}
필드
breakRequests[]

object (BreakRequest)

광고 시점의 순서입니다. BreakRequest 메시지를 확인하세요.

frequencyConstraints[]

object (FrequencyConstraint)

여러 FrequencyConstraint가 적용될 수 있습니다. 이 BreakRule의 BreakRequest에서 모두 충족해야 합니다. FrequencyConstraint를 참고하세요.

BreakRequest

각 차량에 적용되는 휴식 시퀀스 (즉, 휴식 횟수 및 순서)를 미리 알아야 합니다. 반복되는 BreakRequest는 해당 시퀀스를 발생해야 하는 순서대로 정의합니다. 시간대 (earliestStartTime/latestStartTime)가 겹칠 수 있지만 주문과 호환되어야 합니다 (확인됨).

JSON 표현
{
  "earliestStartTime": string,
  "latestStartTime": string,
  "minDuration": string
}
필드
earliestStartTime

string (Timestamp format)

필수 항목입니다. 휴식 시작의 하한값 (포함)입니다.

생성된 출력은 항상 Z-정규화되고 소수점 이하 0, 3, 6 또는 9자리인 RFC 3339를 사용합니다. 'Z' 이외의 오프셋도 허용됩니다. 예를 들면 "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" 또는 "2014-10-02T15:01:23+05:30"입니다.

latestStartTime

string (Timestamp format)

필수 항목입니다. 휴식 시작의 상한값 (포함)입니다.

생성된 출력은 항상 Z-정규화되고 소수점 이하 0, 3, 6 또는 9자리인 RFC 3339를 사용합니다. 'Z' 이외의 오프셋도 허용됩니다. 예를 들면 "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" 또는 "2014-10-02T15:01:23+05:30"입니다.

minDuration

string (Duration format)

필수 항목입니다. 광고 시점의 최소 길이입니다. 양수여야 합니다.

FrequencyConstraint

'12시간마다 최소 1시간의 휴식 시간이 있어야 합니다'와 같이 최소 휴식 빈도를 적용하여 위에 지정된 휴식의 빈도와 기간을 추가로 제한할 수 있습니다. 이를 '12시간의 슬라이딩 시간 범위 내에 최소 1시간의 휴식이 1회 이상 있어야 한다'로 해석할 수 있다고 가정하면 이 예시는 다음과 같은 FrequencyConstraint로 변환됩니다.

{
   minBreakDuration { seconds: 3600 }         # 1 hour.
   maxInterBreakDuration { seconds: 39600 }  # 11 hours (12 - 1 = 11).
}

솔루션의 휴식 시간 및 기간은 BreakRequest에 이미 지정된 시간대 및 최소 기간 외에도 이러한 모든 제약 조건을 준수합니다.

FrequencyConstraint는 실제로 연속되지 않은 휴식 시간에 적용될 수 있습니다. 예를 들어 다음 일정은 '12시간마다 1시간' 예시를 따릅니다.

  04:00 vehicle start
   .. performing travel and visits ..
  09:00 1 hour break
  10:00 end of the break
   .. performing travel and visits ..
  12:00 20-min lunch break
  12:20 end of the break
   .. performing travel and visits ..
  21:00 1 hour break
  22:00 end of the break
   .. performing travel and visits ..
  23:59 vehicle end
JSON 표현
{
  "minBreakDuration": string,
  "maxInterBreakDuration": string
}
필드
minBreakDuration

string (Duration format)

필수 항목입니다. 이 제약 조건의 최소 광고 시점 길이입니다. 음수가 아닙니다. FrequencyConstraint의 설명을 참조하세요.

maxInterBreakDuration

string (Duration format)

필수 항목입니다. duration >= minBreakDuration의 휴식이 최소한 부분적으로 포함되지 않은 경로의 시간 간격에 허용되는 최대 기간입니다. 양수여야 합니다.

목표

목표는 비용 모델을 완전히 대체하므로 기존 비용과 호환되지 않습니다. 각 목표는 차량, 배송 또는 전환 속성과 같은 여러 사전 정의된 비용에 매핑됩니다.

실험용: 자세한 내용은 https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request를 참고하세요.

JSON 표현
{
  "type": enum (Type),
  "weight": number
}
필드
type

enum (Type)

목표의 유형입니다.

weight

number

다른 목표와 비교하여 이 목표가 얼마나 중요한지 나타냅니다. 음수가 아닌 모든 숫자일 수 있으며 가중치의 합계가 1이 될 필요는 없습니다. 가중치 기본값은 1.0입니다.

유형

비용 집합에 매핑될 목표 유형입니다.

열거형
DEFAULT 합리적인 솔루션을 보장하기 위해 기본 비용 집합이 사용됩니다. 참고: 이 목표는 단독으로 사용할 수 있지만, 아직 없는 경우 사용자가 지정한 목표에 기준선으로 가중치 1.0과 함께 항상 추가됩니다.
MIN_DISTANCE 'MIN' 목표 총 이동 거리를 최소화합니다.
MIN_WORKING_TIME 모든 차량의 총 작업 시간을 최소화합니다.
MIN_TRAVEL_TIME 위와 동일하지만 이동 시간에만 초점을 맞춥니다.
MIN_NUM_VEHICLES 사용되는 차량 수를 최소화합니다.

DurationDistanceMatrix

방문 및 차량 시작 위치에서 방문 및 차량 종료 위치까지의 소요 시간 및 거리 행렬을 지정합니다.

JSON 표현
{
  "rows": [
    {
      object (Row)
    }
  ],
  "vehicleStartTag": string
}
필드
rows[]

object (Row)

소요 시간 및 거리 행렬의 행을 지정합니다. ShipmentModel.duration_distance_matrix_src_tags만큼의 요소가 있어야 합니다.

vehicleStartTag

string

이 소요 시간 및 거리 행렬이 적용되는 차량을 정의하는 태그입니다. 비어 있으면 모든 차량에 적용되며 행렬은 하나만 있을 수 있습니다.

각 차량 시작은 정확히 하나의 행렬과 일치해야 합니다. 즉, startTags 필드 중 정확히 하나가 행렬의 vehicleStartTag와 일치해야 합니다 (해당 행렬만).

모든 행렬은 vehicleStartTag이 달라야 합니다.

행

소요 시간 및 거리 행렬의 행을 지정합니다.

JSON 표현
{
  "durations": [
    string
  ],
  "meters": [
    number
  ]
}
필드
durations[]

string (Duration format)

지정된 행의 지속 시간 값입니다. ShipmentModel.duration_distance_matrix_dst_tags만큼의 요소가 있어야 합니다.

meters[]

number

특정 행의 거리 값입니다. 모델의 거리를 참조하는 비용이나 제약조건이 없는 경우 비워둘 수 있습니다. 그렇지 않으면 durations만큼의 요소가 있어야 합니다.

TransitionAttributes

경로에서 두 번의 연속 방문 간 전환 속성을 지정합니다. 동일한 전환에 여러 TransitionAttributes가 적용될 수 있습니다. 이 경우 모든 추가 비용이 합산되고 가장 엄격한 제약 조건 또는 한도가 적용됩니다 (자연스러운 'AND' 시맨틱스에 따름).

JSON 표현
{
  "srcTag": string,
  "excludedSrcTag": string,
  "dstTag": string,
  "excludedDstTag": string,
  "cost": number,
  "costPerKilometer": number,
  "distanceLimit": {
    object (DistanceLimit)
  },
  "delay": string
}
필드
srcTag

string

이러한 속성이 적용되는 (src->dst) 전환 집합을 정의하는 태그입니다.

소스 방문 또는 차량 시작은 VisitRequest.tags 또는 Vehicle.start_tags에 srcTag가 포함되거나 excludedSrcTag가 포함되지 않은 경우에만 일치합니다(이 두 필드 중 비어 있지 않은 필드에 따라 다름).

excludedSrcTag

string

srcTag를 참조하세요. srcTag 및 excludedSrcTag 중 하나는 비어 있지 않아야 합니다.

dstTag

string

목적지 방문 또는 차량 종료는 VisitRequest.tags 또는 Vehicle.end_tags에 dstTag가 포함되거나 excludedDstTag가 포함되지 않은 경우에만 일치합니다(이 두 필드 중 비어 있지 않은 필드에 따라 다름).

excludedDstTag

string

dstTag를 참조하세요. dstTag 및 excludedDstTag 중 하나는 비어 있지 않아야 합니다.

cost

number

이 전환을 수행하는 비용을 지정합니다. 이 값은 모델의 다른 모든 비용과 동일한 단위이며 음수여서는 안 됩니다. 이 수수료는 기존의 다른 모든 비용에 추가로 적용됩니다.

costPerKilometer

number

이 전환을 수행하는 동안 이동한 거리에 적용되는 킬로미터당 비용을 지정합니다. 차량에 지정된 Vehicle.cost_per_kilometer에 추가됩니다.

distanceLimit

object (DistanceLimit)

이 전환을 수행하는 동안 이동한 거리에 대한 한도를 지정합니다.

2021년 6월 현재 소프트 한도만 지원됩니다.

delay

string (Duration format)

이 전환을 실행할 때 발생하는 지연을 지정합니다.

이 지연은 항상 소스 방문을 완료한 후, 대상 방문을 시작하기 전에 발생합니다.

ShipmentTypeIncompatibility

shipmentType에 따라 배송 간의 비호환성을 지정합니다. 동일한 경로에 호환되지 않는 배송이 표시되는 것은 비호환성 모드에 따라 제한됩니다.

JSON 표현
{
  "types": [
    string
  ],
  "incompatibilityMode": enum (IncompatibilityMode)
}
필드
types[]

string

호환되지 않는 유형 목록입니다. 나열된 배송 중 shipment_types가 서로 다른 두 배송은 '호환되지 않습니다'.

incompatibilityMode

enum (IncompatibilityMode)

비호환성에 적용되는 모드입니다.

IncompatibilityMode

동일한 경로에서 호환되지 않는 배송의 표시가 제한되는 방식을 정의하는 모드입니다.

열거형
INCOMPATIBILITY_MODE_UNSPECIFIED 지정되지 않은 비호환성 모드입니다. 절대로 이 값을 사용하지 마세요.
NOT_PERFORMED_BY_SAME_VEHICLE 이 모드에서는 호환되지 않는 유형의 두 배송이 동일한 차량을 공유할 수 없습니다.
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

이 모드에서는 호환되지 않는 유형의 두 배송이 동시에 동일한 차량에 있을 수 없습니다.

  • 한 주문이 배송된 후에 다른 주문이 수령되는 경우에만 동일한 차량을 공유할 수 있습니다.
  • 두 배송이 모두 수령 전용 (배송 없음) 또는 배송 전용 (수령 없음)인 경우 동일한 차량을 전혀 공유할 수 없습니다.

ShipmentTypeRequirement

shipmentType에 따라 배송 간 요구사항을 지정합니다. 요구사항의 세부사항은 요구사항 모드에 의해 정의됩니다.

JSON 표현
{
  "requiredShipmentTypeAlternatives": [
    string
  ],
  "dependentShipmentTypes": [
    string
  ],
  "requirementMode": enum (RequirementMode)
}
필드
requiredShipmentTypeAlternatives[]

string

dependentShipmentTypes에 필요한 대체 배송 유형 목록입니다.

dependentShipmentTypes[]

string

dependentShipmentTypes 필드에 유형이 있는 모든 배송은 동일한 경로에서 requiredShipmentTypeAlternatives 유형의 배송을 하나 이상 방문해야 합니다.

참고: shipmentType가 자체에 종속되는 요구사항 체인은 허용되지 않습니다.

requirementMode

enum (RequirementMode)

요구사항에 적용되는 모드입니다.

RequirementMode

경로에서 종속 배송의 표시를 정의하는 모드입니다.

열거형
REQUIREMENT_MODE_UNSPECIFIED 지정되지 않은 요구사항 모드입니다. 절대로 이 값을 사용하지 마세요.
PERFORMED_BY_SAME_VEHICLE 이 모드에서는 모든 '종속' 배송이 '필수' 배송 중 하나 이상과 동일한 차량을 공유해야 합니다.
IN_SAME_VEHICLE_AT_PICKUP_TIME

IN_SAME_VEHICLE_AT_PICKUP_TIME 모드를 사용하면 모든 '종속' 배송은 수령 시 차량에 하나 이상의 '필수' 배송이 있어야 합니다.

따라서 '종속' 배송 수령에는 다음 중 하나가 있어야 합니다.

  • 배송 전용 '필수' 배송이 경로에서 배송된 후 또는
  • '필수' 배송은 경로에서 이전에 수령되었으며, '필수' 배송에 배송이 있는 경우 이 배송은 '종속' 배송의 수령 후에 수행되어야 합니다.
IN_SAME_VEHICLE_AT_DELIVERY_TIME 이전과 동일하지만 '종속' 배송은 배송 시 차량에 '필수' 배송이 있어야 합니다.

PrecedenceRule

두 이벤트 간의 우선순위 규칙 (각 이벤트는 배송의 수령 또는 배송임): '두 번째' 이벤트는 '첫 번째' 이벤트가 시작된 후 최소 offsetDuration에 시작해야 합니다.

여러 우선순위가 동일한(또는 관련된) 이벤트를 참조할 수 있습니다(예: 'B 수령은 A 배송 후에 발생', 'C 수령은 B 수령 후에 발생').

또한 우선순위는 두 배송이 모두 수행되는 경우에만 적용되며 그렇지 않으면 무시됩니다.

JSON 표현
{
  "firstIsDelivery": boolean,
  "secondIsDelivery": boolean,
  "offsetDuration": string,
  "firstIndex": integer,
  "secondIndex": integer
}
필드
firstIsDelivery

boolean

'첫 번째' 이벤트가 전송인지 여부를 나타냅니다.

secondIsDelivery

boolean

'두 번째' 이벤트가 전송인지 여부를 나타냅니다.

offsetDuration

string (Duration format)

'첫 번째' 이벤트와 '두 번째' 이벤트 간의 오프셋입니다. 음수일 수 있습니다.

firstIndex

integer

'첫 번째' 이벤트의 배송 색인입니다. 이 필드는 지정해야 합니다.

secondIndex

integer

'두 번째' 이벤트의 배송 색인입니다. 이 필드는 지정해야 합니다.