Method: projects.locations.optimizeTours

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

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

목표는 비용이 ShipmentModel에 정의된 많은 구성요소를 포함하는 경우 총비용을 최소화하는 ShipmentRouteVehicle에 할당하는 것입니다.

HTTP 요청

POST https://routeoptimization.googleapis.com/v1/{parent=projects/*/locations/*}:optimizeTours

URL은 gRPC 트랜스코딩 문법을 사용합니다.

경로 매개변수

매개변수
parent

string

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

형식: * projects/{project-id} * projects/{project-id}/locations/{location-id}

위치를 지정하지 않으면 리전이 자동으로 선택됩니다.

요청 본문

요청 본문에는 다음과 같은 구조의 데이터가 포함됩니다.

JSON 표현
{
  "timeout": string,
  "model": {
    object (ShipmentModel)
  },
  "solvingMode": enum (SolvingMode),
  "searchMode": enum (SearchMode),
  "injectedFirstSolutionRoutes": [
    {
      object (ShipmentRoute)
    }
  ],
  "injectedSolutionConstraint": {
    object (InjectedSolutionConstraint)
  },
  "refreshDetailsRoutes": [
    {
      object (ShipmentRoute)
    }
  ],
  "interpretInjectedSolutionsUsingLabels": boolean,
  "considerRoadTraffic": boolean,
  "populatePolylines": boolean,
  "populateTransitionPolylines": boolean,
  "allowLargeDeadlineDespiteInterruptionRisk": boolean,
  "useGeodesicDistances": boolean,
  "label": string,
  "geodesicMetersPerSecond": number,
  "maxValidationErrors": integer
}
필드
timeout

string (Duration format)

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

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

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

model

object (ShipmentModel)

배송 모델을 해결합니다.

solvingMode

enum (SolvingMode)

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

searchMode

enum (SearchMode)

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

injectedFirstSolutionRoutes[]

object (ShipmentRoute)

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

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

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

  • 모든 경로에서 vehicleIndex는 범위 내에 있어야 하며 중복되지 않아야 합니다.
  • 모든 방문의 경우 shipmentIndexvisitRequestIndex가 범위에 있어야 합니다.
  • 배송은 한 경로에서만 참조될 수 있습니다.
  • 수령-배송 상품의 수령은 배송 전에 이루어져야 합니다.
  • 배송의 픽업 대체 옵션 또는 배송 대체 옵션은 2회까지만 수행할 수 있습니다.
  • 모든 경로의 경우 시간이 증가합니다 (즉, vehicleStartTime <= visits[0].start_time <= visits[1].start_time ... <= vehicleEndTime)
  • 허용되는 차량에서만 배송이 진행될 수 있습니다. Shipment.allowed_vehicle_indices가 비어 있거나 vehicleIndexShipment.allowed_vehicle_indices에 포함된 경우 차량이 허용됩니다.

삽입된 솔루션이 실행 가능하지 않은 경우 반드시 유효성 검사 오류가 반환되지는 않으며 실행 불가능성을 나타내는 오류가 대신 반환될 수 있습니다.

injectedSolutionConstraint

object (InjectedSolutionConstraint)

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

삽입된 솔루션이 실행 가능하지 않은 경우 반드시 유효성 검사 오류가 반환되지는 않으며 실행 불가능성을 나타내는 오류가 대신 반환될 수 있습니다.

refreshDetailsRoutes[]

object (ShipmentRoute)

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

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

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

이 필드는 injectedFirstSolutionRoutes 또는 injectedSolutionConstraint와 함께 사용해서는 안 됩니다.

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

interpretInjectedSolutionsUsingLabels

boolean

true인 경우:

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

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

삽입된 솔루션의 vehicleLabel가 요청 차량과 일치하지 않으면 해당 경로가 방문과 함께 솔루션에서 삭제됩니다. 삽입된 솔루션의 shipmentLabel가 요청 전송에 해당하지 않으면 해당 방문이 솔루션에서 삭제됩니다. 삽입된 솔루션의 SkippedShipment.label가 요청된 배송에 해당하지 않으면 SkippedShipment가 솔루션에서 삭제됩니다.

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

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

considerRoadTraffic

boolean

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

populatePolylines

boolean

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

populateTransitionPolylines

boolean

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

allowLargeDeadlineDespiteInterruptionRisk

boolean

이 속성이 설정된 경우 요청에 최대 60분의 기한 (https://grpc.io/blog/deadlines 참고)이 있을 수 있습니다. 그렇지 않으면 최대 기한은 30분입니다. 장기 요청은 중단될 위험이 상당히 높지만 여전히 작습니다.

useGeodesicDistances

boolean

이 값이 true이면 이동 거리가 Google 지도 거리 대신 지오데시시크 거리를 사용하여 계산되고 이동 시간은 geodesicMetersPerSecond로 정의된 속도로 지오데시시크 거리를 사용하여 계산됩니다.

label

string

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

geodesicMetersPerSecond

number

useGeodesicDistances가 true인 경우 이 필드를 설정해야 하며, 이 필드는 이동 시간 계산에 적용되는 속도를 정의합니다. 값은 1.0미터/초 이상이어야 합니다.

maxValidationErrors

integer

반환된 유효성 검사 오류 수를 자릅니다. 이러한 오류는 일반적으로 solvingMode=VALIDATE_ONLY가 아닌 경우 INVALID_ARGUMENT 오류 페이로드에 BadRequest 오류 세부정보 (https://cloud.google.com/apis/design/errors#error_details)로 첨부됩니다. OptimizeToursResponse.validation_errors 필드를 참고하세요. 기본값은 100이며 최대 10,000으로 제한됩니다.

응답 본문

성공한 경우 응답 본문에 OptimizeToursResponse의 인스턴스가 포함됩니다.

승인 범위

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

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

IAM 권한

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

  • routeoptimization.locations.use

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