ShipmentModel

배송 모델에는 일련의 차량이 수행해야 하는 일련의 배송 세트를 포함하면서 다음 항목의 총합인 전체 비용을 최소화합니다.

  • 차량 경로 지정 비용 (총 시간당 비용, 이동 시간당 비용, 모든 차량에 대한 고정 비용의 합계)
  • 처벌을 받을 수 있습니다.
  • 전 세계 배송 기간의 비용
JSON 표현
{
  "shipments": [
    {
      object (Shipment)
    }
  ],
  "vehicles": [
    {
      object (Vehicle)
    }
  ],
  "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)

방문에 사용할 수 있는 이동 수단 집합입니다.

globalStartTime

string (Timestamp format)

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

모델의 시간 범위는 1년 미만이어야 합니다. 즉, globalEndTimeglobalStartTime은 상호 간격이 31536000초 이내여야 합니다.

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

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

globalEndTime

string (Timestamp format)

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

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

globalDurationCostPerHour

number

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

durationDistanceMatrices[]

object (DurationDistanceMatrix)

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

사용 예:

  • 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의 3개 위치에 있습니다.
  • 1대의 차량이 'fast' 행렬을 사용하여 locA에서 경로를 시작하고 locB에서 끝납니다.
  • 1대의 차량이 '느림' 행렬을 사용하여 locB에서 경로를 시작하고 locB에서 끝납니다.
  • 1대의 차량이 'fast' 행렬을 사용하여 locB에서 경로를 시작하고 locB에서 끝납니다.
  • 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는 이 필드에 있는 태그 1개와 정확히 일치해야 합니다. Vehicle의 소스, 대상, 매트릭스 태그는 동일할 수 있으며 마찬가지로 VisitRequest의 소스 태그와 대상 태그가 동일할 수 있습니다. 모든 태그는 서로 달라야 하며 빈 문자열일 수 없습니다. 이 필드가 비어 있지 않으면 durationDistanceMatrices도 비워둘 수 없습니다.

durationDistanceMatrixDstTags[]

string

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

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

transitionAttributes[]

object (TransitionAttributes)

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

shipmentTypeIncompatibilities[]

object (ShipmentTypeIncompatibility)

호환되지 않는 shipment_types 세트입니다 (ShipmentTypeIncompatibility 참고).

shipmentTypeRequirements[]

object (ShipmentTypeRequirement)

shipmentType 요구사항 집합입니다 (ShipmentTypeRequirement 참고).

precedenceRules[]

object (PrecedenceRule)

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

maxActiveVehicles

integer

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

배송

수령에서부터 배송 중 하나로의 단일 상품 배송입니다. 배송이 수행된 것으로 간주되려면 고유한 차량이 수령 위치 중 한 곳을 방문하여 예비 용량을 줄인 후 나중에 배송 위치 중 하나를 방문하여 예비 용량을 다시 늘려야 합니다.

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로 간주됩니다.

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

allowedVehicleIndices[]

integer

이 배송을 수행할 수 있는 운송 수단의 집합입니다. 비어 있으면 모든 차량에서 실행할 수 있습니다. 차량은 ShipmentModelvehicles 목록의 색인으로 제공됩니다.

costsPerVehicle[]

number

각 차량이 배송할 때 발생하는 비용을 지정합니다. 지정할 경우 다음 중 하나여야 합니다.

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

비용은 penaltyCost와 같은 단위여야 하며 음수가 아니어야 합니다. 비용이 없으면 이 입력란을 비워둡니다.

costsPerVehicleIndices[]

integer

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

pickupToDeliveryAbsoluteDetourLimit

string (Duration format)

승차 위치에서 배달까지의 최단 경로와 비교하여 최대 절대 우회 시간을 지정합니다. 지정된 경우 음수가 아니어야 하며 배송에는 적어도 수령 및 배달이 포함되어야 합니다.

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

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

한 배송에 상대적 및 절대적 한도가 모두 지정된 경우 가능한 각 수령/배달 쌍에 더 엄격한 한도가 적용됩니다. 2017년 10월 10일부터 우회로는 이동 시간이 차량에 의존하지 않는 경우에만 지원됩니다.

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

pickupToDeliveryTimeLimit

string (Duration format)

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

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

shipmentType

string

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

1회 방문에 대해 지정된 visitTypes와 다릅니다. 동일한 배송에 속한 모든 수령/배송은 동일한 shipmentType을(를) 공유합니다.

label

string

이 배송의 라벨을 지정합니다. 이 라벨은 상응하는 ShipmentRoute.VisitshipmentLabel에 있는 응답에 보고됩니다.

ignore

boolean

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

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

injectedFirstSolutionRoutes 또는 injectedSolutionConstraint에서 이루어진 배송은 무시해도 됩니다. 문제 해결사는 배송 경로에서 관련 수령/배송 방문을 삭제합니다. 무시된 배송을 참조하는 precedenceRules도 무시됩니다.

penaltyCost

number

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

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

pickupToDeliveryRelativeDetourLimit

number

승차 위치에서 배달까지의 최단 경로와 비교하여 최대 상대 우회 시간을 지정합니다. 지정된 경우 음수가 아니어야 하며 배송에는 적어도 수령 및 배달이 포함되어야 합니다.

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

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

한 배송에 상대적 및 절대적 한도가 모두 지정된 경우 가능한 각 수령/배달 쌍에 더 엄격한 한도가 적용됩니다. 2017년 10월 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
}
입력란
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가 없으면 차량이 언제든지 이 방문을 실행할 수 있습니다.

