In diesem Beispiel wird gezeigt, wie Sie Übergangsattribute verwenden, um Routen zu priorisieren, bei denen Abholungen und Zustellungen in der Nähe vom selben Fahrzeug in einem Zeitblock durchgeführt werden. Weitere Informationen zu Übergangsattributen finden Sie unter Geschäftslogik mit Übergangsattributen modellieren.
In diesem Fall gilt Folgendes:
- Die Lieferungen der Sendungen A, B und C liegen nah beieinander auf derselben Straße.
- Weitere Lieferungen sind geplant.
- Für Lieferungen sind keine bestimmten Lieferzeiten angegeben.
- Unabhängig vom Besuchsplan muss das Fahrzeug diese Straße zweimal befahren: einmal morgens auf dem Weg vom Depot und einmal abends auf dem Rückweg.
- Die Gesamtdistanz und ‑dauer der Route sind immer gleich, unabhängig davon, wann A, B und C ausgeführt werden.
In diesem Fall und bei einer Anfrage, bei der nur Kosten pro Stunde und Kosten pro Kilometer verwendet werden, könnte die optimierte Route so aussehen, dass A und B am Morgen und C am Abend erledigt werden. Die Kosten der Lösung wären dieselben, als wenn alle drei gleichzeitig erledigt würden.
Kosten pro Kilometer mit Grenzwert
Wenn Sie Besuche in der Nähe gruppieren möchten, müssen Sie zuerst eine Schwellendistanz auswählen. Das ist die maximale Entfernung zwischen zwei Besuchen, die Sie als nahe beieinander betrachten. In diesem Beispiel wird ein Grenzwert von 100 Metern verwendet, der in etwa einem Häuserblock in einem städtischen Gebiet entspricht. Sie können den Schwellenwert an Ihre geschäftlichen Anforderungen und die Präferenzen Ihrer Fahrer anpassen.
Um Besuche, die weniger als 100 Meter voneinander entfernt sind, zu gruppieren, legen Sie für die ersten 100 Meter jeder Übergangssequenz hohe Kosten und für alle zusätzlichen Meter des Übergangs niedrigere Kosten fest. Da die ersten 100 Meter am teuersten sind, erzielt der Optimizer die größten Einsparungen, indem er Übergänge verwendet, die kürzer als die 100-Meter-Grenze sind, auch wenn dadurch die Gesamtlänge der Route verlängert wird.
Um die Kosten einzurichten, fügen Sie ShipmentModel.transition_attributes
einen neuen Eintrag mit den folgenden Properties hinzu:
- Wenn Sie alle möglichen Übergänge abgleichen möchten, wählen Sie ein Tag aus, das nirgendwo im Modell verwendet wird, z. B.
UNUSED_TAG
. Legen Sie für dieses TagTransitionAttributes.excluded_src_tag
undTransitionAttributes.excluded_dst_tag
fest. - Richten Sie
TransitionAttributes.distance_limit
mit der Grenzentfernung und den Kosten ein:- Legen Sie für
DistanceLimit.soft_max_meters
den ausgewählten Grenzwert fest. - Legen Sie
DistanceLimit.cost_per_kilometer_below_soft_max
auf die Kosten pro Kilometer unter dem Grenzwert fest. - Legen Sie
DistanceLimit.cost_per_kilometer_above_soft_max
auf die Kosten pro Kilometer über dem Grenzwert fest.
- Legen Sie für
{
"model": {
"transitionAttributes": [
{
"excluded_dst_tag": "UNUSED_TAG",
"excluded_src_tag": "UNUSED_TAG",
"distanceLimit": {
"softMaxMeters": 100,
"costPerKilometerBelowSoftMax": 50,
"costPerKilometerAboveSoftMax": 1,
}
}
]
}
}
Das Tag #unused_tag#
darf nicht für Sendungen oder Fahrzeuge verwendet werden, um alle möglichen Übergänge abzugleichen. Weitere Informationen finden Sie unter Alle Besuchsanträge abgleichen.
Funktionsweise bei hohen Kosten unter dem Schwellenwert
In diesem Abschnitt wird gezeigt, wie sich die Kosten unter und über dem Schwellenwert auf die Gesamtkosten der verschiedenen Lösungen des Beispielszenarios auswirken.
Lösung 1: A und B auf dem Hinweg, C auf dem Rückweg
In dieser Lösung werden die Sendungen in die beiden Durchfahrten dieser Straße aufgeteilt. Zwei werden beim ersten Durchlauf und der verbleibende beim zweiten Durchlauf ausgeliefert. Es gibt fünf Übergänge:
Übergang | Entfernung | Unter Grenzwert | Über Grenzwert | ||
---|---|---|---|---|---|
Entfernung | Kosten | Entfernung | Kosten | ||
depot →A | 1.000 m | 100 m | 5 | 900 m | 0,9 |
A→B | 50 m | 50 m | 2,5 | 0 m | 0 |
B→other | 1.030 m | 100 m | 5 | 930 m | 0,93 |
other→C | 1.000 m | 100 m | 5 | 900 m | 0,9 |
C→Depot | 1080 m | 100 m | 5 | 980 m | 0,98 $ |
Gesamt | 450 m | 22,5 | 3.710 m | 3.71 |
Die Gesamtkosten werden als Summe der beiden Kosten pro Kilometer berechnet:
- die Kosten pro Kilometer unter dem Grenzwert (50) multipliziert mit der insgesamt zurückgelegten Strecke unter dem Grenzwert (450 m = 0,45 km),
- Die Kosten pro Kilometer über dem Grenzwert (1) multipliziert mit der insgesamt zurückgelegten Strecke über dem Grenzwert (3.710 m = 3,71 km).
Die Gesamtkosten betragen also 0,45 * 50 + 3,71 * 1 = 22,5 + 3,71 = 26,21.
Lösung 2: Auf dem Hinweg A, B und C ausführen, auf dem Rückweg nichts
Bei dieser Lösung werden im Gegensatz zu Lösung 1 alle drei Sendungen bei einer einzigen Fahrt auf der Straße „als Gruppe“ zugestellt. Bei der anderen Fahrt hält das Fahrzeug überhaupt nicht. Auch hier gibt es fünf Übergänge, aber ihre Länge und Zusammensetzung sind unterschiedlich:
Übergang | Entfernung | Unter Grenzwert | Über Grenzwert | ||
---|---|---|---|---|---|
Entfernung | Kosten | Entfernung | Kosten | ||
depot →A | 1.000 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→Sonstiges | 1.000 m | 100 m | 5 | 900 m | 0,9 |
other→depot | 2080 m | 100 m | 5 | 1980 m | 1,98 |
Gesamt | 380 m | 19 | 3780 m | 3,78 |
Bei derselben Berechnung wie in Lösung 1 betragen die Gesamtkosten 0,38 * 50 + 3,78 * 1 = 19 + 3,78 = 22,78. Alle Besuche in einem Zeitblock durchzuführen, ist also kostengünstiger als in zwei Gruppen. Sie können diesen Effekt verstärken, indem Sie DistanceLimit.cost_per_kilometer_below_soft_max
erhöhen.
Warum ein niedriger Kilometerpreis unter dem Schwellenwert nicht funktioniert
Da Sie kurze Übergänge bevorzugen, könnten Sie versucht sein, langen Übergängen hohe Kosten pro Kilometer zuzuweisen und die niedrigen Kosten pro Kilometer für kurze Übergänge beizubehalten. Das hat aber tatsächlich einen umgekehrten Effekt: Da die ersten 100 Meter des Übergangs am günstigsten sind, nutzt der Optimierer diese „günstigen“ Meter am effektivsten, indem er Übergänge mit einer Länge von fast oder mehr als 100 Metern bevorzugt.
Diesen Effekt können Sie sich in den beiden Beispiellösungen ansehen. Wenn Sie die Kosten pro Kilometer unter und über dem Grenzwert tauschen, ändern sich die Routenkosten:
Hohe Kosten über dem Grenzwert | Hohe Kosten unter dem Grenzwert | |||
---|---|---|---|---|
Lösung 1 | Lösung 2 | Lösung 1 | Lösung 2 | |
KMs unter dem Grenzwert | 0,45 | 0,38 | 0,45 | 0,38 |
Kosten pro Kilometer unter dem Grenzwert | 1,00 | 1,00 | 50,00 | 50,00 |
KMs über dem Schwellenwert | 3.71 | 3,78 | 3.71 | 3,78 |
Kosten pro Kilometer über dem Grenzwert | 50,00 | 50,00 | 1,00 | 1,00 |
Gesamtkosten | 185.95 | 189,38 | 26.21 | 22.78 |
Für jede Version werden die niedrigeren Gesamtkosten der beiden Lösungen fett hervorgehoben. Wenn Sie einen hohen Kostenwert über dem Grenzwert verwenden, sind die Gesamtkosten der Route für die Route, in der die Besuche gruppiert sind, jetzt höher. Das ist das Gegenteil von dem, was Sie erreichen wollten.