Koszty wczytywania

Koszty załadunku są zdefiniowane we właściwości „loadLimits” obiektu „Vehicle” w sekcji „ShipmentModel”.

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ł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: 50
Wysyłka 2: 10
Wysył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ć costPerUnitAboveThreshold z 1 do 5. 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