기간은 분리되어야 합니다. 즉, 기간은 다른 기간과 겹치거나 인접하지 않아야 하며 오름차순이어야 합니다.

costPerHourAfterSoftEndTimesoftEndTime는 기간이 하나만 있는 경우에만 설정할 수 있습니다.

duration

string (Duration format)

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

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

cost

number

차량 경로에서 이 방문 요청을 처리하는 데 드는 비용입니다. 이 방법을 사용하면 대체 물품 수령 또는 배송 건별로 다른 비용을 지불할 수 있습니다. 비용은 Shipment.penalty_cost와 같은 단위여야 하며 음수가 아니어야 합니다.

loadDemands

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

이 방문 요청의 로드 수요입니다. 이는 전체 Shipment 대신 이 VisitRequest에만 적용된다는 점을 제외하면 Shipment.load_demands 필드와 같습니다. 여기에 나열된 수요는 Shipment.load_demands에 나열된 수요에 추가됩니다.

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

visitTypes[]

string

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

유형은 한 번만 나타날 수 있습니다.

label

string

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

LatLng

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

JSON 표현
{
  "latitude": number,
  "longitude": number
}
입력란
latitude

number

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

longitude

number

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

경유지

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

JSON 표현
{
  "sideOfRoad": boolean,

  // Union field location_type can be only one of the following:
  "location": {
    object (Location)
  },
  "placeId": string
  // End of list of possible types for union field location_type.
}
입력란
sideOfRoad

boolean

선택사항입니다. 이 경유지의 위치가 도로의 특정 쪽에 정차하는 것을 선호한다는 것을 나타냅니다. 이 값을 설정하면 경로가 위치를 통과하므로 차량이 도로의 중심에서 쪽으로 편중되는 도로가에 정차할 수 있습니다. 이 옵션은 '걷기' 이동 모드에서는 작동하지 않습니다.

통합 필드 location_type. 위치를 나타내는 다양한 방법 location_type은 다음 중 하나여야 합니다.
location

object (Location)

지리적 좌표를 사용하여 지정된 지점입니다(선택적 방위 포함).

placeId

string

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

위치

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

JSON 표현
{
  "latLng": {
    object (LatLng)
  },
  "heading": integer
}
입력란
latLng

