Package google.maps.routeoptimization.v1

색인

RouteOptimization

차량 투어를 최적화하는 서비스입니다.

특정 유형의 필드 유효성:

  • google.protobuf.Timestamp
    • 시간은 Unix 시간(1970-01-01T00:00:00+00:00 이후의 초)입니다.
    • 초는 [0, 253402300799], 즉 [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00] 범위 내에 있어야 합니다.
    • nanos는 설정되지 않거나 0으로 설정되어야 합니다.
  • google.protobuf.Duration
    • 초는 [0, 253402300799], 즉 [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00] 사이여야 합니다.
    • nanos는 설정되지 않거나 0으로 설정되어야 합니다.
  • google.type.LatLng
    • 위도는 [-90.0, 90.0] 이내여야 합니다.
    • 경도는 [-180.0, 180.0] 범위 내에 있어야 합니다.
    • 위도와 경도 중 하나 이상은 0이 아니어야 합니다.
BatchOptimizeTours

rpc BatchOptimizeTours(BatchOptimizeToursRequest) returns (Operation)

하나 이상의 OptimizeToursRequest 메시지에 대한 차량 배송을 일괄로 최적화합니다.

이 메서드는 장기 실행 작업 (LRO)입니다. 최적화 입력 (OptimizeToursRequest 메시지) 및 출력 (OptimizeToursResponse 메시지)은 사용자가 지정한 형식으로 Cloud Storage에서 읽고 씁니다. OptimizeTours 메서드와 마찬가지로 각 OptimizeToursRequest에는 ShipmentModel가 포함되며 ShipmentRoute 필드가 포함된 OptimizeToursResponse를 반환합니다. 이 필드는 전체 비용을 최소화하는 차량이 수행할 경로 집합입니다.

사용자는 operations.get를 폴링하여 LRO 상태를 확인할 수 있습니다.

LRO done 필드가 false이면 하나 이상의 요청이 아직 처리 중입니다. 다른 요청은 성공적으로 완료되었을 수 있으며 결과는 Cloud Storage에서 확인할 수 있습니다.

LRO의 done 필드가 true이면 모든 요청이 처리된 것입니다. 성공적으로 처리된 요청의 결과는 Cloud Storage에서 확인할 수 있습니다. 실패한 요청의 결과는 Cloud Storage에서 사용할 수 없습니다. LRO의 error 필드가 설정된 경우 실패한 요청 중 하나의 오류가 포함됩니다.

승인 범위

다음 OAuth 범위가 필요합니다.

  • https://www.googleapis.com/auth/cloud-platform
IAM 권한

parent 리소스에 대해서는 다음 IAM 권한이 필요합니다.

  • routeoptimization.operations.create

자세한 내용은 IAM 문서를 참조하세요.

OptimizeTours

rpc OptimizeTours(OptimizeToursRequest) returns (OptimizeToursResponse)

ShipmentModel가 포함된 OptimizeToursRequest를 전송하고 ShipmentRoute가 포함된 OptimizeToursResponse를 반환합니다. 이는 전체 비용을 최소화하는 차량이 수행할 경로 집합입니다.

ShipmentModel 모델은 주로 수행해야 하는 Shipment과 Shipment을 운송하는 데 사용할 수 있는 Vehicle로 구성됩니다. ShipmentRoute는 Shipment를 Vehicle에 할당합니다. 구체적으로는 각 차량에 일련의 Visit를 할당합니다. 여기서 Visit는 Shipment의 수령 또는 배송인 VisitRequest에 해당합니다.

목표는 비용에 ShipmentModel에 정의된 여러 구성요소가 있는 총비용을 최소화하는 ShipmentRoute를 Vehicle에 할당하는 것입니다.

승인 범위

다음 OAuth 범위가 필요합니다.

  • https://www.googleapis.com/auth/cloud-platform
IAM 권한

parent 리소스에 대해서는 다음 IAM 권한이 필요합니다.

  • routeoptimization.locations.use

자세한 내용은 IAM 문서를 참조하세요.

OptimizeToursLongRunning

rpc OptimizeToursLongRunning(OptimizeToursRequest) returns (Operation)

이는 제한 시간 값이 큰 최적화를 위해 설계된 OptimizeTours 메서드의 변형입니다. 몇 분 이상 걸리는 최적화의 경우 OptimizeTours 메서드보다 이 메서드를 사용하는 것이 좋습니다.

반환된 long-running operation (LRO)의 이름은 <parent>/operations/<operation_id> 형식이며 계산 진행 상황을 추적하는 데 사용할 수 있습니다. metadata 필드 유형은 OptimizeToursLongRunningMetadata입니다. 성공하면 response 필드 유형은 OptimizeToursResponse입니다.

승인 범위

다음 OAuth 범위가 필요합니다.

  • https://www.googleapis.com/auth/cloud-platform
IAM 권한

parent 리소스에 대해서는 다음 IAM 권한이 필요합니다.

  • routeoptimization.operations.create

자세한 내용은 IAM 문서를 참조하세요.

OptimizeToursUri

rpc OptimizeToursUri(OptimizeToursUriRequest) returns (Operation)

이는 제한 시간 값이 크고 입력/출력 크기가 큰 최적화를 위해 설계된 OptimizeToursLongRunning 메서드의 변형입니다.

클라이언트는 Google Cloud Storage에 저장된 OptimizeToursRequest의 URI를 지정하고 서버는 클라이언트가 지정한 Google Cloud Storage URI에 OptimizeToursResponse를 씁니다.

이 메서드는 몇 분 이상 걸리는 최적화와 8MB보다 큰 입력/출력 크기에 대해 OptimizeTours 메서드보다 선호되어야 하지만 더 짧고 작은 최적화에도 사용할 수 있습니다.

반환된 long-running operation (LRO)의 이름은 <parent>/operations/<operation_id> 형식이며 계산 진행 상황을 추적하는 데 사용할 수 있습니다. metadata 필드 유형은 OptimizeToursUriMetadata입니다. 성공하면 response 필드 유형은 OptimizeToursUriResponse입니다.

승인 범위

다음 OAuth 범위가 필요합니다.

  • https://www.googleapis.com/auth/cloud-platform
IAM 권한

parent 리소스에 대해서는 다음 IAM 권한이 필요합니다.

  • routeoptimization.operations.create

자세한 내용은 IAM 문서를 참조하세요.

AggregatedMetrics

모든 Transition 또는 Visit (또는 모든 ShipmentRoute) 요소에 대한 ShipmentRoute (또는 OptimizeToursResponse)의 집계된 측정항목입니다.

필드
performed_shipment_count

int32

수행된 배송 수입니다. 수령 및 배송 쌍은 한 번만 계산됩니다.

travel_duration

Duration

경로 또는 솔루션의 총 이동 시간입니다.

wait_duration

Duration

경로 또는 솔루션의 총 대기 시간입니다.

delay_duration

Duration

경로 또는 솔루션의 총 지연 시간입니다.

break_duration

Duration

경로 또는 솔루션의 총 휴식 시간입니다.

visit_duration

Duration

경로 또는 솔루션의 총 방문 시간입니다.

total_duration

Duration

총 기간은 위의 모든 기간의 합계와 같아야 합니다. 경로의 경우 다음에도 해당합니다.

[ShipmentRoute.vehicle_end_time][google.maps.routeoptimization.v1.ShipmentRoute.vehicle_end_time] - [ShipmentRoute.vehicle_start_time][google.maps.routeoptimization.v1.ShipmentRoute.vehicle_start_time]
travel_distance_meters

double

경로 또는 솔루션의 총 이동 거리입니다.

max_loads

map<string, VehicleLoad>

