전환 속성으로 비즈니스 로직 모델링

이 가이드에서는 전환 속성의 가능한 사용 사례를 보여줍니다. 최적화된 경로에 차량 주차 시간을 포함하고 각 경로가 특정 위치 방문으로 끝나도록 하는 두 가지 예를 통해 실제 시나리오를 모델링하는 방법을 알아봅니다.

시작하기 전에

전환 속성을 사용하여 최적화된 경로의 특정 전환에 모델별 비용과 지연 시간을 추가합니다. 이러한 비용과 지연 시간은 사용된 차량의 매개변수를 기반으로 지도 데이터에서 계산된 전환 기간 및 비용에 추가됩니다.

전환은 한 위치를 다음 위치에 연결하는 경로의 세그먼트입니다.

위치는 차량 경로의 다음 지점을 나타냅니다.

  • 경로의 시작점입니다.
  • 픽업 또는 배송이 이루어지는 정류장입니다.
  • 경로의 종료 지점입니다.

ShipmentModel.transition_attributes 목록에 추가하여 모델의 모든 전환 속성을 정의합니다. 목록의 각 요소는 전환 속성 한 세트를 정의하며, 전환의 시작 위치와 종료 위치에 있는 태그를 사용하여 경로의 전환과 일치합니다. 전환 속성에 대해 자세히 알아보려면 TransitionAttributes 참조 문서를 확인하세요.

실제 시나리오 모델링

이 섹션에서는 전환 속성을 사용하여 실제 비즈니스 제약 조건을 구현하는 두 가지 작은 예를 보여줍니다.

주차 시간 예약

이 시나리오에서 운전자는 위치 A를 방문하기 전에 차량을 주차해야 합니다. 위치 B는 근처에 있으며 운전자는 두 방문 모두 동일한 주차 공간을 사용할 수 있습니다. 운전자가 A 바로 다음에 B를 방문하면 주차 공간을 떠나 차량을 다시 주차할 필요가 없으므로 시간을 절약할 수 있습니다. Route Optimization API에서는 전환 속성을 사용하여 운전자가 한 주차 공간에서 다른 주차 공간으로 이동하는 경우에만 차량을 주차하는 데 추가 시간을 추가할 수 있습니다.

방문 시간과 별도로 주차 시간을 모델링하면 동일한 주차를 사용하는 방문이 그룹화된 경로가 더 짧은 시간이 걸립니다. 모델의 정확도를 높이고 최적화 도구가 방문이 그룹화된 경로를 선호하도록 할 수 있습니다.

Route Optimization API 요청에서 이를 수행하려면 다음 단계를 따르세요.

  1. VisitRequest.duration는 방문을 수행하는 데 필요한 시간 동안만 사용합니다. 예를 들어 패키지를 전달하고 고객의 서명을 수집합니다.

  2. 모델에서 사용되는 각 고유한 주차 공간에 모델의 다른 용도로 사용되지 않는 새 태그(예: PARKING_123)를 사용합니다.

  3. 다음에 이 태그를 추가합니다.

    1. VisitRequest.tags 이 주차 공간을 사용하는 모든 방문 요청에서

    2. Vehicle.start_tags 차량이 이 주차장에서 경로를 시작하는 경우

    3. Vehicle.end_tags: 차량이 이 주차 공간에서 경로를 시작하거나 종료하는 경우

  4. 각 새 주차 태그에 다음을 실행하여 다른 주차 위치에서 올 때 주차 지연을 추가하는 ShipmentModel.transition_attributes에 항목을 추가합니다.

    1. TransitionAttributes.excluded_src_tagTransitionAttributes.dst_tagPARKING_123로 설정합니다.

    2. TransitionAttributes.delay을 차량을 주차하는 데 필요한 시간으로 설정합니다.

    예를 들어 위치의 태그가 PARKING_123이고 차량을 주차하는 데 150초가 걸리는 경우 ShipmentModel.transition_attributes에 다음 항목을 추가합니다.

    {
      "excluded_src_tag": "PARKING_123",
      "dst_tag": "PARKING_123",
      "delay": "150s"
    }
    

경로 끝에서 필수 청소

이 시나리오에서는 경로가 끝날 때 차량을 청소해야 하며 다음과 같은 추가 제약 조건이 있습니다.

  • 청소는 전문 청소 시설에서 이루어진 후 차량 보관소로 돌아갑니다. 최적화된 경로는 위치와 차량이 수행한 픽업 및 배송 위치를 기반으로 최적의 청소 시설을 사용합니다.
  • 청소 후 차량은 추가 픽업이나 배송을 수행해서는 안 됩니다.
  • 차량을 운전하고 청소하는 시간은 운전자의 근무 시간에 포함되며 경로의 최대 시간에 맞춰야 합니다.