object (LatLng)

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

heading

integer

통행 방향과 관련된 나침반 방향입니다. 이 값은 승차 및 하차에 사용할 도로의 측면을 지정하는 데 사용됩니다. 방위 값은 0에서 360 사이이며, 여기서 0은 정북 방향을 지정하고 90은 정동 방향을 지정합니다.

TimeWindow

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

명확한 기간 경계인 startTimeendTime는 이벤트의 가장 이른 시간과 가장 늦은 시간을 적용합니다(예: startTime <= event_time <= endTime). 소프트 타임 기간 하한값인 softStartTime는 softStartTime 이벤트 발생 시간에 비례하는 비용을 발생시켜 softStartTime 또는 이후에 이벤트가 발생하는 기본 설정을 표현합니다. 소프트 타임 기간 상한값인 softEndTimesoftEndTime 이벤트가 발생한 후 시간에 비례하여 비용을 발생시켜 softEndTime 또는 그 이전에 이벤트가 발생하는 것을 선호합니다. startTime, endTime, softStartTime, softEndTime은 전역 시간 제한 (ShipmentModel.global_start_timeShipmentModel.global_end_time 참고) 내에 있어야 하며 다음을 준수해야 합니다.

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

string (Timestamp format)

하드 기간 시작 시간입니다. 지정하지 않으면 ShipmentModel.global_start_time로 설정됩니다.

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

endTime

string (Timestamp format)

하드 기간 종료 시간입니다. 지정하지 않으면 ShipmentModel.global_end_time로 설정됩니다.

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

softStartTime

string (Timestamp format)

기간의 소프트 스타트 시간입니다.

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

softEndTime

string (Timestamp format)

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

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

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),
  "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을 참고하세요.

startLocation

object (LatLng)

배송 상품을 수령하기 전에 차량이 출발하는 지리적 위치입니다. 지정하지 않으면 차량이 첫 승차 위치에서 시작됩니다. 배송 모델에 기간 및 거리 행렬이 있는 경우 startLocation를 지정해서는 안 됩니다.

startWaypoint

object (Waypoint)

화물 운송을 시작하기 전에 차량이 출발하는 지리적 위치를 나타내는 경유지입니다. startWaypointstartLocation 중 어느 것도 지정되지 않은 경우 차량은 첫 번째 승차 위치에서 시작합니다. 배송 모델에 기간 및 거리 행렬이 있는 경우 startWaypoint를 지정해서는 안 됩니다.

endLocation

object (LatLng)

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

endWaypoint

object (Waypoint)

차량이 마지막 VisitRequest을 완료한 후 종료되는 지리적 위치를 나타내는 경유지입니다. endWaypointendLocation 중 어느 것도 지정되지 않은 경우 차량의 ShipmentRoute는 마지막 VisitRequest 완료 시 즉시 종료됩니다. 배송 모델에 기간 및 거리 행렬이 있는 경우 endWaypoint를 지정해서는 안 됩니다.

startTags[]

string

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

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

endTags[]

string

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

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

startTimeWindows[]

object (TimeWindow)

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

동일한 반복 필드에 속하는 기간은 분리되어야 합니다. 즉, 기간이 다른 기간과 겹치거나 인접해 있지 않아야 하며 시간순으로 해야 합니다.

costPerHourAfterSoftEndTimesoftEndTime는 기간이 하나만 있는 경우에만 설정할 수 있습니다.

endTimeWindows[]

object (TimeWindow)

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

동일한 반복 필드에 속하는 기간은 분리되어야 합니다. 즉, 기간이 다른 기간과 겹치거나 인접해 있지 않아야 하며 시간순으로 해야 합니다.

costPerHourAfterSoftEndTimesoftEndTime는 기간이 하나만 있는 경우에만 설정할 수 있습니다.

unloadingPolicy

enum (UnloadingPolicy)

차량에 언로드 정책이 적용되었습니다.

