이 시나리오는 간단한 비용 매개변수를 사용하여 차량에 할당된 정류장 순서를 최적화합니다. 이것은 경로 최적화 작업의 가장 간단한 모드입니다. 지정된 기간 내에 모든 정류장이 방문되도록 합니다.
다음 예는 차량 한 대와 세 대의 차량이 있는 기본 시나리오를 보여줍니다. 모든 배송이 depot라고 하는 단일 위치에서 배송됩니다.
요청 예 보기
{ "populatePolylines": true, "populateTransitionPolylines": true, "model": { "globalStartTime": "2023-01-13T16:00:00-08:00", "globalEndTime": "2023-01-14T16:00:00-08:00", "shipments": [ { "deliveries": [ { "arrivalLocation": { "latitude": 37.789456, "longitude": -122.390192 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ] }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.789116, "longitude": -122.395080 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ] }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.795242, "longitude": -122.399347 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ] } ], "vehicles": [ { "endLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "startLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "costPerKilometer": 10.0, "costPerHour": 40.0 } ] } }
경로 최적화 요청 필드
개요의 설명대로, 가장 중요한 경로 최적화 요청은
속성은 vehicles
및 shipments
입니다.
차량 및 배송 외에도 요청에는 다음이 포함됩니다. 필드:
다중선
populatePolylines
및 populateTransitionPolylines
는 Routes
최적화 시 다중선을 반환해야 합니다.
이 서비스는
바이너리 폴리라인 데이터를 사용합니다. 이
대화형 폴리라인 인코더 유틸리티를 사용하면
경로 최적화. 이 가이드의 예는 populatePolylines
및
populateTransitionPolylines
를 true로 설정했지만 다른 가이드에서는 이를 false로 설정했습니다.
응답 크기를 줄입니다
인코딩 형식에 대한 설명은 인코딩된 폴리라인 알고리즘 형식을 참고하세요.
전 세계 시간 제한
model.globalStartTime
및 model.globalEndTime
가 임의의 24로 설정됩니다.
1시간 단위입니다. 이렇게 하면 출력 타임스탬프를 더 쉽게 해석할 수 있습니다.
매장 방문
요청 예에서는 model.shipments[].pickups[].arrivalLocation
및
model.shipments[].deliveries[].arrivalLocation
입니다. 또한
차량이 다음 위치에서 출발하는 상황의 departureLocation
속성
입구가 있는 주차장 단지처럼 목적지가 도착하는 곳과 다른 지점
다른 쪽에는 출구가 있습니다 이번 및 이후
도착 지점과 출발 지점은 동일한 것으로 가정합니다.
latLng
대신 도착 및 출발 waypoint
도 이용할 수 있습니다.
Waypoint
필드는 LatLng
대신 Google 장소 ID를 사용할 수 있도록 지원합니다.
차량 제목을 지정할 수도 있습니다. 참조 문서 보기
(REST, gRPC)를 참조하세요.
예시의 제약조건
이 시나리오에서는 여러 가지 방법으로 옵티마이저를 제한합니다.
- 모든 활동은 전역 시작 시간과 종료 시간 사이에 완료되어야 합니다. 이 시나리오에서는 시작 시간과 종료 시간이 매우 느슨합니다. 글로벌 배송 기간을 크게 단축할 수 있습니다.
- 모든 배송이 완료되어야 합니다. 이것은
shipments
에 위약금 비용이 지정되지 않았습니다. - 차량에
costPerKilometer
및costPerHour
가 설정되어 있습니다.
비용은 비용 모델 매개변수에서 다룹니다.
경로 최적화 응답 속성
예시 요청에 대한 응답 보기
{ "routes": [ { "vehicleStartTime": "2023-01-14T00:00:00Z", "vehicleEndTime": "2023-01-14T00:36:41Z", "visits": [ { "shipmentIndex": 2, "isPickup": true, "startTime": "2023-01-14T00:00:00Z", "detour": "0s" }, { "shipmentIndex": 1, "isPickup": true, "startTime": "2023-01-14T00:02:30Z", "detour": "150s" }, { "isPickup": true, "startTime": "2023-01-14T00:05:00Z", "detour": "300s" }, { "startTime": "2023-01-14T00:11:25Z", "detour": "0s" }, { "shipmentIndex": 1, "startTime": "2023-01-14T00:19:29Z", "detour": "503s" }, { "shipmentIndex": 2, "startTime": "2023-01-14T00:29:02Z", "detour": "1324s" } ], "transitions": [ { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-14T00:00:00Z", "routePolyline": {} }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-14T00:02:30Z", "routePolyline": {} }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-14T00:05:00Z", "routePolyline": {} }, { "travelDuration": "235s", "travelDistanceMeters": 795, "waitDuration": "0s", "totalDuration": "235s", "startTime": "2023-01-14T00:07:30Z", "routePolyline": { "points": "kvteFtfjVAA?C?C@C?A?C@AFMj@s@JKb@k@Zc@LSjA}ARWDGdAxAdAvAXa@@k@AsA\\c@FKp@_A\\c@Ze@fA{ALSFGd@o@rAgBB{BZc@" } }, { "travelDuration": "234s", "travelDistanceMeters": 793, "waitDuration": "0s", "totalDuration": "234s", "startTime": "2023-01-14T00:15:35Z", "routePolyline": { "points": "cwseFti_jVRWj@w@x@eAHLNRHJbApAHLX\\V^?@hA~AT\\PVFFDHDFJNp@~@NRLNNTFFUZIJY^Y^g@p@[`@KP{@fAEFSXe@l@c@h@WZY\\?BELk@v@MNa@l@" } }, { "travelDuration": "323s", "travelDistanceMeters": 1204, "waitDuration": "0s", "totalDuration": "323s", "startTime": "2023-01-14T00:23:39Z", "routePolyline": { "points": "cuseFhjVSTY`@Yb@GHEDIJEF]f@IJi@r@oAbBeCfDKLaApAKNQVIPKPCDQJIBIBM@iAJeALqBVC@C?A?QBYDI@C?_@Dc@FO@a@FDp@HfAHvABVDl@Dj@PpCQDiALsALAQASKwAOgBEe@COCYEa@Es@Eg@" } }, { "travelDuration": "209s", "travelDistanceMeters": 665, "waitDuration": "0s", "totalDuration": "209s", "startTime": "2023-01-14T00:33:12Z", "routePolyline": { "points": "{zteFxbajV?CAYEc@AMC_@AOAK?E?CCWAOAKCe@CY?WScDEm@d@EFA\\ENCB?XEVC^E`@EhBUVCNEB?@?\\Er@IMUe@k@k@w@AAMQa@i@SWQWMQi@u@AC?A" } } ], "routePolyline": { "points": "kvteFtfjVAA?C?C@C?A?C@AFMj@s@JKb@k@Zc@LSjA}ARWDGdAxAdAvAXa@@k@AsA\\c@FKp@_A\\c@Ze@fA{ALSFGd@o@rAgBB{BZc@RWj@w@x@eAHLNRHJbApAHLX\\V^?@hA~AT\\PVFFDHDFJNp@~@NRLNNTFFUZIJY^Y^g@p@[@KP{@fAEFSXe@l@c@h@WZY\\?BELk@v@MNa@l@STY@Yb@GHEDIJEF]f@IJi@r@oAbBeCfDKLaApAKNQVIPKPCDQJIBIBM@iAJeALqBVC@C?A?QBYDI@C?_@Dc@FO@a@FDp@HfAHvABVDl@Dj@PpCQDiALsALAQASKwAOgBEe@COCYEa@Es@Eg@?CAYEc@AMC_@AOAK?E?CCWAOAKCe@CY?WScDEm@d@EFA\\ENCB?XEVC^E`@EhBUVCNEB?@?\\Er@IMUe@k@k@w@AAMQa@i@SWQWMQi@u@AC?A" }, "metrics": { "performedShipmentCount": 3, "travelDuration": "1001s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "1200s", "totalDuration": "2201s", "travelDistanceMeters": 3457 }, "travelSteps": [ { "duration": "0s", "routePolyline": {} }, { "duration": "0s", "routePolyline": {} }, { "duration": "0s", "routePolyline": {} }, { "duration": "227s", "distanceMeters": 794, "routePolyline": { "points": "kvteFtfjVAA?C?C@C?A?C@AFMj@s@JKb@k@Zc@LSjA}ARWDGdAxAdAvAXa@@k@AsA\\c@FKp@_A\\c@Ze@fA{ALSFGd@o@rAgBB{BZc@" } }, { "duration": "233s", "distanceMeters": 791, "routePolyline": { "points": "cwseFti_jVRWj@w@x@eAHLNRHJbApAHLX\\V^?@hA~AT\\PVFFDHDFJNp@~@NRLNNTFFUZIJY^Y^g@p@[`@KP{@fAEFSXe@l@c@h@WZY\\?BELk@v@MNa@l@" } }, { "duration": "322s", "distanceMeters": 1205, "routePolyline": { "points": "cuseFhjVSTY`@Yb@GHEDIJEF]f@IJi@r@oAbBeCfDKLaApAKNQVIPKPCDQJIBIBM@iAJeALqBVC@C?A?QBYDI@C?_@Dc@FO@a@FDp@HfAHvABVDl@Dj@PpCQDiALsALAQASKwAOgBEe@COCYEa@Es@Eg@" } }, { "duration": "208s", "distanceMeters": 666, "routePolyline": { "points": "{zteFxbajV?CAYEc@AMC_@AOAK?E?CCWAOAKCe@CY?WScDEm@d@EFA\\ENCB?XEVC^E`@EhBUVCNEB?@?\\Er@IMUe@k@k@w@AAMQa@i@SWQWMQi@u@AC?A" } } ], "vehicleDetour": "2201s", "routeCosts": { "model.vehicles.cost_per_hour": 24.455555555555556, "model.vehicles.cost_per_kilometer": 34.57 }, "routeTotalCost": 59.025555555555556 } ], "totalCost": 59.025555555555556, "metrics": { "aggregatedRouteMetrics": { "performedShipmentCount": 3, "travelDuration": "1001s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "1200s", "totalDuration": "2201s", "travelDistanceMeters": 3457 }, "usedVehicleCount": 1, "earliestVehicleStartTime": "2023-01-14T00:00:00Z", "latestVehicleEndTime": "2023-01-14T00:36:41Z", "totalCost": 59.025555555555556, "costs": { "model.vehicles.cost_per_kilometer": 34.57, "model.vehicles.cost_per_hour": 24.455555555555556 } } }
경로 최적화 응답에는routes
차량당 하나의 경로가 포함된 제안된 경로를 나타냅니다. 예를 들어
요청의 요청은 하나의 차량만 지정합니다. routes
에는 하나의 차량이 포함됩니다.
ShipmentRoute
메시지
숙박 시설 ShipmentRoute
개
ShipmentRoute
메시지 유형의 가장 중요한 두 가지 속성은 visits
및 transitions
입니다.
각 Visit
는 다음 위치에서의 수령 또는 배달 완료를 나타냅니다.
요청 메시지의 VisitRequest
입니다. 방문은 실질적으로 업무가 할당된
특정 장소와 시간에 차량으로 완료하는 것입니다.
각 Transition
는 한 위치에서 다음 위치로 이동하는 차량을 나타냅니다.
있습니다. 전환은 한 쌍의 차량이 출발 지점인 도착한 후
위치, 차량의 종점입니다.
차량의 전체 경로를 재구성하려면 ShipmentRoute
의 visits
및
transitions
를 결합해야 합니다. 차량 활동의 진행 중인 필드 조합은 다음과 같습니다.
request.vehicles[0].startLocation -> transitions[0] -> visits[0] ->
transitions[1] -> visits[1] -> transitions[2] -> ... -> visits[3] ->
transitions[4] -> request.vehicles[0].endLocation
ShipmentRoute
에는 항상 visits
보다 하나 이상의 transitions
가 있습니다.
차량이 시작 위치에서 첫 번째 방문 지점까지 이동해야 합니다.
마지막 방문에서 출발하여 도착 지점까지
있습니다. 차량에 시작 위치 또는 종료 위치가 없는 경우에도 visits
보다 transitions
가 하나 더 많습니다. 첫 번째 또는 마지막 방문 위치가 차량의 시작 위치 또는 종료 위치로 각각 사용되기 때문입니다.
이 예에서는 처음 3회의 수령 방문과 그 사이에 전환이 발생합니다. 세 개의 승차 위치가 모두 요청할 때 동일한 위치를 공유합니다.
자세한 내용은 ShipmentRoute
참조 문서 (REST, gRPC)를 확인하세요.
자세히 알아보세요.
간단한 경유지 순서 최적화
이 예에서 볼 수 있듯이 경로 최적화 모델은 방문을 배송의 속성으로 모델링하며 독립된 항목으로 중간 지점 또는 정류장을 포함하지 않습니다. 하지만 VisitRequest
을 픽업 또는 배송으로 정확히 하나만 사용하여 중간 정류장 또는 중간 지점을 배송으로 나타낼 수 있습니다. 차량이 여전히
옵티마이저가 costPerHour
또는 costPerKilometer
를 할당해야 합니다.
최적의 경로를 찾습니다.