전환 속성으로 주변 방문 우선순위 지정

이 예에서는 전환 속성을 사용하여 한 번에 동일한 차량으로 인근에서 픽업과 배송이 이루어지는 경로의 우선순위를 지정하는 방법을 보여줍니다. 전환 속성에 관한 자세한 내용은 전환 속성으로 비즈니스 로직 모델링을 참고하세요.

이 예에서는 다음과 같이 정의됩니다.

  • 배송 A, B, C의 배송 상품이 동일한 도로에서 서로 가까이에 있습니다.
  • 추가 전송은 향후 진행될 예정입니다.
  • 전송에는 지정된 전송 시간이 없습니다.
  • 방문 일정과 관계없이 차량은 이 도로를 두 번 운전해야 합니다. 오전에 차고지에서 출발할 때 한 번, 저녁에 돌아올 때 한 번입니다.
  • 경로의 전체 이동 거리와 소요 시간은 A, B, C가 실행되는 시점에 관계없이 항상 동일합니다.

동일한 도로에서 배송되는 상품의 예 창고에서 다른 배송으로 이동 중인 배송 상품 A, B, C가 있습니다. A는 창고에서 1,000m, B는 창고에서 50m 더 멀리, C는 같은 방향으로 30m 더 멀리 있습니다. C에서 1,000m 떨어진 곳에 다른 배송 상품이 있습니다.

이 경우 시간당 비용과 킬로미터당 비용만 사용하는 요청의 경우 최적화된 경로에서 A와 B는 아침에 처리되고 C는 저녁에 처리될 수 있으며 솔루션 비용은 세 가지가 모두 동시에 처리되는 것과 동일합니다.

기준액이 적용된 킬로미터당 비용

근처 방문을 그룹화하려면 먼저 임곗값 거리를 선택해야 합니다. 이는 근처라고 간주되는 두 방문 간의 최대 거리입니다. 이 예에서는 도시 지역의 블록 1개에 대략 해당하는 100미터의 임곗값을 사용합니다. 비즈니스 니즈와 운전자의 선호사항에 맞게 기준점을 늘리거나 줄일 수 있습니다.

서로 100m 이내에 있는 방문을 그룹화하려면 각 전환의 처음 100m에 높은 비용을 설정하고 전환의 추가 미터에는 더 낮은 비용을 설정합니다. 처음 100미터가 가장 비용이 많이 들기 때문에 최적화 도구는 경로의 전체 길이를 연장하더라도 100미터 기준점보다 짧은 전환을 사용하여 가장 큰 비용을 절감합니다.

비용을 설정하려면 다음 속성을 사용하여 ShipmentModel.transition_attributes에 새 항목을 추가합니다.

{
  "model": {
    "transitionAttributes": [
      {
        "excluded_dst_tag": "UNUSED_TAG",
        "excluded_src_tag": "UNUSED_TAG",
        "distanceLimit": {
          "softMaxMeters": 100,
          "costPerKilometerBelowSoftMax": 50,
          "costPerKilometerAboveSoftMax": 1,
        }
      }
    ]
  }
}

가능한 모든 전환을 일치시키기 위해 배송 또는 차량에서 #unused_tag# 태그를 사용해서는 안 됩니다. 자세한 내용은 모든 방문 요청을 일치시키는 방법을 참고하세요.

기준점 미만의 높은 비용의 작동 방식

이 섹션에서는 기준점 미만 및 초과 비용이 예시 시나리오의 다양한 솔루션의 전반적인 비용에 미치는 영향을 보여줍니다.

해결 방법 1: 왕복 중 A, B를 수행하고 C를 수행합니다.

이 솔루션에서는 배송이 이 도로의 두 경로로 나뉩니다. 그중 두 개는 첫 번째 트래버설에서 전송되고 나머지 하나는 두 번째 트래버설에서 전송됩니다. 전환에는 5가지가 있습니다.

전환 거리 임곗값 미만 임곗값 초과
거리 비용 거리 비용
창고 → A 1,000m 100m 5 900 m 0.9
A→B 50 m 50 m 2.5 0 m 0
B→기타 1030 m 100m 5 930 m 0.93
기타→C 1,000m 100m 5 900 m 0.9
C→depot 1080 m 100m 5 980 m 0.98
합계 450 m 22.5 3710 m 3.71

전체 비용은 다음 두 가지 비용의 합계로 계산됩니다.

  • 기준점 미만의 킬로미터당 비용 (50)과 기준점 미만의 총 이동 거리 (450m = 0.45km)의 곱
  • 기준점 (1)을 초과하는 킬로미터당 비용에 기준점 (3710m = 3.71km)을 초과하는 총 이동 거리를 곱합니다.

따라서 전체 비용은 0.45 * 50 + 3.71 * 1 = 22.5 + 3.71 = 26.21입니다.

해결 방법 2: 왕복 중 A, B, C를 실행하고 돌아오는 길에는 아무것도 실행하지 않음

이 솔루션에서는 솔루션 1과 달리 세 건의 배송이 모두 한 번의 경로 횡단 중에 '그룹으로' 배송됩니다. 다른 경로에서는 차량이 전혀 정차하지 않습니다. 전환은 5개이지만 길이와 구성은 다릅니다.

전환 거리 임곗값 미만 임곗값 초과
거리 비용 거리 비용
창고 → A 1,000m 100m 5 900 m 0.9
A→B 50 m 50 m 2.5 0 m 0
B→C 30 m 30 m 1.5 0 m 0
C→기타 1,000m 100m 5 900 m 0.9
기타→창고 2080 m 100m 5 1,980m 1.98
합계 380 m 19 3,780m 3.78

솔루션 1과 동일한 계산을 사용하면 전체 비용은 0.38 * 50 + 3.78 * 1 = 19 + 3.78 = 22.78이며, 한 번에 모든 방문을 실행하는 것이 두 그룹으로 나누어 실행하는 것보다 비용이 적습니다. DistanceLimit.cost_per_kilometer_below_soft_max를 늘려 이 효과를 강화할 수 있습니다.

기준점 미만의 낮은 킬로미터당 비용이 작동하지 않는 이유

긴 전환보다 짧은 전환을 선호하므로 긴 전환에는 높은 킬로미터당 비용을 부과하고 짧은 전환에는 낮은 킬로미터당 비용을 부과하고 싶을 수 있습니다. 하지만 실제로는 역효과가 있습니다. 전환의 처음 100미터가 가장 저렴하므로 최적화 도구는 100미터에 가까우거나 100미터가 넘는 전환을 선호하여 이러한 '저렴한' 미터를 최대한 활용합니다.

두 가지 솔루션 예에서 이 효과를 확인할 수 있습니다. 기준점 아래와 위의 킬로미터당 비용을 전환하면 경로 비용이 변경됩니다.

기준액을 초과하는 높은 비용 기준 미만의 높은 비용
해결 방법 1 해결 방법 2 해결 방법 1 해결 방법 2
기준점 미만 KM 0.45 0.38 0.45 0.38
기준점 미만의 비용/km 1.00 1.00 50.00 50.00
기준점 초과 KM 3.71 3.78 3.71 3.78
기준점 초과 시 KM당 비용 50.00 50.00 1.00 1.00
총 비용 185.95 189.38 26.21 22.78

각 버전에서 두 솔루션의 총 비용 중 더 낮은 비용이 굵은 글꼴로 강조 표시됩니다. 임계값을 초과하는 높은 비용을 사용하면 방문이 그룹화된 경로의 총 비용이 더 높아지므로, 원하던 결과와는 반대의 결과가 나타납니다.