loadLimits

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

차량 적재량 (예: 중량, 부피, 팰릿 수) 맵의 키는 Shipment.load_demands 필드의 키와 일치하는 로드 유형의 식별자입니다. 지정된 키가 이 맵에 없으면 해당 용량은 무제한으로 간주됩니다.

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

costPerHour

number

차량 비용: 모든 비용이 합산되며 Shipment.penalty_cost와 동일한 단위를 사용해야 합니다.

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

costPerTraveledHour

number

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

costPerKilometer

number

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

fixedCost

number

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

usedIfRouteIsEmpty

boolean

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

true인 경우 출고를 제공하지 않더라도 차량은 출발지에서 목적지까지 이동하며, 출발에서 도착한 후부터 발생하는 시간 및 거리 비용이 고려됩니다.

그렇지 않으면 출발지에서 도착지까지 이동하지 않으며 이 차량에 breakRule 또는 지연 (TransitionAttributes부터)이 예약되지 않습니다. 이 경우 차량의 ShipmentRoute에는 차량 색인과 라벨 이외의 정보가 포함되지 않습니다.

routeDurationLimit

object (DurationLimit)

한도는 차량 경로의 총 소요 시간에 적용됩니다. 지정된 OptimizeToursResponse에서 차량의 경로 소요 시간은 vehicleEndTimevehicleStartTime의 차이입니다.

travelDurationLimit

object (DurationLimit)

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

routeDistanceLimit

object (DistanceLimit)

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

extraVisitDurationForVisitType

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

방문 유형 문자열에서 기간으로의 지도를 지정합니다. 이 기간은 지정된 visitTypes로 방문 시 촬영해야 하는 VisitRequest.duration 외에 추가로 지정된 시간입니다. costPerHour가 지정되면 이 추가 방문 시간에 비용이 추가됩니다. 키 (예: visitTypes)는 빈 문자열일 수 없습니다.

방문 요청에 여러 유형이 있는 경우 지도의 각 유형마다 소요 시간이 추가됩니다.

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

breakRule

object (BreakRule)

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

label

string

차량의 라벨을 지정합니다. 이 라벨은 응답에서 상응하는 ShipmentRoutevehicleLabel로 보고됩니다.

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 Preferred API 이동 모드의 하위 집합이어야 합니다. https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode를 참고하세요.

열거형
TRAVEL_MODE_UNSPECIFIED 지정되지 않은 이동수단입니다. DRIVING와 같습니다.
DRIVING 운전경로 (자동차, ...)에 해당하는 이동 모드입니다.
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
}
입력란
softMaxLoad

string (int64 format)

부하의 소프트 한도입니다. costPerUnitAboveSoftMax 페이지를 참고하세요.

costPerUnitAboveSoftMax

number

차량의 경로에 있는 하중이 softMaxLoad을 (를) 초과할 경우 다음과 같은 페널티가 차량당 한 번만 적용됩니다(로드 - softMaxLoad) * costPerUnitAboveSoftMax. 모든 비용은 합산되며 Shipment.penalty_cost과 같은 단위를 사용해야 합니다.

startLoadInterval

object (Interval)

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

endLoadInterval

object (Interval)

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

maxLoad

string (int64 format)

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

간격

허용되는 로드 양의 간격입니다.

JSON 표현
{
  "min": string,
  "max": string
}
입력란
min

string (int64 format)

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

max

string (int64 format)

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

DurationLimit

차량 경로의 최대 시간을 정의하는 제한입니다. 단단하거나 부드러울 수 있습니다.

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

JSON 표현
{
  "maxDuration": string,
  "softMaxDuration": string,
  "quadraticSoftMaxDuration": string,
  "costPerHourAfterSoftMax": number,
  "costPerSquareHourAfterQuadraticSoftMax": number
}
입력란
maxDuration

string (Duration format)

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

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

softMaxDuration

string (Duration format)

