이 예에서는 전환 속성을 사용하여 한 시간대에 동일한 차량으로 근처 픽업 및 배송이 수행되는 경로의 우선순위를 지정하는 방법을 보여줍니다. 전환 속성에 대해 자세히 알아보려면 전환 속성으로 비즈니스 로직 모델링을 참고하세요.
예를 들면 다음과 같습니다.
- 배송물 A, B, C의 배송이 동일한 도로에서 서로 가깝습니다.
- 추가 배송은 도로를 따라 더 아래에 있습니다.
- 배송에 지정된 배송 기간이 없습니다.
- 방문 일정과 관계없이 차량은 이 도로를 두 번 운전해야 합니다. 한 번은 아침에 차고지에서 가는 길에, 한 번은 저녁에 돌아오는 길에 운전해야 합니다.
- A, B, C가 언제 수행되든 경로의 전체 이동 거리와 시간은 항상 동일합니다.

이 상황에서 시간당 비용과 킬로미터당 비용만 사용하는 요청의 경우 최적화된 경로에서 A와 B는 아침에 처리되고 C는 저녁에 처리될 수 있으며 솔루션 비용은 세 가지 모두 동시에 처리되는 경우와 동일합니다.
기준점이 있는 킬로미터당 비용
근처 방문을 그룹화하려면 먼저 기준점 거리를 선택해야 합니다. 이 거리는 근처에 있다고 간주하는 두 방문 간의 최대 거리입니다. 이 예에서는 도시 지역의 한 블록에 대략 해당하는 100미터의 기준점을 사용합니다. 기준점을 늘리거나 줄여 비즈니스 요구사항과 운전기사의 선호도에 맞출 수 있습니다.
서로 100미터 이내의 근처 방문을 그룹화하려면 각 전환의 처음 100미터에 높은 비용을 설정하고 전환의 추가 미터에 더 낮은 비용을 설정합니다. 처음 100미터가 가장 비싸므로 최적화 도구는 경로의 전체 길이를 늘리더라도 100미터 기준점보다 짧은 전환을 사용하여 가장 큰 비용을 절감합니다.
비용을 설정하려면 다음 속성을 사용하여
ShipmentModel.transition_attributes
에 새 항목을 추가합니다.
- 가능한 모든 전환과 일치시키려면 모델에서 사용되지 않는 태그(예:
UNUSED_TAG)를 선택합니다.TransitionAttributes.excluded_src_tag및TransitionAttributes.excluded_dst_tag를 이 태그로 설정합니다. - 기준점 거리와 비용으로
TransitionAttributes.distance_limit를 설정합니다.DistanceLimit.soft_max_meters을 선택한 기준점으로 설정합니다.DistanceLimit.cost_per_kilometer_below_soft_max를 기준점 미만의 킬로미터당 비용으로 설정합니다.DistanceLimit.cost_per_kilometer_above_soft_max를 기준점 초과의 킬로미터당 비용으로 설정합니다.
{
"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 | 100 m | 5 | 900 m | 0.9 |
| A→B | 50 m | 50 m | 2.5 | 0 m | 0 |
| B→기타 | 1,030m | 100 m | 5 | 930 m | 0.93 |
| 기타→C | 1,000m | 100 m | 5 | 900 m | 0.9 |
| C→차고지 | 1,080m | 100 m | 5 | 980 m | 0.98 |
| 합계 | 450 m | 22.5 | 3,710m | 3.71 | |
전체 비용은 다음 두 가지 킬로미터당 비용의 합으로 계산됩니다.
- 기준점 미만의 킬로미터당 비용 (50)에 기준점 미만의 총 이동 거리 (450m = 0.45km)를 곱한 값
- 기준점 초과의 킬로미터당 비용 (1)에 기준점 초과의 총 이동 거리 (3,710m = 3.71km)를 곱한 값
따라서 전체 비용은 0.45 * 50 + 3.71 * 1 = 22.5 + 3.71 = 26.21입니다.
솔루션 2: 가는 길에 A, B, C를 수행하고 돌아오는 길에는 아무것도 수행하지 않음
이 솔루션에서는 솔루션 1과 달리 세 가지 배송물이 모두 도로를 한 번 이동하는 동안 '그룹으로' 배송됩니다. 다른 이동에서는 차량이 전혀 멈추지 않습니다. 다시 말하지만 5개의 전환이 있지만 길이와 구성은 다릅니다.
| 전환 | 거리 | 기준점 미만 | 기준점 초과 | ||
|---|---|---|---|---|---|
| 거리 | 비용 | 거리 | 비용 | ||
| 차고지 →A | 1,000m | 100 m | 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 | 100 m | 5 | 900 m | 0.9 |
| 기타→차고지 | 2,080m | 100 m | 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미터에 가까운 전환을 선호하여 이러한 '저렴한' 미터를 최대한 활용합니다.
이 효과는 두 가지 예시 솔루션에서 확인할 수 있습니다. 기준점 미만 및 초과의 킬로미터당 비용을 바꾸면 경로 비용이 변경됩니다.
| 기준점 초과의 높은 비용 | 기준점 미만의 높은 비용 | |||
|---|---|---|---|---|
| 솔루션 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 |
각 버전에서 두 솔루션의 총비용 중 더 낮은 비용이 굵게 강조표시됩니다. 기준점 초과의 높은 비용을 사용하면 이제 방문이 그룹화된 경로의 총비용이 더 높아집니다. 이는 달성하려는 목표와 반대입니다.