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, die die Struktur der Ladekosten veranschaulichen.
- Beispielszenario, in dem eine Möglichkeit zur Verwendung von Ladekosten zur Erreichung eines Geschäftsziels beschrieben wird.
- Ein Beispiel für eine Anfrage, die die im Beispielszenario festgelegten Werte enthält.
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: 50Sendung 2: 10Sendung 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
costPerUnitAboveThresholdvon1auf5erhö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