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

이 상황에서 시간당 비용과 킬로미터당 비용만 사용하는 요청의 경우 최적화된 경로에서 A와 B는 오전에 처리되고 C는 저녁에 처리될 수 있으며 솔루션 비용은 세 가지가 모두 동시에 처리되는 경우와 동일합니다.
기준점이 있는 킬로미터당 비용
근처 방문을 그룹화하려면 먼저 기준 거리를 선택해야 합니다. 이는 근처에 있다고 간주하는 두 방문 사이의 최대 거리입니다. 이 예에서는 도시 지역의 한 블록에 해당하는 약 100m의 기준점을 사용합니다. 비즈니스 요구사항과 운전자의 선호도에 맞게 기준점을 늘리거나 줄일 수 있습니다.
서로 100m 이내에 있는 인근 방문을 그룹화하려면 각 전환의 처음 100m에 높은 비용을 설정하고 전환의 추가 미터에 더 낮은 비용을 설정합니다. 처음 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를 수행합니다.
이 솔루션에서는 배송이 이 도로의 두 이동으로 분할됩니다. 그중 2개는 첫 번째 순회에서 전달되고 나머지 1개는 두 번째 순회에서 전달됩니다. 전환은 5가지가 있습니다.
| 전환 | 거리 | 임곗값 미만 | 기준점 초과 | ||
|---|---|---|---|---|---|
| 거리 | 비용 | 거리 | 비용 | ||
| depot →A | 1,000m | 100m | 5 | 900 m | 0.9 |
| A→B | 50 m | 50 m | 2.5 | 0 m | 0 |
| B→기타 | 1,030m | 100m | 5 | 9억 3,000만 | 0.93 |
| other→C | 1,000m | 100m | 5 | 900 m | 0.9 |
| C→depot | 1080 m | 100m | 5 | 980 m | 0.98 |
| 합계 | 450 m | 22.5 | 3,710m | 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개이지만 길이와 구성이 다릅니다.
| 전환 | 거리 | 임곗값 미만 | 기준점 초과 | ||
|---|---|---|---|---|---|
| 거리 | 비용 | 거리 | 비용 | ||
| depot →A | 1,000m | 100m | 5 | 900 m | 0.9 |
| A→B | 50 m | 50 m | 2.5 | 0 m | 0 |
| B→C | 30분 | 30분 | 1.5 | 0 m | 0 |
| C→기타 | 1,000m | 100m | 5 | 900 m | 0.9 |
| other→depot | 2080 m | 100m | 5 | 1,980m | 1.98 |
| 합계 | 3억 8,000만 | 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 |
각 버전에서 두 솔루션의 총비용 중 더 낮은 비용이 굵게 표시됩니다. 임곗값을 초과하는 높은 비용을 사용하면 방문이 그룹화된 경로의 총 경로 비용이 더 높아지며, 이는 달성하려는 목표와 반대입니다.