최대 시간 제한을 적용하지 않지만 위반 시 경로에 비용이 발생합니다. 이 비용은 동일한 단위를 사용하여 모델에 정의된 다른 비용에 추가됩니다.

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

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

quadraticSoftMaxDuration

string (Duration format)

최대 기간 제한을 적용하지 않지만 위반 시 경로에 이차적인 비용이 발생합니다. 이 비용은 동일한 단위를 사용하여 모델에 정의된 다른 비용에 추가됩니다.

정의된 경우 quadraticSoftMaxDuration은 음수가 아니어야 합니다. maxDuration도 정의된 경우 quadraticSoftMaxDurationmaxDuration보다 작아야 하고 차이는 1일 이하여야 합니다.

maxDuration - quadraticSoftMaxDuration <= 86400 seconds

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

costPerHourAfterSoftMax

number

softMaxDuration 기준 위반 시 발생하는 시간당 비용입니다. 기간이 기준 미만이면 추가 비용은 0이고, 기준 미만이면 비용은 다음과 같이 기간에 따라 달라집니다.

  costPerHourAfterSoftMax * (duration - softMaxDuration)

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

costPerSquareHourAfterQuadraticSoftMax

number

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

기간이 기준 미만이면 추가 비용은 0이고, 기준 미만이면 비용은 다음과 같이 기간에 따라 달라집니다.

  costPerSquareHourAfterQuadraticSoftMax *
  (duration - quadraticSoftMaxDuration)^2

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

DistanceLimit

이동할 수 있는 최대 거리를 정의하는 제한입니다. 단단하거나 부드러울 수 있습니다.

소프트 한도를 정의한 경우 softMaxMeterscostPerKilometerAboveSoftMax는 모두 정의되어야 하며 음수가 아니어야 합니다.

JSON 표현
{
  "maxMeters": string,
  "softMaxMeters": string,
  "costPerKilometerAboveSoftMax": number
}
입력란
maxMeters

string (int64 format)

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

softMaxMeters

string (int64 format)

최대 거리 제한을 적용하지 않는 소프트 한도를 위반하면 비용이 동일 단위로 모델에서 정의된 다른 비용에 합산됩니다.

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

costPerKilometerAboveSoftMax

number

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

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

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

BreakRule

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

  • (방문 중간이 아닌 방문 직전 또는 직후의 시간을 포함) 두 방문 간 이동 시간 동안 1회 이상 발생한 경우
  • 차량 시동 전에 (차량이 휴식 중에 시동을 걸 수 없음) 이 경우 차량 시동 시간에 영향을 미치지 않습니다.
  • 또는 차량 종료 후 (ditto, 차량 종료 시간 포함)
JSON 표현
{
  "breakRequests": [
    {
      object (BreakRequest)
    }
  ],
  "frequencyConstraints": [
    {
      object (FrequencyConstraint)
    }
  ]
}
입력란
breakRequests[]

object (BreakRequest)

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

frequencyConstraints[]

object (FrequencyConstraint)

여러 FrequencyConstraint가 적용될 수 있습니다. 모두 이 BreakRuleBreakRequest에 의해 충족되어야 합니다. FrequencyConstraint을 참고하세요.

BreakRequest

각 차량에 적용되는 중단 순서 (예: 번호 및 순서)는 사전에 알고 있어야 합니다. 반복되는 BreakRequest는 발생해야 하는 순서대로 이 시퀀스를 정의합니다. 시간대 (earliestStartTime / latestStartTime)는 중복될 수 있지만 주문과 호환되어야 합니다 (확인됨).

JSON 표현
{
  "earliestStartTime": string,
  "latestStartTime": string,
  "minDuration": string
}
입력란
earliestStartTime

string (Timestamp format)

필수 항목입니다. 광고 시점 시작의 하한값 (해당 값 포함)입니다.

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

latestStartTime

string (Timestamp format)