마지막 방문이 청소 시설인 경로 또는 빈 경로만 허용하여 이 요구사항을 모델링합니다. Route Optimization API에서는 청소 시설 또는 경로의 시작 지점을 제외한 모든 위치에서 경로의 종료 경유지로의 전환을 금지하여 이를 수행합니다.

  1. 모델에서 사용되지 않는 새 태그 두 개를 선택합니다(예: CLEANEDROUTE_END). 전자는 차량이 깨끗한 상태가 되거나 깨끗한 상태인 위치를 나타내고 후자는 경로의 끝을 나타냅니다.
  2. 각 차량에 대해 다음 속성을 사용하여 청소 시설 방문을 나타내는 배송 전용 배송을 새로 추가합니다.
    1. 각 세탁 시설 위치는 이 배송의 배송 방문 요청으로 표시되어야 합니다.
    2. 청소 시설 배송의 각 방문 요청의 VisitRequest.tagsCLEANED를 추가합니다. 이 위치를 떠나는 차량이 깨끗하다는 신호를 보냅니다. 모델의 다른 방문 요청은 이 태그를 사용하지 않아야 차량이 이러한 요청을 떠날 때 '깨끗하지 않음'으로 간주됩니다.
    3. penalty_cost을 작은 숫자로 설정하여 차량이 다른 용도로 사용되지 않는 경우 최적화 프로그램이 이 배송을 건너뛰도록 허용합니다.
  3. 각 차량에 대해 CLEANEDVehicle.start_tags에 추가합니다. 이는 이전 영업일이 끝날 때 청소되었다고 가정하고 차량이 픽업 또는 배송을 수행하기 전에 차량을 깨끗한 상태로 표시하는 데 사용되며, 차량이 시작 경유지에서 종료 경유지로 바로 이동할 수 있도록 합니다. 실제로 이러한 경로가 발생하지 않더라도 이 시나리오를 허용하면 최적화 프로그램이 최적화된 경로를 더 효율적으로 검색할 수 있습니다.

  4. 각 차량에 대해 ROUTE_ENDVehicle.end_tags에 추가합니다.

  5. 다음 속성을 사용하여 차량이 깨끗하지 않은 경우 차량 끝 경유지에 도착하는 것을 금지하는 새 항목을 ShipmentModel.transition_attributes에 추가합니다.

    1. TransitionAttributes.excluded_src_tagCLEANED로 설정합니다.

    2. TransitionAttributes.dst_tagROUTE_END로 설정합니다.

    3. TransitionAttributes.delay을 큰 값으로 설정합니다. 최대 경로 시간보다 지연 시간을 길게 설정하면 최적화 도구가 경로에서 이 전환을 사용하는 것을 효과적으로 금지할 수 있습니다.

    예를 들어 모델의 시간 단위가 1영업일인 경우 24시간 (86400초)의 지연 시간을 사용하여 청소 시설과 경로 시작 지점을 제외한 모든 곳에서 경로 끝으로의 전환을 금지할 수 있습니다.

    {
      "excluded_src_tag": "CLEANED",
      "dst_tag": "ROUTE_END",
      "delay": "86400s"
    }
    

지연과 비용 중에서 선택하는 방법

지연과 비용 중에서 선택하는 것은 구현된 비즈니스 로직과 제약 조건의 특성에 따라 달라집니다. TransitionAttributes.delay을 설정하는 것은 하드 제약 조건을 구현하거나 소요된 시간 측면에서 트레이드 오프를 표현하는 데 가장 적합합니다. TransitionAttributes.cost은 추가 비용으로 표현되는 소프트 선호도 또는 절충을 구현할 때 더 적합합니다. 시간과 비용이 모두 중요한 경우 지연과 비용을 임의로 결합할 수 있습니다.

차량 청소 예시에서는 매우 긴 지연을 사용합니다. 경로가 끝날 때 차량을 청소하는 것이 필수 요건이며 긴 지연으로 인해 최적화 프로그램이 이 요건을 무시하지 않기 때문입니다. 비용만 설정하면 최적화 도구에서 차량을 청소하지 않아 '절약'된 시간에 더 많은 배송을 하는 등 다른 곳에서 비용을 보충할 방법을 찾아 청소를 건너뛸 수 있습니다.

주차 예시에서는 차량을 주차하는 데 필요한 추가 시간에 해당하는 짧은 지연을 사용합니다. 운전자가 유료 주차장에 정차하는 경우 지연과 함께 costs를 사용할 수도 있습니다.

모든 방문 요청과 일치하는 전환 속성을 추가하는 방법

위의 예에서는 특정 태그가 있는 위치 또는 태그가 없는 위치와 일치하는 전환 속성을 사용합니다. 하지만 모든 전환에 적용되는 전환 속성을 추가해야 하는 경우는 어떻게 해야 할까요?

TransitionAttributes 메시지에는 TransitionAttributes.src_tagTransitionAttributes.excluded_src_tag 중 하나와 TransitionAttributes.dst_tagTransitionAttributes.excluded_dst_tag 중 하나가 있어야 하므로 태그를 생략할 수 없습니다.

하지만 모델에서 어디에도 사용되지 않는 태그로 TransitionAttributes.excluded_src_tag 또는 TransitionAttributes.excluded_dst_tag을 설정하여 모든 태그를 일치시킬 수 있습니다. 이렇게 하면 이 태그가 없는 모든 위치가 일치하지만, 의도적으로 어떤 위치에서도 사용되지 않는 태그를 선택했으므로 이러한 전환 속성은 모든 위치와 일치합니다.

추가 자료