경로 계획 수명 주기

이 페이지에서는 경로 최적화 API를 사용하는 경로 계획의 수명 주기를 설명합니다. 이 수명 주기는 라우팅 요구사항을 파악하는 것부터 시작하여 시스템에 통합된 경로 계획으로 끝납니다.

경로 계획의 단계를 따르면 다음 목표를 달성할 수 있습니다.

  • 차량 운영 매핑: 실제 차량, 복잡한 제약 조건, 비즈니스 목표를 API 코드로 변환합니다.
  • 비즈니스에 맞게 경로 계획 최적화: 목표를 달성하고 일상적인 운영을 개선할 수 있도록 경로 계획을 세분화하는 방법을 이해합니다.
  • 프로덕션에 배포: 경로 계획을 일상적인 운영에 포함하여 구현합니다.

다음 다이어그램은 경로 계획의 수명 주기를 보여줍니다.

아래 텍스트에 설명된 경로 계획의 수명 흐름 다이어그램

경로 계획의 구현 단계는 API를 처음 통합하거나 비즈니스 요구사항이 크게 변경될 때 발생합니다. 1~5단계를 다룹니다.

일상 운영 단계는 더 가볍고 미세 조정이 최소화됩니다. 2~4단계를 다룹니다.

경로 수명 단계는 다음과 같습니다.

  1. 문제 범위 지정: API를 사용하기 전에 목표, 리소스, 태스크, 제약조건을 식별하고 구성하여 운영을 전체적으로 파악합니다.
  2. 데이터 매핑: 비즈니스 현실을 API 매개변수로 변환하여 경로 계획이 차량 운영 방식을 반영하도록 합니다.
  3. 요청을 만들고 경로 계획 가져오기: API에 데이터를 입력하고 최적화된 경로 계획을 가져옵니다.
  4. 경로 계획 미세 조정: 경로 계획을 테스트하고 제약 조건과 목표를 조정하여 모든 요구사항을 충족하는지 확인합니다.
  5. 경로 계획 통합: 경로 계획을 기존 시스템에 연결하여 실행 가능한 탐색을 제공합니다.

문제 범위 지정

API를 사용하기 전에 일상적인 작업의 세부정보를 명확한 데이터 카테고리로 정리해야 합니다. 이를 통해 현재 리소스와 작업, 제약 조건, 차량으로 달성하려는 목표를 명확히 파악한 상태에서 구현 프로세스를 시작할 수 있습니다.

리소스 및 작업 식별

경로 계획을 계획할 때 중요한 단계는 차량 및 배송인 리소스와 태스크를 식별하는 것입니다.

차량 배송
  • 수: 차량을 몇 대 보유하고 있나요?
  • 위치: 차량이 어디에서 출발하고 어디에서 도착하나요?
  • 시간: 차량 운전자의 근무 시간은 어떻게 되나요?
  • 용량: 차량의 한도는 어떻게 되나요?
  • 비용: 차량 운영 비용은 얼마인가요?
  • 위치: 수령 및 배송 지점은 어디인가요?
  • 요구사항: 패키지의 무게 또는 크기는 어떻게 되나요?
  • 제약 조건: 배송을 위한 특정 기간이 있나요?
  • 서비스 시간: 운전자가 주차하고 하차하는 데 걸리는 시간입니다.
  • 요구사항: 배송에 특정 차량 유형이나 운전자가 필요한가요?

제약 조건 파악

제약조건은 차량을 사용하는 방법과 배송을 처리하는 방법에 대한 한도 및 제한사항입니다. 대부분의 운영을 좌우하며 최적화된 경로 계획을 수립할 때 매우 중요합니다.

제약조건은 일반적으로 다음 두 가지 카테고리로 분류됩니다.