필수 항목입니다. 광고 시점 시작의 상한값 (포함)입니다.

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

minDuration

string (Duration format)

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

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

FrequencyConstraint

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

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

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

실제로 FrequencyConstraint는 비연속 나누기에 적용될 수 있습니다. 예를 들어 다음 일정은 '1h 매주 12h' 예를 따릅니다.

  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의 설명을 확인하세요.

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

maxInterBreakDuration

string (Duration format)

필수 항목입니다. duration >= minBreakDuration의 중단을 부분적으로 포함하지 않는 경로의 모든 시간 간격에 대한 최대 허용 범위입니다. 양수여야 합니다.

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

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개 이상이어야 합니다.

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

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_tagssrcTag를 포함하거나 excludedSrcTag를 포함하지 않는 경우 (이 두 필드 중 비어 있지 않은 필드에 따라 다름) 일치합니다.

excludedSrcTag

string

srcTag 페이지를 참고하세요. srcTagexcludedSrcTag 중 정확히 하나는 비어 있지 않아야 합니다.

dstTag

string

도착지 방문 또는 차량 종료는 VisitRequest.tags 또는 Vehicle.end_tagsdstTag을 포함하거나 excludedDstTag을 포함하지 않는 경우 (이 두 필드 중 비어 있지 않은 필드에 따라 다름) 일치합니다.

excludedDstTag

string

dstTag 페이지를 참고하세요. dstTagexcludedDstTag 중 정확히 하나는 비어 있지 않아야 합니다.

cost

number

이 전환을 수행하는 데 필요한 비용을 지정합니다. 모델의 다른 모든 비용과 동일한 단위이며 음수가 아니어야 합니다. 이 예산은 다른 모든 기존 비용에 추가로 적용됩니다.

costPerKilometer

number

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

distanceLimit

object (DistanceLimit)

이 전환을 수행하는 동안 이동 거리의 제한을 지정합니다.

2021/06부터는 소프트 한도만 지원됩니다.

delay

string (Duration format)

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

이러한 지연은 항상 소스 방문을 완료한 , 그리고 도착 페이지 방문을 시작하기 전에 발생합니다.

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

ShipmentTypeIncompatibility

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

JSON 표현
{
  "types": [
    string
  ],
  "incompatibilityMode": enum (IncompatibilityMode)
}
입력란
types[]

string

호환되지 않는 유형 목록입니다. 나열된 상품 중 shipment_types이 다른 배송 2건은 '호환되지 않는' 배송입니다.

incompatibilityMode

enum (IncompatibilityMode)

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

IncompatibilityMode

모드: 동일한 경로에서 호환되지 않는 배송의 외형이 어떻게 제한되는지를 정의합니다.

열거형
INCOMPATIBILITY_MODE_UNSPECIFIED 비호환성 모드가 지정되지 않았습니다. 절대로 이 값을 사용하지 마세요.
NOT_PERFORMED_BY_SAME_VEHICLE 이 모드에서는 호환되지 않는 유형의 배송 2건이 동일한 차량을 공유해서는 안 됩니다.
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY 비호환 모드와 호환되지 않는 유형이 있는 2건의 배송의 경우:

  • 둘 다 수령 전용 (배달 불가) 또는 배달 전용 (수령 불가)인 경우 동일한 차량을 공유해서는 안 됩니다.
  • 배송된 화물 중 하나에 배송이 있고 다른 배송물에 픽업이 있는 경우, 두 배송 건이 동일한 차량을 수령하기 전에 배송되면 같은 차량을 공유할 수 있습니다.

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)

'첫 번째' 이벤트와 '두 번째' 이벤트 사이의 오프셋입니다. 부정적일 수 있습니다.

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

firstIndex

integer

'first' 이벤트의 배송 색인입니다. 이 필드는 반드시 지정해야 합니다.

secondIndex

integer

'second' 이벤트의 배송 색인입니다. 이 필드는 반드시 지정해야 합니다.