Ten przykład pokazuje, jak używać atrybutów przejścia do ustalania priorytetów tras, na których odbiory i dostawy w pobliżu są wykonywane przez ten sam pojazd w ramach jednego bloku czasowego. Więcej informacji o atrybutach przejścia znajdziesz w artykule Modelowanie logiki biznesowej za pomocą atrybutów przejścia.
W tym przykładzie:
- Przesyłki A, B i C znajdują się blisko siebie na tej samej drodze.
- Dodatkowe dostawy są planowane na później.
- Nie ma określonych terminów dostawy.
- Niezależnie od harmonogramu wizyty pojazd musi przejechać tą drogą dwa razy: raz rano w drodze z bazy, a raz wieczorem w drodze powrotnej.
- Całkowita odległość podróży i czas trwania trasy są zawsze takie same, niezależnie od tego, kiedy wykonywane są czynności A, B i C.
W tej sytuacji i w przypadku żądania, które wykorzystuje tylko koszt na godzinę i koszt na kilometr, zoptymalizowana trasa mogłaby obejmować punkty A i B rano, a punkt C wieczorem. Koszt rozwiązania byłby taki sam, jak gdyby wszystkie trzy punkty były obsługiwane w tym samym czasie.
Koszt na kilometr z wartością progową
Aby grupować wizyty w pobliżu, musisz najpierw wybrać odległość progową. Jest to maksymalna odległość między 2 wizytami, które uważasz za pobliskie. W tym przykładzie zastosowano próg 100 metrów, który odpowiada mniej więcej blokowi w mieście. Możesz zwiększyć lub zmniejszyć próg, aby dopasować go do potrzeb firmy i preferencji kierowców.
Aby grupować wizyty w odległości 100 metrów od siebie, możesz ustawić wysoki koszt za pierwsze 100 metrów każdego przejścia i niższy koszt za każdy dodatkowy metr przejścia. Ponieważ pierwsze 100 metrów jest najdroższe, optymalizator osiąga największe oszczędności, stosując przejścia krótsze niż próg 100 metrów, nawet jeśli oznacza to wydłużenie całkowitej długości trasy.
Aby skonfigurować koszty, dodaj nowy wpis do kolumny ShipmentModel.transition_attributes
z tymi właściwościami:
- Aby dopasować wszystkie możliwe przejścia, wybierz tag, który nie jest używany nigdzie w modelu, np.
UNUSED_TAG
. Ustaw tag naTransitionAttributes.excluded_src_tag
iTransitionAttributes.excluded_dst_tag
. - Skonfiguruj
TransitionAttributes.distance_limit
z uwzględnieniem progu odległości i kosztów:- Ustaw wartość
DistanceLimit.soft_max_meters
na wybranym progu. - Ustaw
DistanceLimit.cost_per_kilometer_below_soft_max
na koszt za kilometr poniżej progu. - Ustaw
DistanceLimit.cost_per_kilometer_above_soft_max
na koszt za kilometr powyżej progu.
- Ustaw wartość
{
"model": {
"transitionAttributes": [
{
"excluded_dst_tag": "UNUSED_TAG ",
"excluded_src_tag": "UNUSED_TAG ",
"distanceLimit": {
"softMaxMeters": 100,
"costPerKilometerBelowSoftMax": 50,
"costPerKilometerAboveSoftMax": 1,
}
}
]
}
}
Tag #unused_tag#
nie może być używany przez żadne przesyłki ani pojazdy, aby pasowały do wszystkich możliwych przejść. Więcej informacji znajdziesz w artykule Jak dopasowywać wszystkie żądania wizyty.
Jak działa wysoki koszt poniżej progu
W tej sekcji pokazano, jak koszty poniżej i powyżej progu wpływają na łączny koszt różnych rozwiązań w przykładowym scenariuszu.
Rozwiązanie 1. Wykonaj czynności A i B na trasie tam, a C na trasie z powrotem.
W tym rozwiązaniu przesyłki są dzielone na 2 przejazdy po tej drodze. Dwa z nich są dostarczane podczas pierwszego przejścia, a trzeci podczas drugiego. Dostępnych jest 5 przejść:
Przejście | Odległość | Poniżej progu | Powyżej progu | ||
---|---|---|---|---|---|
Odległość | Koszt | Odległość | Koszt | ||
depot →A | 1000 m | 100 m | 5 | 900 m | 0,9 |
A→B | 50 m | 50 m | 2.5 | 0 m | 0 |
B→other | 1030 m | 100 m | 5 | 930 m | 0,93 |
inne → C | 1000 m | 100 m | 5 | 900 m | 0,9 |
C→depot | 1080 m | 100 m | 5 | 980 m | 0,98 |
Łącznie | 450 m | 22,5 | 3710 m | 3,71 |
Całkowity koszt jest obliczany jako suma tych 2 wartości na kilometr:
- koszt za kilometr poniżej progu (50) pomnożony przez całkowitą odległość przebytą poniżej progu (450 m = 0,45 km),
- koszt za kilometr powyżej progu (1) pomnożony przez całkowity przebyty dystans powyżej progu (3710 m = 3,71 km).
Całkowity koszt wynosi więc 0,45 × 50 + 3,71 × 1 = 22,5 + 3,71 = 26,21.
Rozwiązanie 2. Wykonaj czynności A, B i C na trasie tam, a na trasie powrotnej nie wykonuj żadnych czynności.
W tym rozwiązaniu, w przeciwieństwie do rozwiązania 1, wszystkie 3 przesyłki są dostarczane „w grupie” podczas jednego przejazdu. Podczas drugiej jazdy pojazd wcale się nie zatrzymuje. Ponownie mamy 5 przejść, ale ich długość i skład są różne:
Przejście | Odległość | Poniżej progu | Powyżej progu | ||
---|---|---|---|---|---|
Odległość | Koszt | Odległość | Koszt | ||
depot →A | 1000 m | 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 → inne | 1000 m | 100 m | 5 | 900 m | 0,9 |
inne → depot | 2080 m | 100 m | 5 | 1980 m | 1,98 |
Łącznie | 380 m | 19 | 3780 m | 3,78 |
Przyjmując te same założenia co w rozwiązaniu 1, ogólny koszt wynosi 0,38 × 50 + 3,78 × 1 = 19 + 3,78 = 22,78. Wykonywanie wszystkich wizyt w jednym bloku czasowym jest tańsze niż wykonywanie ich w 2 grupach. Możesz wzmocnić ten efekt, zwiększając wartość DistanceLimit.cost_per_kilometer_below_soft_max
.
Dlaczego niski koszt za kilometr poniżej progu nie działa
Ponieważ chcesz, aby krótkie przejazdy były preferowane przed długimi, możesz być skłonny ustawić wysoki koszt za kilometr w przypadku długich przejazdów i utrzymać niski koszt za kilometr w przypadku krótkich przejazdów. Ma to jednak odwrotny skutek: ponieważ pierwsze 100 metrów przejazdu jest najtańsze, optymalizator wykorzystuje te „tanie” metry w największym stopniu, preferując przejazdy o długości około 100 metrów lub większej.
Możesz zobaczyć ten efekt na przykładowych rozwiązaniach. Jeśli koszt za kilometr jest poniżej lub powyżej progu, koszty trasy ulegają zmianie:
Wysoki koszt powyżej progu | Wysoki koszt poniżej progu | |||
---|---|---|---|---|
Rozwiązanie 1 | Rozwiązanie 2 | Rozwiązanie 1 | Rozwiązanie 2 | |
KMs poniżej progu | 0,45 | 0,38 | 0,45 | 0,38 |
Koszt KM poniżej progu | 3,00 | 3,00 | 50,00 | 50,00 |
KMs powyżej progu | 3,71 | 3,78 | 3,71 | 3,78 |
Koszt KM powyżej progu | 50,00 | 50,00 | 3,00 | 3,00 |
Całkowity koszt | 185,95 | 189,38 | 26,21 | 22,78 |
W przypadku każdej wersji niższy z łącznych kosztów obu rozwiązań jest wyróżniony pogrubioną czcionką. Gdy użyjesz wysokiego kosztu powyżej progu, łączny koszt trasy, na której wizyty są zgrupowane, będzie wyższy, co jest przeciwieństwem tego, czego oczekujesz.