엄격한 제약 조건 소프트 제약 조건
이러한 한도는 위반할 수 없습니다. 예를 들어 트럭은 최대 용량보다 많은 중량을 운반할 수 없으며 운전자는 매장이 문을 닫은 후에는 수령할 수 없습니다. 이는 필요한 경우 위반할 수 있는 환경설정이며, 일반적으로 페널티 비용이 발생합니다. 예를 들어 트럭을 80% 용량까지만 적재하거나 목표 시간 전에 배송하는 것을 선호하지만 더 나은 경로를 얻기 위해 이러한 한도를 초과해도 괜찮습니다.

일반적인 제약 조건은 다음과 같습니다.

  • 용량 한도: 차량이 운반할 수 있는 최대 중량, 부피 또는 상품 수입니다.
  • 기간: 방문을 위해 위치가 열려 있는 특정 시간대 또는 운전자의 특정 교대 근무 시간입니다.
  • 비용: 차량을 운행하거나 배송을 건너뛰는 비용입니다. API의 주요 목표 중 하나는 비용 효율적인 경로 계획을 생성하는 것입니다.
  • 운전자 휴식: 일반적으로 일정 시간 근무 후 노동법에 따라 요구되는 운전자 휴식 시간입니다.

비즈니스 목표 설정

리소스와 태스크, 제한사항을 설정했으면 이제 비즈니스에 가장 중요한 측정항목을 설정해야 합니다. 이러한 목표는 제약조건과 밀접하게 관련되어 있으며 경로를 계획할 때 가장 중요한 사항을 결정하는 데 도움이 됩니다.

다음은 비즈니스 목표의 몇 가지 예입니다.

보유 중인 사업용 차량 대수 거리 시간 비용
사용하는 차량 수를 최소화하고 싶으신가요? 아니면 전체 차량을 사용하여 업무를 더 일찍 끝내고 싶으신가요? 연료를 절약하기 위해 최단 경로를 원하시나요, 아니면 고속도로를 이용해 거리는 더 멀지만 더 빠른 경로를 원하시나요? 총 근무 시간을 최소화하고 싶으신가요? 아니면 특정 시간에 도착하는 것을 우선시하여 경로에서 보내는 시간을 늘리고 싶으신가요? 임금 및 연료와 같은 운영 비용을 최소화하고 싶으신가요? 아니면 엄격한 기한을 맞추기 위해 더 높은 비용을 감수하고 싶으신가요?

데이터 매핑

데이터를 수집한 후 API 속성과 일치하도록 매핑합니다. 이렇게 하면 최적화 도구에 비즈니스 현실을 고려한 경로 계획을 반환하는 데 필요한 모든 정보가 제공됩니다.

다음 표의 매개변수를 사용하여 문제 범위 지정 섹션에서 매핑한 리소스, 작업, 제약조건, 목표를 매핑합니다.

변수 매핑

실제 개념 API 매개변수 설명
운전자 또는 차량 model.vehicles[] 차량의 단일 차량을 나타냅니다.
창고 위치 vehicles[].startWaypoint
vehicles[].endWaypoint
차량이 경로를 시작하고 종료하는 위치입니다.
영업시간 model.globalStartTime
model.globalEndTime
전체 차량 작업의 가장 이른 시작 시간과 가장 늦은 종료 시간입니다.
작업 또는 패키지 model.shipments[] 작업을 나타냅니다. pickup, delivery 또는 둘 다일 수 있습니다.
작업 위치 pickups[].arrivalWaypoint
deliveries[].arrivalWaypoint
작업이 수행되는 지리적 위치입니다.
서비스 시간 pickups[].duration
deliveries[].duration
이동 시간을 제외하고 위치에서 작업을 완료하는 데 소요된 시간 (예: 하역)입니다.

제약 조건 매핑

