Ladekosten

Die Ladekosten werden in der Property `loadLimits` eines `Vehicle` unter `ShipmentModel` definiert.

Mit den Ladekosten werden die Kosten oder Strafen angegeben, die für ein Fahrzeug anfallen, basierend auf der Ladung, die es zwischen Abholungen und Zustellungen transportiert. Sie können diese Kosten mit costPerKilometer basierend auf der zurückgelegten Strecke, mit costPerTraveledHour basierend auf der Reisedauer oder mit beiden gleichzeitig konfigurieren.

Konfigurieren Sie die Ladekosten, um Ziele wie die folgenden zu unterstützen:

  • Berücksichtigen Sie die Kraftstoffkosten, die mit dem Frachtgewicht steigen.
  • Vermeiden Sie es, stark beladene Fahrzeuge über lange Strecken zu leiten.
  • Berücksichtigen Sie den Verschleiß des Fahrzeugs durch schwere Ladung.

Attribute

Geben Sie die Ladekosten in der Property loadLimits eines Vehicle an. Wie alle anderen Kostenparametern werden auch die Ladekosten in dimensionslosen, relativen Kosteneinheiten angegeben.

Mit den folgenden Properties können Sie Ladekosten definieren:

Attribut Typ Beschreibung
costPerKilometer Objekt Enthält den Objekttyp LoadCost, um Reisekosten basierend auf den zurückgelegten Kilometern zu berechnen.
costPerTraveledHour Objekt Enthält den Objekttyp LoadCost, um Reisekosten basierend auf den Reisezeiten zu berechnen. Warte-, Besuchs- und Pausenzeiten werden dabei nicht berücksichtigt.

LoadCost

Mit dem Nachrichtentyp LoadCost werden die Reisekosten für den Transport einer bestimmten Ladung definiert. Damit können Sie einen Lastschwellenwert festlegen und dann unterschiedliche Kostenraten pro Lasteinheit sowohl unter als auch über diesem Schwellenwert angeben.

Das Objekt LoadCost enthält die folgenden Konfigurationsparameter:

Parameter Typ Beschreibung
loadThreshold String (int64-Format) Der Lastpegel, bei dem sich der Kostenberechnungssatz ändert. Standardwert ist 0.
costPerUnitAboveThreshold Zahl Die Kosten, die für jede Lasteinheit über dem loadThreshold anfallen. Der Standardwert ist 0.
costPerUnitBelowThreshold Zahl Die Kosten, die für jede Lasteinheit unter oder gleich dem loadThreshold anfallen. Der Standardwert ist 0.

Ladekosten mit Sendungen abgleichen

Die Ladekosten fallen an, wenn die Ladung eines Fahrzeugs dem loadDemands-Typ der Sendungen auf seiner Route entspricht. Ladungstypen sind beliebige Strings, z. B. „Gewicht“ oder „Volumen“. Weitere Informationen zum Konfigurieren von Lasttypen finden Sie unter Lasttypen.

Beispiele

In diesem Abschnitt werden drei Arten von Beispielen behandelt:

Codebeispiele

Im folgenden Beispiel sehen Sie, wie Sie einen Lastkostenposten mit allen verfügbaren Konfigurationsparametern strukturieren. In diesem Beispiel wird costPerKilometer verwendet. Sie können es aber durch costPerTraveledHour ersetzen, um die Kosten anhand der Reisezeit statt der Entfernung zu berechnen.

{
  "model": {
    "vehicles": [{
      "loadLimits": {
        "LOAD_TYPE": {
          "maxLoad": "MAX_LOAD",
          "costPerKilometer": {
            "loadThreshold": "LOAD_THRESHOLD",
            "costPerUnitAboveThreshold": COST_ABOVE,
            "costPerUnitBelowThreshold": COST_BELOW
          }
        }
      }
    }]
  }
}

Beispielszenario

In diesem Abschnitt wird ein Szenario beschrieben, in dem Sie den Kraftstoffverbrauch optimieren möchten. Der Kraftstoffverbrauch ist proportional zur Entfernung und zum Frachtgewicht. Da Fahrzeuge mehr Kraftstoff verbrauchen, wenn sie schwerere Lasten transportieren, sollten Sie Routen planen, bei denen schwerere Pakete zuerst ausgeliefert werden.

Um dieses Verhalten einzurichten, können Sie Ihre Anfrage so konfigurieren, dass Fahrzeuge, die lange Strecken mit schwerer Ladung zurücklegen, mit einem Aufschlag belegt werden. Verwenden Sie für dieses Beispiel die folgenden Property-Werte in Ihrer Anfrage:

Elternteil Attribut Typ Wert Szenario
loadLimits Lasttyp String weightKg Definiert den Typ der zu verfolgenden Kapazität. In diesem Beispiel wird weightKg verwendet, um das Frachtgewicht in Kilogramm darzustellen.
loadLimits maxLoad String 100 Das maximale Gewicht der Ladung, die das Fahrzeug transportieren kann.
costPerKilometer loadThreshold String 15 Legt den Schwellenwert für die Baseline-Last fest. Für jedes Frachtgewicht über 15 kg wird der lastabhängige Kraftstoffkostenzuschlag berechnet.
costPerKilometer costPerUnitAboveThreshold Zahl 1 Dient als Koeffizient für die Kraftstoffkosten. Für jeden gefahrenen Kilometer fallen für jedes Kilogramm Fracht über dem Grenzwert von 15 kg 1 Kosteneinheit an.
loadDemands amount String Sendung 1: 50
Sendung 2: 10
Sendung 3: 80
Gibt das Frachtgewicht für jede Ihrer drei Sendungen an.

In diesem Szenario haben die konfigurierten Werte die folgenden Auswirkungen:

  • Der Optimierer plant Ihre Routen so, dass die schwersten Pakete zuerst zugestellt werden. Der Solver plant die Lieferungen mit 80 kg und 50 kg am Anfang der Route, um die zurückgelegte Strecke bei schwerer Beladung zu minimieren.
  • Der Optimierer ordnet Ihre Routen so an, dass die mit schwerer Ladung zurückgelegte Strecke minimiert wird. Wenn Sie sehen möchten, wie sich diese Einstellungen auf Ihre Routen auswirken, können Sie costPerUnitAboveThreshold von 1 auf 5 erhöhen. Wenn Sie die Gewichtungsstrafe erhöhen, wird der Optimierer dazu veranlasst, noch mehr daran zu arbeiten, die zurückgelegte Strecke bei schwerer Ladung zu minimieren. Dadurch kann die Abfolge der Zustellungen neu angeordnet oder die Sendungen auf mehrere Fahrzeuge aufgeteilt werden.

Beispielanfrage

Das folgende Beispiel zeigt die Struktur einer einfachen optimizeTours-Anfrage, in die die Lastkostenwerte aus dem Beispielszenario aufgenommen wurden:

{
  "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
            }
          }
        }
      }
    ]
  }
}

Berechnungsformeln

Der Optimierer berechnet die Ladekosten mit den folgenden Formeln.

Vollständige Berechnung des Grenzbetrags

Wenn Sie sowohl costPerUnitAboveThreshold als auch costPerUnitBelowThreshold angeben, fallen separate Reisekosten für Ladungsmengen sowohl über als auch unter dem loadThreshold an. Die Formel lautet:

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

Wenn Sie beispielsweise die Werte aus dem Beispiel für eine Anfrage verwenden, wobei der Wert von costPerUnitBelowThreshold 2 ist, und das Fahrzeug 10 Kilometer mit einer Last von 50 kg zurücklegt, lautet die Berechnung so:

max(50 - 15, 0) * 10 * 1 + min(50, 15) * 10 * 2 = 650 cost units

Berechnung über dem Schwellenwert

Wenn Sie nur costPerUnitAboveThreshold angeben, ist die Berechnung ein Sonderfall der vollständigen Grenzbetragsformel. Da die Kosten unter dem Schwellenwert null sind, ergibt die zweite Hälfte der vollständigen Formel null. Die Formel lautet:

cost = max(carried_load - load_threshold, 0) * distance_or_time * cost_per_unit_above_threshold

Wenn Sie beispielsweise die Werte aus dem Beispiel für eine Anfrage verwenden, wobei loadThreshold gleich 15 und costPerUnitAboveThreshold gleich 1 ist, und das Fahrzeug 10 Kilometer mit einer Last von 50 kg zurücklegt, lautet die Berechnung so:

max(50 - 15, 0) * 10 * 1 = 350 cost units

Berechnung unterhalb des Grenzwerts

Wenn Sie nur costPerUnitBelowThreshold angeben, ist die Berechnung ein weiterer Sonderfall der vollständigen Grenzwertformel, bei dem die Kosten über dem Grenzwert null sind. Die Formel lautet:

cost = min(carried_load, load_threshold) * distance_or_time * cost_per_unit_below_threshold