이 경로 (또는 솔루션)의 각 수량에 대해 전체 경로 (또는 솔루션)에서 달성된 최대 부하로, 모든 Transition.vehicle_loads (또는 ShipmentRoute.metrics.max_loads.

performed_mandatory_shipment_count

int32

필수 배송 수행 횟수입니다.

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

performed_shipment_penalty_cost_sum

double

수행된 배송의 Shipment.penalty_cost 합계입니다.

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

BatchOptimizeToursMetadata

이 유형에는 필드가 없습니다.

BatchOptimizeToursRequest 호출의 작업 메타데이터입니다.

BatchOptimizeToursRequest

이동 경로를 비동기 작업으로 일괄 최적화하도록 요청합니다. 각 입력 파일에는 OptimizeToursRequest가 하나씩 포함되어야 하며 각 출력 파일에는 OptimizeToursResponse가 하나씩 포함됩니다. 요청에는 파일을 읽고 쓰고 파싱하는 정보가 포함됩니다. 모든 입력 및 출력 파일은 동일한 프로젝트에 있어야 합니다.

필드
parent

string

필수 항목입니다. 전화를 걸 프로젝트와 위치를 타겟팅합니다.

형식:

  • projects/{project-id}
  • projects/{project-id}/locations/-

리전 {location-id} 값은 지원되지 않습니다.

model_configs[]

AsyncModelConfig

필수 항목입니다. 각 구매 모델의 입력/출력 정보(예: 파일 경로, 데이터 형식)

AsyncModelConfig

하나의 최적화 모델을 비동기식으로 해결하기 위한 정보입니다.

필드
display_name

string

선택사항입니다. 사용자 정의 모델 이름으로, 사용자가 모델을 추적하기 위해 별칭으로 사용할 수 있습니다.

input_config

InputConfig

필수 항목입니다. 입력 모델에 대한 정보입니다.

output_config

OutputConfig

필수 항목입니다. 원하는 출력 위치 정보입니다.

BatchOptimizeToursResponse

이 유형에는 필드가 없습니다.

BatchOptimizeToursRequest에 대한 응답입니다. 작업이 완료된 후 장기 실행 작업에서 반환됩니다.

BreakRule

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

  • 두 방문 사이의 이동 중 (방문 직전 또는 직후의 시간을 포함하지만 방문 중간은 아님)에 발생하며, 이 경우 방문 간의 해당 운송 기간이 연장됩니다.
  • 또는 차량 시동 전 (차량은 휴식 중에 시동이 걸리지 않을 수 있음)에 발생할 수 있으며, 이 경우 차량 시작 시간에 영향을 미치지 않습니다.
  • 또는 차량 종료 후 (차량 종료 시간 포함)
필드
break_requests[]

BreakRequest

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

frequency_constraints[]

FrequencyConstraint

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

BreakRequest

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

필드
earliest_start_time

Timestamp

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

latest_start_time

Timestamp

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

min_duration

Duration

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

FrequencyConstraint

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

{
   min_break_duration { seconds: 3600 }         # 1 hour.
   max_inter_break_duration { 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
필드
min_break_duration

Duration

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

max_inter_break_duration

Duration

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

DataFormat

입력 및 출력 파일의 데이터 형식입니다.

열거형
DATA_FORMAT_UNSPECIFIED 값이 잘못되었습니다. 형식은 UNSPECIFIED가 아니어야 합니다.
JSON JavaScript Object Notation입니다.
PROTO_TEXT 프로토콜 버퍼 텍스트 형식입니다. https://protobuf.dev/reference/protobuf/textformat-spec/ 참조

DistanceLimit

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

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

필드
max_meters

int64

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

soft_max_meters

int64

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

정의된 경우 soft_max_meters는 max_meters보다 작고 음수가 아니어야 합니다.

cost_per_kilometer_below_soft_max

double

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

  min(distance_meters, soft_max_meters) / 1000.0 *
  cost_per_kilometer_below_soft_max.

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

cost_per_kilometer_above_soft_max

double

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

  (distance_meters - soft_max_meters) / 1000.0 *
  cost_per_kilometer_above_soft_max.

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

GcsDestination

출력 파일이 기록될 Google Cloud Storage 위치입니다.

필드
uri

string

필수 항목입니다. Google Cloud Storage URI

GcsSource

입력 파일을 읽을 Google Cloud Storage 위치입니다.

필드
uri

string

필수 항목입니다. gs://bucket/path/to/object 형식의 Google Cloud Storage 객체 URI입니다.

InjectedSolutionConstraint

제약 조건을 적용해야 하는 방문과 제약 조건을 적용하는 방법에 관한 정보를 포함하여 요청에 삽입된 솔루션입니다.

필드
routes[]

ShipmentRoute

삽입할 솔루션의 경로입니다. 일부 경로는 원래 솔루션에서 생략될 수 있습니다. 경로 및 건너뛴 배송은 injected_first_solution_routes에 나열된 기본 유효성 가정을 충족해야 합니다.

skipped_shipments[]

SkippedShipment

삽입할 솔루션의 건너뛴 배송입니다. 일부는 원래 솔루션에서 생략될 수 있습니다. routes 필드를 참조하세요.

constraint_relaxations[]

ConstraintRelaxation

0개 이상의 차량 그룹에 대해 제약조건을 완화하는 시점과 정도를 지정합니다. 이 필드가 비어 있으면 비어 있지 않은 모든 차량 경로가 완전히 제약됩니다.

ConstraintRelaxation

차량 그룹의 경우 방문 제약조건이 완화되는 기준점과 수준을 지정합니다. skipped_shipment 필드에 나열된 배송은 건너뛰도록 제한됩니다. 즉, 수행할 수 없습니다.

필드
relaxations[]

Relaxation

vehicle_indices의 차량이 있는 경로의 방문에 적용되는 모든 방문 제약조건 완화입니다.

vehicle_indices[]

int32

방문 제약조건 relaxations이 적용되는 차량 색인을 지정합니다. 비어 있으면 기본값으로 간주되며 relaxations는 다른 constraint_relaxations에 지정되지 않은 모든 차량에 적용됩니다. 기본값은 최대 1개일 수 있습니다. 즉, 제약조건 완화 필드는 최대 1개까지 비어 있을 수 있습니다(vehicle_indices). 차량 색인은 여러 constraint_relaxations 내에서도 한 번만 나열할 수 있습니다.

interpret_injected_solutions_using_labels가 true인 경우 차량 색인은 ShipmentRoute.vehicle_index와 동일하게 매핑됩니다 (fields 주석 참고).

휴식

relaxations가 비어 있으면 routes의 모든 방문의 시작 시간과 순서가 완전히 제한되며 해당 경로에 새 방문을 삽입하거나 추가할 수 없습니다. 또한 차량이 비어 있지 않은 한 (즉, 방문이 없고 모델에서 used_if_route_is_empty가 false로 설정된 경우) routes에서 차량의 시작 및 종료 시간이 완전히 제한됩니다.

relaxations(i).level는 다음을 충족하는 방문 #j에 적용되는 제약 조건 완화 수준을 지정합니다.

  • route.visits(j).start_time >= relaxations(i).threshold_time 및
  • j + 1 >= relaxations(i).threshold_visit_count

마찬가지로 차량 시작은 다음을 충족하는 경우 relaxations(i).level로 완화됩니다.

  • vehicle_start_time >= relaxations(i).threshold_time 및
  • relaxations(i).threshold_visit_count == 0 및 차량 끝은 다음을 충족하는 경우 relaxations(i).level로 완화됩니다.
  • vehicle_end_time >= relaxations(i).threshold_time 및
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

방문이 threshold_visit_count 또는 threshold_time를 충족하는 경우 완화 수준을 적용하려면 동일한 level를 가진 두 개의 relaxations를 추가합니다. 하나는 threshold_visit_count만 설정되고 다른 하나는 threshold_time만 설정됩니다. 방문이 여러 relaxations의 조건을 충족하는 경우 가장 완화된 수준이 적용됩니다. 따라서 차량 시작부터 경로 방문을 거쳐 차량 종료까지 완화 수준이 더 완화됩니다. 즉, 경로가 진행됨에 따라 완화 수준이 감소하지 않습니다.

relaxations의 기준 조건을 충족하지 않는 경로 방문의 타이밍과 순서는 완전히 제한되며 이러한 순서에는 방문을 삽입할 수 없습니다. 또한 차량 시작 또는 종료가 완화 조건을 충족하지 않으면 차량이 비어 있지 않는 한 시간이 고정됩니다.

필드
level

Level

threshold_time 이상 및 threshold_visit_count 이상의 조건이 충족될 때 적용되는 제약 조건 완화 수준입니다.

threshold_time

Timestamp

완화 level가 적용될 수 있는 시간 또는 그 이후입니다.

threshold_visit_count

int32

완화 level가 적용될 수 있는 방문 횟수입니다. threshold_visit_count가 0이거나 설정되지 않은 경우 level가 차량 시작 시 바로 적용될 수 있습니다.

route.visits_size() + 1인 경우 level는 차량 끝에만 적용될 수 있습니다. route.visits_size() + 1를 초과하면 해당 경로에 level가 전혀 적용되지 않습니다.

수준

방문에 적용되는 다양한 제약조건 완화 수준과 기준 조건을 충족할 때 적용되는 수준을 나타냅니다.

아래 열거는 완화가 증가하는 순서입니다.

열거형
LEVEL_UNSPECIFIED

암시적 기본 완화 수준: 제약조건이 완화되지 않습니다. 즉, 모든 방문이 완전히 제한됩니다.

이 값은 level에서 명시적으로 사용하면 안 됩니다.

RELAX_VISIT_TIMES_AFTER_THRESHOLD 방문 시작 시간과 차량 시작/종료 시간은 완화되지만 각 방문은 동일한 차량에 바인딩된 상태로 유지되며 방문 순서를 준수해야 합니다. 방문 사이에 또는 방문 전에 방문을 삽입할 수 없습니다.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD RELAX_VISIT_TIMES_AFTER_THRESHOLD와 동일하지만 방문 순서도 완화됩니다. 방문은 이 차량으로만 수행할 수 있지만 수행되지 않을 수도 있습니다.
RELAX_ALL_AFTER_THRESHOLD RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD와 동일하지만 차량도 완화됩니다. 기준점 시간 이후에는 방문이 완전히 무료이며 수행되지 않을 수 있습니다.

InputConfig

[BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours]의 입력을 지정합니다.

필드
data_format

DataFormat

필수 항목입니다. 입력 데이터 형식입니다.

통합 필드 source. 필수 항목입니다. source은 다음 중 하나여야 합니다.
gcs_source

GcsSource

Google Cloud Storage 위치 단일 객체 (파일)여야 합니다.

위치

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

필드
lat_lng

LatLng

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

heading

int32

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

OptimizeToursLongRunningMetadata

이 유형에는 필드가 없습니다.

OptimizeToursLongRunning 호출의 작업 메타데이터입니다.

OptimizeToursRequest

해결할 배송 모델과 최적화 매개변수를 정의하는 이동 경로 최적화 솔버에 제공할 요청입니다.

필드
parent

string

필수 항목입니다. 전화를 걸 프로젝트 또는 위치를 타겟팅합니다.

형식:

  • projects/{project-id}
  • projects/{project-id}/locations/-

리전 {location-id} 값은 지원되지 않습니다.

timeout

Duration

이 제한 시간이 설정되면 서버는 제한 시간이 경과하기 전이나 동기 요청의 서버 기한에 도달하기 전 중 더 빠른 시점에 응답을 반환합니다.

비동기 요청의 경우 서버는 제한 시간이 경과하기 전에 솔루션을 생성합니다 (가능한 경우).

model

ShipmentModel

해결할 배송 모델입니다.

solving_mode

SolvingMode

기본적으로 해결 모드는 DEFAULT_SOLVE (0)입니다.

search_mode

SearchMode

요청을 해결하는 데 사용된 검색 모드입니다.

injected_first_solution_routes[]

ShipmentRoute

최적화 알고리즘을 안내하여 이전 솔루션과 유사한 첫 번째 솔루션을 찾습니다.

첫 번째 솔루션이 빌드될 때 모델이 제한됩니다. 경로에서 수행되지 않은 배송은 첫 번째 솔루션에서 암시적으로 건너뛰지만 연속 솔루션에서 수행될 수 있습니다.

솔루션은 몇 가지 기본적인 유효성 가정을 충족해야 합니다.

  • 모든 경로에서 vehicle_index는 범위 내에 있어야 하며 중복되지 않아야 합니다.
  • 모든 방문에서 shipment_index 및 visit_request_index는 범위 내에 있어야 합니다.
  • 배송은 하나의 경로에서만 참조될 수 있습니다.
  • 수령-배송 배송의 수령은 배송 전에 수행해야 합니다.
  • 배송의 수령 대안 또는 배송 대안은 1개만 수행할 수 있습니다.
  • 모든 경로에서 시간이 증가합니다 (즉, vehicle_start_time <= visits[0].start_time <= visits[1].start_time ... <= vehicle_end_time)
  • 배송은 허용된 차량에서만 수행할 수 있습니다. Shipment.allowed_vehicle_indices가 비어 있거나 vehicle_index가 Shipment.allowed_vehicle_indices에 포함된 경우 차량이 허용됩니다.

삽입된 솔루션이 실행 불가능한 경우 검증 오류가 반드시 반환되는 것은 아니며 대신 실행 불가능함을 나타내는 오류가 반환될 수 있습니다.

injected_solution_constraint

InjectedSolutionConstraint

최적화 알고리즘을 제한하여 이전 솔루션과 유사한 최종 솔루션을 찾습니다. 예를 들어 이미 완료되었거나 완료될 예정이지만 수정해서는 안 되는 경로 부분을 고정하는 데 사용할 수 있습니다.

삽입된 솔루션이 실행 불가능한 경우 검증 오류가 반드시 반환되는 것은 아니며 대신 실행 불가능함을 나타내는 오류가 반환될 수 있습니다.

refresh_details_routes[]

ShipmentRoute

비어 있지 않으면 기본 방문 순서 또는 이동 시간을 수정하지 않고 지정된 경로가 새로고침됩니다. 다른 세부정보만 업데이트됩니다. 이렇게 해도 모델이 해결되지 않습니다.

2020년 11월 현재, 비어 있지 않은 경로의 다중선만 채우며 populate_polylines가 true여야 합니다.

전달된 경로의 route_polyline 필드가 경로 transitions과 일치하지 않을 수 있습니다.

이 필드는 injected_first_solution_routes 또는 injected_solution_constraint와 함께 사용하면 안 됩니다.

Shipment.ignore 및 Vehicle.ignore는 동작에 영향을 미치지 않습니다. 관련 배송 또는 차량이 무시되는지 여부와 관계없이 비어 있지 않은 모든 경로의 모든 방문 사이에 다중선이 계속 채워집니다.

interpret_injected_solutions_using_labels

bool

true인 경우:

이 해석은 injected_first_solution_routes, injected_solution_constraint, refresh_details_routes 필드에 적용됩니다. 솔루션이 생성된 이후 요청의 배송 또는 차량 색인이 변경된 경우(예: 요청에서 배송 또는 차량이 삭제되거나 추가된 경우)에 사용할 수 있습니다.

true인 경우 다음 카테고리의 라벨은 카테고리에 최대 한 번 표시되어야 합니다.

삽입된 솔루션의 vehicle_label가 요청 차량에 상응하지 않으면 상응하는 경로가 방문과 함께 솔루션에서 삭제됩니다. 삽입된 솔루션의 shipment_label가 요청 배송에 상응하지 않으면 해당 방문이 솔루션에서 삭제됩니다. 삽입된 솔루션의 SkippedShipment.label가 요청 배송에 상응하지 않으면 SkippedShipment가 솔루션에서 삭제됩니다.

삽입된 솔루션에서 경로 방문 또는 전체 경로를 삭제하면 암시적 제약 조건에 영향을 미칠 수 있으며, 이로 인해 솔루션이 변경되거나 유효성 검사 오류가 발생하거나 실행 불가능해질 수 있습니다.

참고: 호출자는 각 Vehicle.label (또는 )가 고유한지 확인해야 합니다. Shipment.label)는 삽입된 솔루션에 사용된 OptimizeToursResponse를 생성한 이전 요청과 삽입된 솔루션이 포함된 현재 요청이라는 두 가지 관련 요청에서 사용되는 차량 (또는 배송) 항목을 고유하게 식별합니다. 위에서 설명한 고유성 검사로는 이 요구사항을 보장할 수 없습니다.

consider_road_traffic

bool

ShipmentRoute 필드 Transition.travel_duration, Visit.start_time, vehicle_end_time를 계산하고, ShipmentRoute.has_traffic_infeasibilities 필드를 설정하고, OptimizeToursResponse.total_cost 필드를 계산할 때 트래픽 추정을 고려합니다.

populate_polylines

bool

true인 경우 다중선이 응답 ShipmentRoute에 채워집니다.

populate_transition_polylines

bool

true인 경우 다중선과 경로 토큰이 응답 ShipmentRoute.transitions에 채워집니다.

allow_large_deadline_despite_interruption_risk

bool

이 값이 설정되면 요청의 기한 (https://grpc.io/blog/deadlines 참조)은 최대 60분입니다. 그렇지 않으면 최대 기한은 30분입니다. 장기 실행 요청은 중단 위험이 훨씬 더 크지만 여전히 작습니다.

use_geodesic_distances

bool

true인 경우 이동 거리는 Google 지도 거리가 아닌 측지 거리를 사용하여 계산되고 이동 시간은 geodesic_meters_per_second로 정의된 속도로 측지 거리를 사용하여 계산됩니다.

label

string

이 요청을 식별하는 데 사용할 수 있는 라벨로, OptimizeToursResponse.request_label에 다시 보고됩니다.

geodesic_meters_per_second

double

use_geodesic_distances가 true인 경우 이 필드를 설정해야 하며 이동 시간을 계산하는 데 적용되는 속도를 정의합니다. 값은 1.0m/s 이상이어야 합니다.

max_validation_errors

int32

반환되는 검증 오류 수를 자릅니다. 이러한 오류는 일반적으로 solving_mode=VALIDATE_ONLY가 아닌 한 BadRequest 오류 세부정보 (https://cloud.google.com/apis/design/errors#error_details)로 INVALID_ARGUMENT 오류 페이로드에 연결됩니다. OptimizeToursResponse.validation_errors 필드를 참조하세요. 기본값은 100이며 최대 10,000개로 제한됩니다.

SearchMode

지연 시간과 솔루션 품질 간의 절충을 통해 검색 동작을 정의하는 모드입니다. 모든 모드에서 전역 요청 기한이 적용됩니다.

열거형
SEARCH_MODE_UNSPECIFIED RETURN_FAST과 동일한 지정되지 않은 검색 모드입니다.
RETURN_FAST 첫 번째 좋은 솔루션을 찾은 후 검색을 중지합니다.
CONSUME_ALL_AVAILABLE_TIME 사용 가능한 모든 시간을 더 나은 솔루션을 찾는 데 사용합니다.

SolvingMode

솔버가 요청을 처리하는 방법을 정의합니다. VALIDATE_ONLY를 제외한 모든 모드에서 요청이 잘못된 경우 INVALID_REQUEST 오류가 발생합니다. 반환되는 오류 수를 제한하려면 max_validation_errors를 참고하세요.

열거형
DEFAULT_SOLVE 모델을 해결합니다. [OptimizeToursResponse.validation_errors][google.cloud.optimization.v1.OptimizeToursResponse.validation_errors]에 경고가 표시될 수 있습니다.
VALIDATE_ONLY 해결하지 않고 모델만 검증합니다. 가능한 한 많은 OptimizeToursResponse.validation_errors를 채웁니다.
DETECT_SOME_INFEASIBLE_SHIPMENTS

OptimizeToursResponse.validation_errors 또는 OptimizeToursResponse.skipped_shipments만 채우고 나머지 요청은 실제로 해결하지 않습니다 (응답에서 status 및 routes가 설정되지 않음). injected_solution_constraint 경로에서 실행 불가능성이 감지되면 OptimizeToursResponse.validation_errors 필드에 채워지고 OptimizeToursResponse.skipped_shipments는 비어 있습니다.

중요: 실행 불가능한 모든 배송이 여기에 반환되는 것은 아니며 사전 처리 중에 실행 불가능한 것으로 감지된 배송만 반환됩니다.

TRANSFORM_AND_RETURN_REQUEST

이 모드는 ShipmentModel.objectives가 비어 있지 않은 경우에만 작동합니다. 요청이 해결되지 않았습니다. 지정된 목표에 해당하는 비용으로만 검증되고 채워집니다. ShipmentModel.objectives 문서도 참고하세요. 결과 요청은 OptimizeToursResponse.processed_request로 반환됩니다.

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

OptimizeToursResponse

각 차량이 따르는 경로, 건너뛴 배송, 솔루션의 전체 비용이 포함된 배송 최적화 문제를 해결한 후의 응답입니다.

필드
routes[]

ShipmentRoute

각 차량에 대해 계산된 경로입니다. i번째 경로는 모델의 i번째 차량에 해당합니다.

request_label

string

요청에 라벨이 지정된 경우 OptimizeToursRequest.label의 사본입니다.

skipped_shipments[]

SkippedShipment

건너뛴 모든 배송 목록입니다.

validation_errors[]

OptimizeToursValidationError

독립적으로 감지할 수 있는 모든 검사 오류 목록입니다. OptimizeToursValidationError 메시지에 대한 'MULTIPLE ERRORS' 설명을 참고하세요. solving_mode가 DEFAULT_SOLVE인 경우 오류 대신 경고가 포함됩니다.

processed_request

OptimizeToursRequest

경우에 따라 수신 요청을 해결하기 전에 수정하는 경우도 있습니다(예: 비용 추가). solving_mode == TRANSFORM_AND_RETURN_REQUEST인 경우 수정된 요청이 여기에 반환됩니다.

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

metrics

Metrics

이 솔루션의 소요 시간, 거리, 사용량 측정항목입니다.

측정항목

모든 경로에서 집계된 전체 측정항목입니다.

필드
aggregated_route_metrics

AggregatedMetrics

경로에 따라 집계됩니다. 각 측정항목은 이름이 같은 모든 ShipmentRoute.metrics 필드의 합계 (또는 로드의 경우 최댓값)입니다.

skipped_mandatory_shipment_count

int32

건너뛴 필수 배송 수입니다.

used_vehicle_count

int32

사용된 차량 수입니다. 참고: 차량 경로가 비어 있고 Vehicle.used_if_route_is_empty가 true이면 차량이 사용된 것으로 간주됩니다.

earliest_vehicle_start_time

Timestamp

사용된 차량의 가장 이른 시작 시간으로, 사용된 모든 차량의 ShipmentRoute.vehicle_start_time 중 최솟값으로 계산됩니다.

latest_vehicle_end_time

Timestamp

사용된 차량의 가장 늦은 종료 시간으로, 모든 사용된 차량의 ShipmentRoute.vehicle_end_time 중 최댓값으로 계산됩니다.

costs

map<string, double>

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

total_cost

double

솔루션의 총비용입니다. 비용 맵에 있는 모든 값의 합계입니다.

OptimizeToursUriMetadata

이 유형에는 필드가 없습니다.

OptimizeToursUri 호출의 작업 메타데이터입니다.

OptimizeToursUriRequest

OptimizeToursUri 메서드에서 사용하는 요청입니다.

필드
parent

string

필수 항목입니다. 전화를 걸 프로젝트 또는 위치를 타겟팅합니다.

형식:

  • projects/{project-id}
  • projects/{project-id}/locations/-

리전 {location-id} 값은 지원되지 않습니다.

input

Uri

필수 항목입니다. OptimizeToursRequest가 포함된 Cloud Storage 객체의 URI입니다.

output

Uri

필수 항목입니다. OptimizeToursResponse를 포함할 Cloud Storage 객체의 URI입니다.

OptimizeToursUriResponse

OptimizeToursUri 메서드에서 반환한 응답입니다.

필드
output

Uri

선택사항입니다. JSON 또는 textproto로 인코딩된 OptimizeToursResponse가 포함된 Cloud Storage 객체의 URI입니다. 객체가 JSON으로 인코딩된 경우 객체 이름의 확장자는 .json입니다. 객체가 textproto로 인코딩된 경우 객체 이름의 확장자는 .txtpb입니다.

리소스의 crc32_checksum를 사용하여 리소스의 콘텐츠가 수정되지 않았는지 확인할 수 있습니다.

OptimizeToursValidationError

OptimizeToursRequest의 유효성을 검사할 때 발생한 오류 또는 경고를 설명합니다.

필드
code

int32

유효성 검사 오류는 항상 존재하는 쌍 (code, display_name)으로 정의됩니다.

이 섹션 뒤에 나오는 필드에는 오류에 관한 추가 컨텍스트가 표시됩니다.

여러 오류: 오류가 여러 개 있는 경우 검증 프로세스에서 여러 오류를 출력하려고 시도합니다. 컴파일러와 마찬가지로 이 과정은 완벽하지 않습니다. 일부 검증 오류는 '치명적'입니다. 즉, 전체 검증 프로세스가 중지됩니다. 특히 display_name="UNSPECIFIED" 오류의 경우가 여기에 해당됩니다. 일부 오류로 인해 검증 프로세스에서 다른 오류를 건너뛸 수 있습니다.

안정성: code 및 display_name는 매우 안정적이어야 합니다. 하지만 시간이 지남에 따라 새로운 코드와 표시 이름이 나타날 수 있으며, 이로 인해 새로운 오류가 이전 오류를 숨기기 때문에 지정된 (잘못된) 요청이 다른 (code, display_name) 쌍을 생성할 수 있습니다. 예를 들어 'MULTIPLE ERRORS'를 참고하세요.

display_name

string

오류 표시 이름입니다.

fields[]

FieldReference

오류 컨텍스트에는 0개, 1개 (대부분의 경우) 또는 그 이상의 필드가 포함될 수 있습니다. 예를 들어 차량 #4 및 배송 #2의 첫 번째 픽업을 참조하는 방법은 다음과 같습니다.

fields { name: "vehicles" index: 4}
fields { name: "shipments" index: 2 sub_field {name: "pickups" index: 0} }

하지만 지정된 오류 코드에 대해 fields의 카디널리티는 변경되지 않아야 합니다.

error_message

string

오류를 설명하는, 사람이 읽을 수 있는 문자열입니다. code과 error_message는 일대일 매핑 관계입니다 (code != 'UNSPECIFIED'인 경우).

안정성: 안정적이지 않음: 특정 code와 연결된 오류 메시지는 시간이 지남에 따라 변경될 수 있습니다 (명확하게 하기 위해). 대신 display_name 및 code를 사용하세요.

offending_values

string

필드 값이 포함될 수 있습니다. 이 기능은 항상 사용할 수 있는 것은 아닙니다. 이 기능에 의존해서는 안 되며 수동 모델 디버깅에만 사용해야 합니다.

FieldReference

검증 오류의 컨텍스트를 지정합니다. FieldReference는 항상 이 파일의 특정 필드를 참조하며 동일한 계층 구조를 따릅니다. 예를 들어 다음을 사용하여 차량 #5의 start_time_windows 요소 #2를 지정할 수 있습니다.

name: "vehicles" index: 5 sub_field { name: "end_time_windows" index: 2 }

하지만 메시지가 복잡해지지 않도록 OptimizeToursRequest 또는 ShipmentModel과 같은 최상위 항목은 생략합니다.

필드
name

string

필드 이름입니다(예: 'vehicles').

sub_field

FieldReference

필요한 경우 재귀적으로 중첩된 하위 필드입니다.

통합 필드 index_or_key.

index_or_key는 다음 중 하나여야 합니다.

index

int32

반복되는 경우 필드의 색인입니다.

key

string

필드가 맵인 경우 키입니다.

OutputConfig

[BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours] 결과의 대상을 지정합니다.

필드
data_format

DataFormat

필수 항목입니다. 출력 데이터 형식입니다.

통합 필드 destination. 필수 항목입니다. destination은 다음 중 하나여야 합니다.
gcs_destination

GcsDestination

출력을 기록할 Google Cloud Storage 위치입니다.

RouteModifiers

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

필드
avoid_tolls

bool

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

avoid_highways

bool

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

avoid_ferries

bool

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

avoid_indoor

bool

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

배송

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

필드
display_name

string

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

pickups[]

VisitRequest

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

deliveries[]

VisitRequest

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

load_demands

map<string, Load>

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

allowed_vehicle_indices[]

int32

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

costs_per_vehicle[]

double

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

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

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

costs_per_vehicle_indices[]

int32

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

pickup_to_delivery_absolute_detour_limit

Duration

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

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

start_time(delivery) - start_time(pickup) <=
t + pickup_to_delivery_absolute_detour_limit

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

pickup_to_delivery_time_limit

Duration

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

shipment_type

string

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

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

label

string

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

ignore

bool

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

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

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

penalty_cost

double

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

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

pickup_to_delivery_relative_detour_limit

double

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

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

start_time(delivery) - start_time(pickup) <=
std::ceil(t * (1.0 + pickup_to_delivery_relative_detour_limit))

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

로드

방문을 수행할 때 수령인 경우 사전 정의된 금액이 차량 적재량에 추가되거나 배송인 경우 차감될 수 있습니다. 이 메시지는 해당 금액을 정의합니다. load_demands를 참조하세요.

필드
amount

int64

해당 방문을 수행하는 차량의 부하가 달라지는 정도입니다. 정수이므로 사용자는 정밀도 손실을 방지하기 위해 적절한 단위를 선택하는 것이 좋습니다. 0 이상이어야 합니다.

VisitRequest

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

필드
arrival_location

LatLng

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

arrival_waypoint

Waypoint

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

departure_location

LatLng

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

departure_waypoint

Waypoint

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

tags[]

string

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

time_windows[]

TimeWindow

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

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

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

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

duration

Duration

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

cost

double

차량 경로에서 이 방문 요청을 처리하는 데 드는 비용입니다. 이를 사용하여 배송의 각 대체 수령 또는 배송에 대해 다른 비용을 지불할 수 있습니다. 이 비용은 Shipment.penalty_cost와 동일한 단위여야 하며 음수가 아니어야 합니다.

load_demands

map<string, Load>

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

visit_types[]

string

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

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

label

string

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

avoid_u_turns

bool

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

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

ShipmentModel

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

  • 차량 경로 지정 비용 (총 시간당 비용, 이동 시간당 비용, 모든 차량의 고정 비용의 합계)
  • 미이행 배송 페널티를 부과할 수 있습니다.
  • 배송의 전체 기간 비용
필드
shipments[]

Shipment

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

vehicles[]

Vehicle

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

objectives[]

Objective

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

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

global_start_time

Timestamp

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

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

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

global_end_time

Timestamp

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

global_duration_cost_per_hour

double

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

duration_distance_matrices[]

DurationDistanceMatrix

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

사용 예시:

  • 위치는 locA와 locB 두 가지입니다.
  • locA에서 경로를 시작하고 locA에서 종료하는 차량 1대
  • locB에서 수거 방문 요청 1건
model {
  vehicles { start_tags: "locA"  end_tags: "locA" }
  shipments { pickups { tags: "locB" } }
  duration_distance_matrix_src_tags: "locA"
  duration_distance_matrix_src_tags: "locB"
  duration_distance_matrix_dst_tags: "locA"
  duration_distance_matrix_dst_tags: "locB"
  duration_distance_matrices {
    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 { start_tags: "locA" end_tags: "locB" start_tags: "fast" }
  vehicles { start_tags: "locB" end_tags: "locB" start_tags: "slow" }
  vehicles { start_tags: "locB" end_tags: "locB" start_tags: "fast" }
  shipments { pickups { tags: "locC" } }
  duration_distance_matrix_src_tags: "locA"
  duration_distance_matrix_src_tags: "locB"
  duration_distance_matrix_src_tags: "locC"
  duration_distance_matrix_dst_tags: "locB"
  duration_distance_matrix_dst_tags: "locC"
  duration_distance_matrices {
    vehicle_start_tag: "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
    }
  }
  duration_distance_matrices {
    vehicle_start_tag: "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
    }
  }
}
duration_distance_matrix_src_tags[]

string

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

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

duration_distance_matrix_dst_tags[]

string

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

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

transition_attributes[]

TransitionAttributes

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

shipment_type_incompatibilities[]

ShipmentTypeIncompatibility

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

shipment_type_requirements[]

ShipmentTypeRequirement

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

precedence_rules[]

PrecedenceRule

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

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

max_active_vehicles

int32

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

DurationDistanceMatrix

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

필드
rows[]

Row

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

vehicle_start_tag

string

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

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

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

행

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

필드
durations[]

Duration

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

meters[]

double

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

목표

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

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

필드
type

Type

목표의 유형입니다.

weight

double

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

유형

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

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

PrecedenceRule

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

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

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

필드
first_is_delivery

bool

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

second_is_delivery

bool

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

offset_duration

Duration

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

first_index

int32

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

second_index

int32

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

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

다음과 같은 차이점이 있습니다.

  • 차량 시작 및 종료, 각 방문의 시작 및 종료 (도착 및 출발)와 같은 '정시 이벤트' 특정 초에 발생합니다.
  • 00:00:15.000 --> 00:00:18.000 '시간 간격'을 나타내는 데 사용됩니다. 시간 간격은 때때로 기간이 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

마지막으로 전환 중에 TRAVEL, BREAKS, DELAY, WAIT를 정렬하는 방법은 다음과 같습니다.

  • 겹치지 않습니다.
  • DELAY는 고유하며 다음 방문 (또는 차량 종료) 직전의 연속된 기간이어야 합니다. 따라서 지연 기간을 알면 시작 시간과 종료 시간을 알 수 있습니다.
  • BREAKS는 연속적이고 겹치지 않는 기간입니다. 응답은 각 광고 시점의 시작 시간과 지속 시간을 지정합니다.
  • 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     |       |           |         |         ||
  ||     |       |           |       |           |         |         ||
--++-----------------------------------------------------------------++-->
필드
vehicle_index

int32

경로를 수행하는 차량이며 소스 ShipmentModel의 색인으로 식별됩니다.

vehicle_label

string

이 경로를 수행하는 차량의 라벨입니다. 지정된 경우 ShipmentModel.vehicles(vehicle_index).label와 같습니다.

vehicle_start_time

Timestamp

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

vehicle_end_time

Timestamp

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

visits[]

Visit

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

transitions[]

Transition

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

has_traffic_infeasibilities

bool

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

  start_time(previous_visit) + duration(previous_visit) +
  travel_duration(previous_visit, next_visit) > start_time(next_visit)

교통량으로 인해 이동 시간(travel_duration(previous_visit, next_visit))이 증가하여 next_visit에 도착하는 시간이 현재 시간대보다 늦어질 수 있습니다. 또한 이동 시간 추정치 증가 및 방문 또는 휴식 시간대 제한으로 인해 휴식이 방문과 겹칠 수 있습니다.

route_polyline

EncodedPolyline

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

breaks[]

Break

이 경로를 수행하는 차량에 예약된 휴식 시간입니다. breaks 시퀀스는 시간 간격을 나타내며, 각 간격은 해당 start_time에서 시작하여 duration초 동안 지속됩니다.

metrics

AggregatedMetrics

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

vehicle_fullness

VehicleFullness

상한이 적용된 측정항목이 각 차량 한도에 얼마나 근접했는지 계산하는 VehicleFullness 필드 필드는 상한 측정항목 필드 (예: AggregatedMetrics.travel_distance_meters)와 관련 차량 한도 (예: Vehicle.route_distance_limit) 간의 비율입니다.

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

route_costs

map<string, double>

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

route_total_cost

double

경로의 총비용입니다. 비용 맵에 있는 모든 비용의 합계입니다.

휴식 시간

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

필드
start_time

Timestamp

광고 시점의 시작 시간입니다.

duration

Duration

휴식 시간입니다.

EncodedPolyline

다중선의 인코딩된 표현입니다. 다중선 인코딩에 관한 자세한 내용은 https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding을 참고하세요.

필드
points

string

다중선의 인코딩된 포인트를 나타내는 문자열입니다.

전환

경로의 두 이벤트 간 전환 ShipmentRoute에 대한 설명을 참조하세요.

차량에 start_location 또는 end_location가 없는 경우 해당 이동 측정항목은 0입니다.

필드
travel_duration

Duration

이 전환 중 이동 시간입니다.

travel_distance_meters

double

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

traffic_info_unavailable

bool

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

delay_duration

Duration

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

break_duration

Duration

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

wait_duration

Duration

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

total_duration

Duration

편의를 위해 제공되는 전환의 총 기간입니다. 다음과 같습니다.

  • 다음 방문 start_time (또는 마지막 전환인 경우 vehicle_end_time) - 이 전환의 start_time
  • ShipmentRoute.has_traffic_infeasibilities가 false이면 다음이 추가로 적용됩니다. `total_duration = travel_duration + delay_duration
  • break_duration + wait_duration`입니다.
start_time

Timestamp

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

route_polyline

EncodedPolyline

전환 중에 따라간 경로의 인코딩된 다중선 표현입니다. 이 필드는 populate_transition_polylines가 true로 설정된 경우에만 채워집니다.

route_token

string

출력 전용입니다. 내비게이션 중에 경로를 재구성하고 경로 변경 시 경로가 생성되었을 때의 원래 의도를 반영하기 위해 Navigation SDK에 전달할 수 있는 불투명 토큰입니다. 이 토큰을 불투명 blob으로 취급합니다. 서비스에서 정확히 동일한 경로를 반환하더라도 값이 변경될 수 있으므로 요청 간에 값을 비교하지 마세요. 이 필드는 populate_transition_polylines가 true로 설정된 경우에만 채워집니다.

vehicle_loads

map<string, VehicleLoad>

이 전환 중 차량 적재량입니다. 이 차량의 Vehicle.load_limits에 표시되거나 이 경로에서 수행된 일부 배송에 0이 아닌 Shipment.load_demands가 있는 각 유형에 적용됩니다.

첫 번째 전환 중의 적재량은 차량 경로의 시작 적재량입니다. 그런 다음 각 방문 후 방문이 수령인지 배송인지에 따라 방문의 load_demands가 더해지거나 빼져 다음 전환의 부하를 가져옵니다.

VehicleLoad

특정 유형의 경로를 따라 특정 지점에서 차량의 실제 적재량을 보고합니다 (Transition.vehicle_loads 참고).

필드
amount

int64

지정된 유형의 차량에 실린 적재량입니다. 부하 단위는 일반적으로 유형으로 표시됩니다. Transition.vehicle_loads를 참조하세요.

방문

경로 중에 수행된 방문입니다. 이 방문은 Shipment의 수령 또는 배송에 해당합니다.

필드
shipment_index

int32

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

is_pickup

bool

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

visit_request_index

int32

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

start_time

Timestamp

방문이 시작되는 시간입니다. 차량이 이 시간보다 일찍 방문 위치에 도착할 수 있습니다. 시간은 ShipmentModel와 일치합니다.

load_demands

map<string, Load>

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

detour

Duration

방문 전 경로에서 방문한 배송과 시간대로 인해 발생할 수 있는 대기 시간으로 인한 추가 우회 시간입니다. 방문이 배송인 경우 우회는 해당 수령 방문에서 계산되며 다음과 같습니다.

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

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

start_time - vehicle_start_time - travel duration from
the vehicle's `start_location` to the visit.
shipment_label

string

Shipment에 지정된 경우 해당 Shipment.label의 사본입니다.

visit_label

string

VisitRequest에 지정된 경우 해당 VisitRequest.label의 사본입니다.

visit_type

VisitType

선택사항입니다. 방문 유형을 지정합니다. Visit.is_pickup 필드를 재정의합니다.

injected_solution_location_token

int32

방문 위치에 관한 정보를 나타내는 불투명 토큰입니다.

이 필드는 이 방문에 대해 VisitRequest.avoid_u_turns가 true로 설정되었거나 요청 OptimizeToursRequest에서 ShipmentModel.avoid_u_turns가 true로 설정된 경우 결과 경로의 방문에 채워질 수 있습니다.

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

VisitType

방문이 수령, 배송 또는 Stop 방문인지 여부를 나타냅니다. 경유지 방문은 멀티모달 최적화가 사용 설정된 경우에만 사용됩니다.

열거형
VISIT_TYPE_UNSPECIFIED 지정되지 않은 방문 유형입니다.
PICKUP_SHIPMENT 방문은 배송 수령에 해당합니다.
DELIVER_SHIPMENT 방문은 배송에 해당합니다.

ShipmentTypeIncompatibility

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

필드
types[]

string

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

incompatibility_mode

IncompatibilityMode

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

IncompatibilityMode

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

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

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

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

ShipmentTypeRequirement

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

필드
required_shipment_type_alternatives[]

string

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

dependent_shipment_types[]

string

dependent_shipment_types 필드에 유형이 있는 모든 배송은 동일한 경로에서 방문할 required_shipment_type_alternatives 유형의 배송이 하나 이상 필요합니다.

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

requirement_mode

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 이전과 동일하지만 '종속' 배송은 배송 시 차량에 '필수' 배송이 있어야 합니다.

SkippedShipment

솔루션에서 수행되지 않은 배송의 세부정보를 지정합니다. 사소한 케이스이거나 건너뛰는 원인을 파악할 수 있는 경우 여기에 이유를 보고합니다.

필드
index

int32

색인은 소스 ShipmentModel에 있는 배송의 색인에 해당합니다.

label

string

Shipment에 지정된 경우 해당 Shipment.label의 사본입니다.

reasons[]

Reason

배송이 건너뛰어진 이유를 설명하는 이유 목록입니다. 위의 Reason 주석을 참조하세요. 배송이 건너뛰어진 이유를 파악할 수 없는 경우 사유가 설정되지 않습니다.

penalty_cost

double

이는 Shipment.penalty_cost의 사본으로, 건너뛴 배송의 심각도를 더 쉽게 확인할 수 있도록 여기에 포함되어 있습니다.

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

estimated_incompatible_vehicle_ratio

double

아래 이유 중 하나 이상으로 인해 이 배송을 수행할 수 없는 차량의 예상 비율입니다. 참고: 이 필드는 이유에 차량이 포함된 경우에만 채워집니다.

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

이유

배송이 건너뛰어진 이유를 설명할 수 있는 경우 여기에 이유가 나열됩니다. 모든 차량의 이유가 동일하지 않은 경우 reason에 요소가 2개 이상 포함됩니다. 건너뛴 배송에는 중복된 이유가 있을 수 없습니다. 즉, example_vehicle_index를 제외한 모든 필드가 동일합니다. 예:

reasons {
  code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
  example_vehicle_index: 1
  example_exceeded_capacity_type: "Apples"
}
reasons {
  code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
  example_vehicle_index: 3
  example_exceeded_capacity_type: "Pears"
}
reasons {
  code: CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT
  example_vehicle_index: 1
}

건너뛴 배송이 모든 차량과 호환되지 않습니다. 이유는 차량마다 다를 수 있지만 하나 이상의 차량의 '사과' 용량이 초과되고 (차량 1 포함), 하나 이상의 차량의 '배' 용량이 초과되고 (차량 3 포함), 하나 이상의 차량의 거리 한도가 초과됩니다 (차량 1 포함).

필드
code

Code

코드의 주석을 참고하세요.

example_vehicle_indices[]

int32

example_vehicle_index와 동일하지만 식별된 여러 차량의 목록을 제공합니다. 이 목록은 일부 예시일 뿐 모든 내용을 포함하지는 않습니다. [fill_example_vehicle_indices_in_skipped_reasons][] 가 true인 경우에만 채워집니다.

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

example_exceeded_capacity_type

string

이유 코드가 DEMAND_EXCEEDS_VEHICLE_CAPACITY인 경우 초과된 용량 유형 하나를 문서화합니다.

example_vehicle_index

int32

이유가 배송-차량 비호환성과 관련된 경우 이 필드는 관련 차량 하나의 색인을 제공합니다.

코드

이유 유형을 식별하는 코드입니다. 여기서 순서는 의미가 없습니다. 특히 두 가지 이유가 모두 적용되는 경우 솔루션에서 한 이유가 다른 이유보다 먼저 표시되는지 여부를 나타내지 않습니다.

열거형
CODE_UNSPECIFIED 이 값은 사용하면 안 됩니다.
NO_VEHICLE 모델에 차량이 없으므로 모든 배송이 불가능합니다.
DEMAND_EXCEEDS_VEHICLE_CAPACITY 배송 수요가 일부 용량 유형의 차량 용량을 초과합니다. 그중 하나는 example_exceeded_capacity_type입니다.
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT

이 배송을 수행하는 데 필요한 최소 거리(차량의 start_location에서 배송의 수령 또는 배송 위치, 차량의 종료 위치까지)가 차량의 route_distance_limit를 초과합니다.

이 계산에는 측지 거리를 사용합니다.

CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT

이 배송을 수행하는 데 필요한 최소 시간(이동 시간, 대기 시간, 서비스 시간 포함)이 차량의 route_duration_limit을(를) 초과합니다.

참고: 이동 시간은 최적의 시나리오, 즉 측지선 거리 x 36m/s (약 130km/h)로 계산됩니다.

CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT 위와 동일하지만 최소 이동 시간과 차량의 travel_duration_limit만 비교합니다.
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TIME_WINDOWS 차량이 가장 이른 시작 시간에 시작하는 경우 최상의 시나리오 (시간 계산은 CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT 참고)에서 이 배송을 수행할 수 없습니다. 총 시간으로 인해 차량이 가장 늦은 종료 시간 이후에 종료됩니다.
VEHICLE_NOT_ALLOWED 배송의 allowed_vehicle_indices 필드가 비어 있지 않으며 이 차량이 여기에 속하지 않습니다.
VEHICLE_IGNORED

차량의 ignore 필드가 true입니다.

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

SHIPMENT_IGNORED

배송의 ignore 필드가 true입니다.

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

SKIPPED_IN_INJECTED_SOLUTION_CONSTRAINT

injected_solution_constraint에서 배송이 건너뛰어집니다.

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

VEHICLE_ROUTE_IS_FULLY_SEQUENCE_CONSTRAINED

injected_solution_constraint에 지정된 차량 경로 완화로 인해 방문을 삽입할 수 없습니다.

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

ZERO_PENALTY_COST

배송의 페널티 비용은 0입니다. 이는 고급 모델링 선택으로 유용할 수 있지만 배송이 건너뛴 이유를 사후에 설명할 수도 있습니다.

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

TimeWindow

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

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

  0 <= `start_time` <= `end_time` and
  0 <= `start_time` <= `soft_start_time` and
  0 <= `soft_end_time` <= `end_time`.
필드
start_time

Timestamp

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

end_time

Timestamp

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

soft_start_time

Timestamp

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

soft_end_time

Timestamp

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

cost_per_hour_before_soft_start_time

double

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

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

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

cost_per_hour_after_soft_end_time

double

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

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

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

TransitionAttributes

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

필드
src_tag

string

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

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

excluded_src_tag

string

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

dst_tag

string

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

excluded_dst_tag

string

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

cost

double

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

cost_per_kilometer

double

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

distance_limit

DistanceLimit

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

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

delay

Duration

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

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

URI

Route Optimization API에서 읽고 쓸 수 있는 리소스를 가리키는 범용 리소스 식별자입니다.

필드
uri

string

리소스의 URI입니다. 리소스가 아직 존재하지 않을 수 있습니다.

리소스의 콘텐츠는 JSON 또는 textproto로 인코딩됩니다. Google Cloud Storage 리소스만 지원됩니다. 리소스가 JSON으로 인코딩된 경우 리소스 이름에 .json 서픽스가 있어야 합니다. 리소스가 textproto로 인코딩된 경우 리소스 이름에 .txtpb 서픽스를 추가해야 합니다. 예를 들어 JSON 인코딩 파일에 대한 Google Cloud Storage URI는 gs://bucket/path/input/object.json과 같습니다.

차량

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

필드
display_name

string

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

travel_mode

TravelMode

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

route_modifiers

RouteModifiers

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

start_location

LatLng

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

start_waypoint

Waypoint

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

end_location

LatLng

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

end_waypoint

Waypoint

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

start_tags[]

string

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

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

end_tags[]

string

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

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

start_time_windows[]

TimeWindow

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

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

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

end_time_windows[]

TimeWindow

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

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

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

unloading_policy

UnloadingPolicy

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

load_limits

map<string, LoadLimit>

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

cost_per_hour

double

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

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

cost_per_traveled_hour

double

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

cost_per_kilometer

double

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

fixed_cost

double

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

used_if_route_is_empty

bool

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

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

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

route_duration_limit

DurationLimit

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

travel_duration_limit

DurationLimit

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

route_distance_limit

DistanceLimit

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

extra_visit_duration_for_visit_type

map<string, Duration>

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

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

break_rule

BreakRule

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

label

string

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

ignore

bool

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

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

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

travel_duration_multiple

double

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

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

아래의 extra_visit_duration_for_visit_type도 참고하세요.

DurationLimit

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

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

필드
max_duration

Duration

기간을 최대 max_duration으로 제한하는 하드 한도입니다.

soft_max_duration

Duration

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

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

quadratic_soft_max_duration

Duration

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

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

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

double

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

  cost_per_hour_after_soft_max * (duration - soft_max_duration)

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

cost_per_square_hour_after_quadratic_soft_max

double

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

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

  cost_per_square_hour_after_quadratic_soft_max *
  (duration - quadratic_soft_max_duration)^2

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

LoadLimit

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

필드
soft_max_load

int64

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

cost_per_unit_above_soft_max

double

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

start_load_interval

Interval

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

end_load_interval

Interval

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

max_load

int64

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

cost_per_kilometer

LoadCost

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

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

cost_per_traveled_hour

LoadCost

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

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

간격

허용되는 부하량의 간격입니다.

필드
min

int64

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

max

int64

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

LoadCost

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

  • min(load, load_threshold) * cost_per_unit_below_threshold
  • max(0, load - load_threshold) * cost_per_unit_above_threshold

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

load_limit {
  key: "weight"
  value {
    cost_per_kilometer {
      load_threshold: 15
      cost_per_unit_below_threshold: 2.0
      cost_per_unit_above_threshold: 10.0
    }
  }
}

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

transition { vehicle_load['weight'] { amount: 0 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travel_distance_meters: 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 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travel_distance_meters: 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를 참고하세요.

필드
load_threshold

int64

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

cost_per_unit_below_threshold

double

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

cost_per_unit_above_threshold

double

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

TravelMode

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

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

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

열거형
TRAVEL_MODE_UNSPECIFIED 지정되지 않은 이동 수단으로, DRIVING과 동일합니다.
DRIVING 운전 경로에 해당하는 이동 수단 (자동차 등)입니다.
WALKING 도보 경로에 해당하는 이동 수단입니다.

UnloadingPolicy

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

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

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

VehicleFullness

VehicleFullness는 차량이 얼마나 가득 찼는지를 계산하는 측정항목입니다. 각 VehicleFullness 필드는 0과 1 사이이며, 상한이 있는 측정항목 필드(예: AggregatedMetrics.travel_distance_meters)와 관련 차량 한도(예: Vehicle.route_distance_limit) 간의 비율로 계산됩니다(있는 경우). 그렇지 않으면 채움 비율이 설정되지 않은 상태로 유지됩니다. 한도가 0이면 필드가 1로 설정됩니다. 참고: 경로가 트래픽 불가능 상태인 경우 일부 원시 충만도 비율이 1.0을 초과할 수 있습니다(예: 차량이 거리 한도를 초과할 수 있음). 이러한 경우 포화도 값은 1.0으로 제한됩니다.

필드
max_fullness

double

이 메시지의 다른 모든 필드의 최댓값입니다.

distance

double

AggregatedMetrics.travel_distance_meters와 Vehicle.route_distance_limit의 비율입니다. Vehicle.route_distance_limit가 설정되지 않은 경우 이 필드는 설정되지 않습니다.

travel_duration

double

[AggregatedMetrics.travel_duration_seconds][] 와 Vehicle.travel_duration_limit의 비율입니다. Vehicle.travel_duration_limit가 설정되지 않은 경우 이 필드는 설정되지 않습니다.

active_duration

double

[AggregatedMetrics.total_duration_seconds][] 와 Vehicle.route_duration_limit의 비율입니다. Vehicle.route_duration_limit가 설정되지 않은 경우 이 필드는 설정되지 않습니다.

max_load

double

모든 유형의 [AggregatedMetrics.max_load][] 와 해당 Vehicle.load_limits 간의 최대 비율입니다. 모든 Vehicle.load_limits 필드가 설정되지 않은 경우 이 필드는 설정되지 않습니다.

active_span

double

특정 차량의 비율 (vehicle_end_time - vehicle_start_time) / (latest_vehicle_end_time - earliest_vehicle_start_time)입니다. 분모가 없으면 대신 (ShipmentModel.global_end_time - ShipmentModel.global_start_time)를 사용합니다.

경유지

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

필드
side_of_road

bool

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

vehicle_stopover

bool

경유지가 차량이 정차하는 지점임을 나타내며, 승차 또는 하차를 목적으로 합니다. 이 옵션은 'DRIVING' 이동 수단에서만 작동하며 'location_type'이 'location'인 경우에만 작동합니다.

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

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

Location

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

place_id

string

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

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