실제 제약 조건 API 매개변수 설명
차량 수용 인원 vehicles[].loadLimits 차량 용량의 엄격한 한도 또는 유연한 한도를 설정합니다. 배송의 loadDemand이 남은 한도를 초과하면 할당되지 않습니다.
패키지 크기 shipments[].loadDemands 배송이 소비하는 차량 용량입니다.
차량 제한 shipments[].allowedVehicleIndices 특정 차량 또는 운전자만 배송을 수령하거나 배송할 수 있도록 배송을 제한합니다.
이용 가능한 시간 shipments[].pickups[].timeWindows 또는 shipments[].deliveries[].timeWindows 위치를 방문할 수 있는 시간을 설정합니다. 차량이 이 기간 내에 도착할 수 없으면 배송이 건너뛰어집니다.
교대 근무 시간 제한 vehicles[].routeDurationLimit 전역 종료 시간과 관계없이 특정 운전자가 근무할 수 있는 시간에 대한 엄격한 상한 또는 완화된 상한을 설정합니다 (예: 최대 8시간).
운전자 휴식 vehicles[].breakRule 일정 시간 근무 후 필수 휴식과 같은 특정 휴식 규칙을 적용합니다.
도로 제한 vehicles[].travelMode 이동 수단 (예: DRIVE 또는 BICYCLE)을 지정합니다. 이렇게 하면 경로가 법적 도로로 제한되고 이동 시간을 계산하는 데 사용되는 속도가 결정됩니다.

목표 매핑

실제 목표 API 매개변수 설명
차량 규모 최소화 vehicles[].fixedCost 차량 사용에 일회성 비용을 적용합니다. 고정 비용이 높으면 경로에서 총 이동 거리나 작업 시간을 늘리는 것보다 더 적은 차량을 사용하는 것을 우선시합니다.
거리 최소화 vehicles[].costPerKilometer 이동한 거리(킬로미터)당 비용을 적용합니다. 연료를 절약하고 마모를 줄이기 위해 더 짧은 경로를 우선시합니다.
총 시간 최소화 vehicles[].costPerHour 차량이 활성 상태인 시간당 비용을 적용합니다 (이동 및 대기 시간 포함). 더 빠른 완료를 우선시합니다.
운전 시간 최소화 vehicles[].costPerTraveledHour 이동에 소요된 시간에 대한 비용을 적용합니다. 이를 통해 교통 체증으로 인한 대기 (비용이 많이 듦)와 정류장에서의 대기(비용이 적게 들 수 있음)를 구분합니다.
특정 작업에 우선순위 지정하기 shipments[].penaltyCost 특정 배송이 건너뛰어진 경우 비용을 적용합니다. 이 값을 높게 설정하면 선택적 작업보다 중요한 작업에 우선순위가 부여됩니다.

요청 만들기 및 응답 가져오기

Route Optimization API를 사용하여 경로 계획을 생성하려면 다음 단계를 따르세요.

  1. 환경 구성: Google Cloud 프로젝트를 설정하고 API를 사용 설정하고 인증을 구성합니다. 자세한 내용은 시작하기를 참조하세요. 이 단계는 한 번만 수행하면 됩니다.
  2. 요청 전송: 이전 섹션에서 정의한 데이터 매핑을 사용하여 요청 본문을 구성합니다. 엔드포인트, 헤더, 요청 형식에 대한 자세한 내용은 API 요청하기를 참조하세요.
  3. 응답 이해: API에서 응답을 받으면 경로 계획과 각 파라미터의 의미를 이해합니다. 응답 해석을 참조하세요.

경로 계획 세분화

실제 물류를 API 비용 및 제약조건으로 변환하는 것은 복잡한 작업입니다. 초기 경로 계획이 비즈니스 목표나 운전자 기대치와 일치하지 않을 수 있습니다. 경로 계획을 미세 조정하는 것은 반환된 경로를 테스트하고 목표를 달성하는 설정을 찾을 때까지 매개변수를 조정하는 반복적인 프로세스입니다.

목표 및 제약조건 조정

