Method: projects.optimizeTours
컬렉션을 사용해 정리하기
내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
ShipmentModel
가 포함된 OptimizeToursRequest
를 전송하고 전체 비용을 최소화하면서 차량이 실행할 경로 집합인 ShipmentRoute
가 포함된 OptimizeToursResponse
를 반환합니다.
ShipmentModel
모델은 주로 실행해야 하는 Shipment
와 Shipment
를 전송하는 데 사용할 수 있는 Vehicle
로 구성됩니다. ShipmentRoute
는 Shipment
를 Vehicle
에 할당합니다. 더 구체적으로는 각 차량에 일련의 Visit
를 할당합니다. 여기서 Visit
는 Shipment
의 수령 또는 배송인 VisitRequest
에 해당합니다.
목표는 비용이 ShipmentModel
에 정의된 많은 구성요소를 포함하는 경우 총비용을 최소화하는 ShipmentRoute
를 Vehicle
에 할당하는 것입니다.
HTTP 요청
POST https://routeoptimization.googleapis.com/v1/{parent=projects/*}: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 이(가) 범위 내에 있어야 하며 중복되지 않아야 합니다.
- 모든 방문의 경우
shipmentIndex 및 visitRequestIndex 가 범위에 있어야 합니다.
- 하나의 경로에서만 배송을 참조할 수 있습니다.
- 수령-배송 상품의 수령은 배송 전에 이루어져야 합니다.
- 배송의 픽업 대체 옵션 또는 배송 대체 옵션은 2회까지만 수행할 수 있습니다.
- 모든 경로의 경우 시간이 증가합니다(즉,
vehicleStartTime
<= visits[0].start_time <= visits[1].start_time ...
<= vehicleEndTime )
- 허용되는 차량에서만 배송이 이루어질 수 있음
Shipment.allowed_vehicle_indices 가 비어 있거나 vehicleIndex 이 Shipment.allowed_vehicle_indices 에 포함된 경우 차량이 허용됩니다.
삽입된 솔루션을 실행할 수 없는 경우 유효성 검사 오류가 반드시 반환되지는 않으며 대신 실행 불가능을 나타내는 오류가 반환될 수 있습니다.
|
injectedSolutionConstraint |
object (InjectedSolutionConstraint )
최적화 알고리즘을 제약하여 이전 솔루션과 유사한 최종 솔루션을 찾습니다. 예를 들어 이미 완료되었거나 완료해야 하지만 수정해서는 안 되는 경로의 일부를 고정하는 데 사용할 수 있습니다. 삽입된 솔루션을 실행할 수 없는 경우 유효성 검사 오류가 반드시 반환되지는 않으며 대신 실행 불가능을 나타내는 오류가 반환될 수 있습니다.
|
refreshDetailsRoutes[] |
object (ShipmentRoute )
비어 있지 않은 경우 기본 방문 순서 또는 이동 시간을 수정하지 않고 지정된 경로가 새로고침되며 다른 세부정보만 업데이트됩니다. 이 방법으로는 모델이 해결되지 않습니다. 2020년 11월부터는 비어 있지 않은 경로의 다중선만 채워지며 populatePolylines 가 true여야 합니다. 전달된 경로의 routePolyline 필드가 경로 transitions 와 일치하지 않을 수 있습니다. 이 필드는 injectedFirstSolutionRoutes 또는 injectedSolutionConstraint 와 함께 사용해서는 안 됩니다. Shipment.ignore 및 Vehicle.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 문서를 참조하세요.
달리 명시되지 않는 한 이 페이지의 콘텐츠에는 Creative Commons Attribution 4.0 라이선스에 따라 라이선스가 부여되며, 코드 샘플에는 Apache 2.0 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 Google Developers 사이트 정책을 참조하세요. 자바는 Oracle 및/또는 Oracle 계열사의 등록 상표입니다.
최종 업데이트: 2025-08-31(UTC)
[null,null,["최종 업데이트: 2025-08-31(UTC)"],[[["\u003cp\u003eThe Route Optimization API minimizes the total cost of routes by assigning \u003ccode\u003eShipmentRoute\u003c/code\u003es to \u003ccode\u003eVehicle\u003c/code\u003es.\u003c/p\u003e\n"],["\u003cp\u003eThe API takes an \u003ccode\u003eOptimizeToursRequest\u003c/code\u003e with a \u003ccode\u003eShipmentModel\u003c/code\u003e and returns an \u003ccode\u003eOptimizeToursResponse\u003c/code\u003e with \u003ccode\u003eShipmentRoute\u003c/code\u003es.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eShipmentModel\u003c/code\u003e defines the \u003ccode\u003eShipment\u003c/code\u003es to be transported, the \u003ccode\u003eVehicle\u003c/code\u003es available, and the cost components.\u003c/p\u003e\n"],["\u003cp\u003eThe API considers various factors, including traffic, time windows, and vehicle capacities, to optimize the routes.\u003c/p\u003e\n"],["\u003cp\u003eAuthorization is required using OAuth scope \u003ccode\u003ehttps://www.googleapis.com/auth/cloud-platform\u003c/code\u003e and IAM permission \u003ccode\u003erouteoptimization.locations.use\u003c/code\u003e.\u003c/p\u003e\n"]]],["This content details the `OptimizeTours` API, which optimizes routes for shipments using vehicles. The core action involves sending a `POST` request to `https://routeoptimization.googleapis.com/v1/{parent=projects/*}:optimizeTours`, specifying a `ShipmentModel` within the request body. This model defines shipments, vehicles, and cost parameters. The API returns an `OptimizeToursResponse` that details `ShipmentRoute`s, assigning visits to each vehicle to minimize costs. The request body allows for parameters like `timeout`, `solvingMode`, and `injectedSolutionConstraint` to further fine-tune the route optimization process.\n"],null,[]]