경로 계획 수명 주기

이 페이지에서는 경로 최적화 API를 사용하여 라우팅 요구사항을 식별하는 것부터 시스템에 통합된 경로 계획으로 마무리하는 것까지 경로 계획의 수명에 대해 설명합니다.

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

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

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

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

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

일일 운영 단계는 더 가볍고 개선은 최소화됩니다. 2~4단계를 다룹니다.

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

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

문제 범위 지정

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

리소스 및 작업 식별

경로 계획을 세울 때 중요한 단계는 리소스와 작업(차량과 배송)을 식별하는 것입니다.

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

제약 조건 식별

제약 조건은 차량을 사용할 수 있는 방법과 배송을 처리해야 하는 방법에 대한 제한사항입니다. 이러한 데이터는 대부분의 작업을 지시하며 최적화된 경로 계획을 만들 때 매우 중요합니다.

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

엄격한 제약 조건 소프트 제약 조건
위반할 수 없는 한도입니다. 예를 들어 트럭은 최대 용량을 초과하는 무게를 운반할 수 없으며, 운전자는 매장이 문을 닫은 후에는 상품을 수령할 수 없습니다. 이러한 기본 설정은 필요한 경우 위반할 수 있으며 일반적으로 벌금이 부과됩니다. 예를 들어 트럭을 80% 용량까지만 적재하거나 목표 시간 전에 배송하는 것을 선호하지만 더 나은 경로를 얻기 위해 이러한 제한을 초과해도 괜찮습니다.

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

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

비즈니스 목표 설정

리소스와 작업 및 제한사항을 설정했으면 이제 비즈니스에 가장 중요한 측정항목을 설정할 차례입니다. 이러한 목표는 제약 조건과 밀접한 관련이 있으며, 경로를 계획할 때 가장 중요한 요소를 결정하는 데 도움이 됩니다.

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

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

데이터 매핑

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

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

변수 매핑

실제 개념 API 매개변수 설명
운전자 또는 차량 model.vehicles[] 차량의 단일 차량을 나타냅니다.
Depot 위치 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[].softMaxLoadcostPerUnitAbove 소프트 로드 요구사항 추가 차량이 상품을 두고 가는 대신 이상적인 용량을 약간 초과할 수 있습니다 (벌금 부과).
차량 과부하로 인해 배송이 건너뛰었습니다 model.vehicles[] 또는 shipments[].timeWindows 차량 추가 또는 시간대 완화 특히 피크 시간대에 현재 차량 수에 비해 배송이 너무 많은 경우 차량을 추가하거나 배송 시간을 늘려 워크로드를 분산하세요.
경로가 너무 길거나 비효율적임 vehicles[].costPerKilometer/costPerHour 비용 추가 또는 가치 증가 여행이 비싸다고 API에 알려서 멀리 떨어진 고립된 정류장을 삭제하여 차량의 경로를 더 촘촘하게 만들도록 유도합니다.
운전자의 교대 근무가 너무 깁니다 vehicles[].routeDurationLimit 또는 model.vehicles[] 기간 제한 추가 또는 차량 및 한도 추가 운전자가 도로에서 보내는 총시간에 하드캡 (예: 8시간)을 적용합니다. 차량만 추가해서는 경로가 단축되지 않습니다. 솔버가 더 큰 차량에 워크로드를 분산하도록 강제하는 시간 제한을 적용해야 합니다.

경로 계획 업데이트

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

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

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

경로 계획 통합

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

시각화

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

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

  • 코드를 사용하지 않고 탐색: 오픈소스 경로 최적화 앱을 사용하여 API가 데이터를 지도상의 실제 경로로 변환하는 방법을 확인할 수 있습니다. 이 웹 애플리케이션은 코드를 작성하기 전에 시나리오를 구성하고, 제약 조건 매개변수를 조정하고, 결과 경로 계획을 시각적으로 렌더링할 수 있는 탐색 도구 역할을 합니다.
  • 방문 순서 표시: 방문 순서를 지도에 번호가 매겨진 포인트로 표시하여 자체 시스템에서 최적화 및 배차 계획을 평가할 수 있습니다. 이렇게 하려면 API 응답의 각 경로 내에서 visits 배열을 찾습니다. 이 배열의 항목은 드라이버가 실행해야 하는 순서와 정확히 같습니다. 이 목록을 반복하고 shipmentIndex를 사용하여 각 정류장의 위치 좌표를 가져오고 매핑 라이브러리를 사용하여 목록의 순서에 따라 지도에 번호가 매겨진 마커를 렌더링할 수 있습니다.
  • 실제 경로 그리기: 지도에서 정확한 계획 경로를 시각화하여 최적화 프로그램이 특정 순서를 선택한 이유를 파악할 수 있습니다. 이 폴리라인은 운전자가 이동한 실시간 경로가 아닌 계획 및 평가를 위한 의도된 경로를 나타냅니다. 요청에서 populatePolylines: true를 설정하여 각 경로의 encodedPolyline 필드를 가져오고 Maps JavaScript APIgoogle.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은 계획된 방문 순서를 실시간 차량 추적과 페어링합니다.