생성된 경로 계획이 요구사항을 충족하지 않는 경우 특정 매개변수를 수정하여 다른 결과를 얻을 수 있습니다. 매개변수를 강화하거나 완화하면 경로 계획에서 상충되는 목표가 해결되는 방식이 변경되며, 매개변수를 완화하면 경로 계획에서 오류를 일으키는 매개변수를 효율적으로 찾을 수 있습니다.

다음 표에는 일반적인 라우팅 문제와 이를 해결하기 위해 조정할 수 있는 매개변수가 나와 있습니다.

시나리오 매개변수 조정 설명
중요한 배송이 누락됨 shipments[].penaltyCost 값을 늘리거나 다른 배송에 페널티 비용을 추가합니다. 배송이 선택사항인 경우 페널티 비용을 늘려 우선순위를 지정합니다. 배송이 필수인 경우 (페널티 비용이 없음) 다른 덜 중요한 배송에 페널티 비용을 추가합니다. 이렇게 하면 선택사항이 되므로 중요한 배송을 위해 차량 시간과 용량을 확보할 수 있습니다.
타이밍으로 인해 배송 건너뜀 softStartTime/softEndTime 소프트 시간대 추가 엄격한 시간 창은 1분이라도 늦은 작업을 삭제합니다. 소프트 기간을 사용하면 운전자가 할당에 실패하는 대신 '비용'을 지불하여 일정에서 약간 벗어나 도착할 수 있습니다.
무게로 인해 배송 건너뜀 loadLimits[].softMaxLoad 및 costPerUnitAbove 소프트 로드 수요 추가 배송 상품을 남겨두는 대신 차량이 이상적인 용량을 약간 초과하도록 허용합니다 (페널티 적용).
차량 과부하로 인해 배송 건너뜀 model.vehicles[] 또는 shipments[].timeWindows 차량 추가 또는 시간대 완화 특히 에너지 수요가 높은 시간대에 현재 차량에 비해 배송이 너무 많은 경우 차량을 더 추가하거나 배송 기간을 넓혀 워크로드를 분산합니다.
경로가 너무 길거나 비효율적임 vehicles[].costPerKilometer/costPerHour 비용 추가 또는 가치 증대 API에 이동 비용이 많이 든다고 알려주어 멀리 떨어져 있는 고립된 경유지를 삭제하여 차량의 경로를 더 좁게 만들도록 유도합니다.
운전자의 근무 시간이 너무 김 vehicles[].routeDurationLimit 또는 model.vehicles[] 기간 제한을 추가하거나 차량 및 제한을 추가하세요. 운전자가 도로에서 보내는 총 시간에 엄격한 상한선 (예: 8시간)을 적용합니다. 차량을 추가하는 것만으로는 경로가 단축되지 않습니다. 솔버가 더 큰 차량에 워크로드를 분산하도록 기간 제한을 적용해야 합니다.

경로 계획 업데이트

활성 상태인 운전자의 일정에 수거를 추가하는 등 기본을 동일하게 유지하면서 경로 계획을 업데이트해야 하는 경우가 많습니다. 이렇게 하려면 이전 솔루션을 기반으로 API에 시작을 제공하는 삽입 매개변수를 사용하여 처음부터 새 계획을 계산하는 대신 기존 계획을 수정할 수 있습니다.

다음은 삽입 매개변수를 사용하여 경로 계획을 업데이트하는 다양한 방법입니다.

  • 이전 응답의 경로를 새 요청의 injectedFirstSolutionRoutes 필드에 전달합니다. 이렇게 하면 최적화 검색 속도가 빨라지고 일일 작업이 시작되기 전에 마지막 배송을 통합하는 등 다시 계획하는 데 유용합니다.
  • injectedSolutionConstraint 필드를 사용하여 변경 정도를 제어합니다. 이는 작업이 이미 진행 중인 경우에 유용하며, 운전자의 현재 순서를 유지하거나 이미 실행된 계획의 일부를 수정할 수 있습니다.
  • interpretInjectedSolutionsUsingLabels를 true로 설정하여 업데이트된 경로가 올바른 차량에 할당된 상태로 유지되도록 합니다. 이는 색인 대신 라벨을 사용하여 경로를 일치시키므로 배송 및 차량을 추가하거나 삭제할 때 실험에 유용합니다. 이렇게 하려면 모든 차량 및 배송 라벨이 고유해야 합니다.

