Koszty załadunku określają koszty lub kary, które ponosi pojazd w zależności od ładunku przewożonego między odbiorem a dostawą przesyłki. Te koszty możesz skonfigurować na podstawie odległości podróży z costPerKilometer, czasu podróży z costPerTraveledHour lub obu tych czynników jednocześnie.
Skonfiguruj koszty obciążenia, aby obsługiwać cele takie jak:
- Uwzględnij koszty paliwa, które rosną wraz z wagą ładunku.
- Unikaj wyznaczania tras dla mocno obciążonych pojazdów na długich dystansach.
- Uwzględnij zużycie pojazdu spowodowane przewożeniem ciężkich ładunków.
Właściwości
Określ koszty załadunku w ramach właściwości loadLimits elementu Vehicle.
Podobnie jak w przypadku innych parametrów kosztów, koszty wczytywania są wyrażane w bezjednostkowych, względnych jednostkach kosztu.
Koszty załadunku możesz zdefiniować za pomocą tych właściwości:
| Właściwość | Typ | Opis |
|---|---|---|
costPerKilometer |
Obiekt | Zawiera typ obiektu LoadCost, który służy do obliczania kosztów podróży na podstawie przejechanych kilometrów. |
costPerTraveledHour |
Obiekt | Zawiera typ obiektu LoadCost, który oblicza koszty podróży na podstawie czasu spędzonego w drodze, z wyłączeniem czasu oczekiwania, wizyt i przerw. |
LoadCost
Typ wiadomości LoadCost określa koszt przewozu konkretnego ładunku. Umożliwia ustawienie progu obciążenia, a następnie określenie różnych stawek kosztów za jednostkę obciążenia poniżej i powyżej tego progu.
Obiekt LoadCost zawiera te parametry konfiguracji:
| Parametr | Typ | Opis |
|---|---|---|
loadThreshold |
ciąg znaków (format int64) | Poziom obciążenia, przy którym zmienia się stawka obliczania kosztów. Wartość domyślna to 0. |
costPerUnitAboveThreshold |
Liczba | Koszt stosowany do każdej jednostki obciążenia powyżej loadThreshold. Wartość domyślna to 0. |
costPerUnitBelowThreshold |
Liczba | Koszt zastosowany do każdej jednostki obciążenia poniżej lub równej loadThreshold. Wartość domyślna to 0. |
Dopasowywanie kosztów załadunku do przesyłek
Koszty załadunku są naliczane, gdy przewożony ładunek pojazdu pasuje do loadDemands
typu przesyłek na trasie. Rodzaje ładunków to dowolne ciągi znaków, np. waga lub objętość. Więcej informacji o konfigurowaniu typów obciążenia znajdziesz w artykule Typy obciążenia.
Przykłady
W tej sekcji znajdziesz 3 rodzaje przykładów:
- Przykłady kodu ilustrujące strukturę kosztów wczytywania.
- Przykładowy scenariusz pokazujący jeden ze sposobów wykorzystania kosztów wczytywania do osiągnięcia celu biznesowego.
- Przykładowe żądanie, które zawiera wartości ustawione w przykładowym scenariuszu.
Przykładowe fragmenty kodu
Poniższy przykład pokazuje, jak skonstruować koszt załadowania ze wszystkimi dostępnymi parametrami konfiguracji. W tym przykładzie użyto costPerKilometer, ale możesz zastąpić go wartością costPerTraveledHour, aby obliczać koszty na podstawie czasu podróży zamiast odległości.
{
"model": {
"vehicles": [{
"loadLimits": {
"LOAD_TYPE": {
"maxLoad": "MAX_LOAD",
"costPerKilometer": {
"loadThreshold": "LOAD_THRESHOLD",
"costPerUnitAboveThreshold": COST_ABOVE,
"costPerUnitBelowThreshold": COST_BELOW
}
}
}
}]
}
}
Przykład
W tej sekcji opisujemy scenariusz, w którym chcesz zoptymalizować zużycie paliwa, a zużyte paliwo jest proporcjonalne do odległości i wagi ładunku. Pojazdy zużywają więcej paliwa, gdy przewożą cięższe ładunki, dlatego warto zaplanować trasy, na których najpierw dostarczane są cięższe paczki.
Aby skonfigurować takie działanie, możesz ustawić w żądaniu karanie pojazdów, które pokonują duże odległości z ciężkim ładunkiem. W tym przykładzie użyj w żądaniu tych wartości właściwości:
| Ma dzieci | Właściwość | Typ | Wartość | Scenariusz |
|---|---|---|---|---|
loadLimits |
rodzaj obciążenia, | tekst | weightKg |
Określa typ pojemności do śledzenia. W tym przykładzie weightKg oznacza wagę ładunku w kilogramach. |
loadLimits |
maxLoad |
tekst | 100 |
Maksymalna waga ładunku, jaką może przewieźć pojazd. |
costPerKilometer |
loadThreshold |
tekst | 15 |
Ustawia próg obciążenia bazowego. W przypadku ładunku o wadze powyżej 15 kg obowiązuje kara za koszt paliwa zależny od ładunku. |
costPerKilometer |
costPerUnitAboveThreshold |
liczba | 1 |
Jest to współczynnik kosztów paliwa. Za każdy kilometr podróży każdy kilogram ładunku powyżej progu 15 kg powoduje naliczenie 1 jednostki kosztu. |
loadDemands |
amount |
tekst | Wysyłka 1: 50Wysyłka 2: 10Wysyłka 3: 80 |
Określa wagę ładunku dla każdej z 3 przesyłek. |
W tym scenariuszu skonfigurowane wartości mają następujące efekty:
- Optymalizator układa trasy tak, aby najpierw dostarczać najcięższe paczki. Rozwiązanie zaplanuje dostawy 80 kg i 50 kg na początku trasy, aby zminimalizować odległość pokonywaną z dużym obciążeniem.
- Optymalizator układa trasy tak, aby zminimalizować odległość pokonywaną z ciężkim ładunkiem. Aby sprawdzić, jak te ustawienia wpływają na trasy, możesz zwiększyć
costPerUnitAboveThresholdz1do5. Zwiększając karę za wagę, zachęcasz optymalizator do jeszcze większego wysiłku w celu zminimalizowania odległości pokonywanej z cięższym ładunkiem. Może to spowodować zmianę kolejności dostaw lub podzielenie przesyłek na kilka pojazdów.
Przykładowe żądanie
Poniższy przykład pokazuje strukturę podstawowego żądania optimizeTours
zawierającego wartości kosztu wczytywania z przykładowego scenariusza:
{ "model": { "shipments": [ { "deliveries": [ { "arrivalLocation": { "latitude": 37.789456, "longitude": -122.390192 }, "duration": "250s" } ], "penaltyCost": 100.0, "loadDemands": { "weightKg": { "amount": "50" } } }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.789116, "longitude": -122.395080 }, "duration": "250s" } ], "penaltyCost": 30.0, "loadDemands": { "weightKg": { "amount": "10" } } }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.795242, "longitude": -122.399347 }, "duration": "250s" } ], "penaltyCost": 50.0, "loadDemands": { "weightKg": { "amount": "80" } } } ], "vehicles": [ { "endLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "startLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "costPerHour": 40.0, "costPerKilometer": 10.0, "loadLimits": { "weightKg": { "maxLoad": "100", "costPerKilometer": { "loadThreshold": "15", "costPerUnitAboveThreshold": 1 } } } } ] } }
Formuły obliczeniowe
Optymalizator oblicza koszty obciążenia za pomocą tych wzorów.
Obliczanie pełnego progu
Jeśli określisz zarówno costPerUnitAboveThreshold, jak i costPerUnitBelowThreshold, poniesiesz oddzielne koszty podróży w przypadku obciążeń zarówno powyżej, jak i poniżej wartości loadThreshold. Formuła to:
cost = max(carried_load - load_threshold, 0) * distance_or_time * cost_per_unit_above_threshold
+ min(carried_load, load_threshold) * distance_or_time * cost_per_unit_below_threshold
Na przykład na podstawie wartości z przykładowego żądania, gdzie wartość costPerUnitBelowThreshold to 2, jeśli pojazd przejedzie 10 km z ładunkiem o wadze 50, obliczenia będą wyglądać tak:
max(50 - 15, 0) * 10 * 1 + min(50, 15) * 10 * 2 = 650 cost units
Obliczanie wartości powyżej progu
Jeśli podasz tylko costPerUnitAboveThreshold, obliczenia będą szczególnym przypadkiem pełnej formuły progu. Ponieważ koszt poniżej progu wynosi zero, druga połowa pełnego wzoru daje w wyniku zero. Formuła to:
cost = max(carried_load - load_threshold, 0) * distance_or_time * cost_per_unit_above_threshold
Na przykład, korzystając z wartości z przykładowego żądania, gdzie loadThreshold to 15, a costPerUnitAboveThreshold to 1, jeśli pojazd przejedzie 10 km z ładunkiem o wadze 50, obliczenia będą wyglądać tak:
max(50 - 15, 0) * 10 * 1 = 350 cost units
Obliczanie wartości poniżej progu
Podobnie, jeśli podasz tylko costPerUnitBelowThreshold, obliczenia będą kolejnym szczególnym przypadkiem pełnego wzoru progu, w którym koszt powyżej progu wynosi zero. Formuła to:
cost = min(carried_load, load_threshold) * distance_or_time * cost_per_unit_below_threshold