경로 계획 통합

최종 경로 계획은 제약 조건과 목표를 따르면서 리소스 및 태스크의 최적화된 관리를 나타내는 데이터 객체입니다. 이 경로 계획을 시스템에 통합하여 일상적인 운영에 사용하세요. 여기에는 일반적으로 차량 관리자를 위한 경로 계획을 시각화하고 운전자에게 세부 경로 안내를 전송하는 작업이 포함됩니다.

시각화

Fleet Manager가 경로 계획을 확인하고 모니터링할 수 있도록 다음과 같은 방법으로 경로 계획을 시각화할 수 있습니다.

차량 관리자가 경로 계획을 확인하고 모니터링할 수 있도록 대시보드 지도에 표시할 수 있습니다. 현재 개발 단계에 따라 다음과 같은 방법으로 경로 계획을 시각화할 수 있습니다.

  • 코드 없이 탐색: 오픈소스 경로 최적화 앱을 사용하여 API가 데이터를 지도상의 실제 경로로 변환하는 방식을 확인할 수 있습니다. 이 웹 애플리케이션은 코드를 작성하기 전에 시나리오를 구성하고, 제약 조건 매개변수를 조정하고, 결과 경로 계획을 시각적으로 렌더링할 수 있는 탐색 도구 역할을 합니다.
  • 방문 순서 표시: 방문 순서를 지도에 번호가 매겨진 지점으로 표시하여 자체 시스템에서 최적화 및 발송 계획을 평가할 수 있습니다. 이렇게 하려면 API 응답의 각 경로 내에서 visits 배열을 찾습니다. 이 배열의 항목은 드라이버가 실행해야 하는 순서대로 정렬됩니다. 이 목록을 반복하고 shipmentIndex를 사용하여 각 정류장의 위치 좌표를 가져오고 매핑 라이브러리를 사용하여 목록의 순서에 따라 지도에 번호가 매겨진 마커를 렌더링할 수 있습니다.
  • 실제 경로 그리기: 지도에서 계획된 정확한 경로를 시각화하여 최적화 도구가 특정 시퀀스를 선택한 이유를 이해할 수 있습니다. 이 다중선은 계획 및 평가를 위한 의도된 경로를 나타내며 운전자가 실시간으로 이동하는 경로를 나타내지 않습니다. 요청에서 populatePolylines: true를 설정하여 각 경로의 encodedPolyline 필드를 가져오고 Maps JavaScript API의 google.maps.geometry.encoding.decodePath() 메서드를 사용하여 디코딩합니다.

운전자에게 배차

Navigation SDK를 사용하여 운전자 애플리케이션에 세부 경로 안내를 통합하거나 Google 지도 소비자 앱에 대한 딥 링크를 제공할 수 있습니다.

  • Navigation SDK: 맞춤 운전자 애플리케이션이 있는 경우 Android용 Navigation SDK 또는 iOS를 통합하여 인앱 세부 경로 안내를 제공할 수 있습니다. API 응답의 작업 정보를 시스템에 통합하고 SDK를 내비게이션에 사용할 수 있습니다. API 응답의 경로를 SDK에 전달하려면 요청에서 populateTransitionPolylines: true를 설정합니다. 이렇게 하면 응답의 각 전환에 대해 routeToken가 생성됩니다.
  • Fleet Engine: 고급 차량 관리를 위해 API에서 생성된 경로 계획을 Fleet Engine으로 가져와 경로 실행을 실시간으로 모니터링할 수 있습니다. API는 평가를 위해 의도된 경로의 다중선을 제공하지만 Fleet Engine은 계획된 방문 순서를 실시간 차량 추적과 페어링합니다.