ShipmentModel

Ein Versandmodell enthält eine Reihe von Sendungen, die von einer Reihe von Fahrzeugen ausgeführt werden müssen, wobei die Gesamtkosten minimiert werden. Die Gesamtkosten sind die Summe aus:

  • die Kosten für die Routenplanung der Fahrzeuge (Summe der Kosten pro Gesamtzeit, Kosten pro Reisezeit und Fixkosten für alle Fahrzeuge).
  • die Strafen für nicht durchgeführte Lieferungen.
  • die Kosten für die globale Dauer der Sendungen
JSON-Darstellung
{
  "shipments": [
    {
      object (Shipment)
    }
  ],
  "vehicles": [
    {
      object (Vehicle)
    }
  ],
  "objectives": [
    {
      object (Objective)
    }
  ],
  "globalStartTime": string,
  "globalEndTime": string,
  "globalDurationCostPerHour": number,
  "durationDistanceMatrices": [
    {
      object (DurationDistanceMatrix)
    }
  ],
  "durationDistanceMatrixSrcTags": [
    string
  ],
  "durationDistanceMatrixDstTags": [
    string
  ],
  "transitionAttributes": [
    {
      object (TransitionAttributes)
    }
  ],
  "shipmentTypeIncompatibilities": [
    {
      object (ShipmentTypeIncompatibility)
    }
  ],
  "shipmentTypeRequirements": [
    {
      object (ShipmentTypeRequirement)
    }
  ],
  "precedenceRules": [
    {
      object (PrecedenceRule)
    }
  ],
  "maxActiveVehicles": integer
}
Felder
shipments[]

object (Shipment)

Eine Reihe von Sendungen, die im Modell ausgeführt werden müssen.

vehicles[]

object (Vehicle)

Eine Reihe von Fahrzeugen, die für Besuche verwendet werden können.

objectives[]

object (Objective)

Die Gruppe von Zielvorhaben für dieses Modell, die in Kosten umgewandelt werden. Wenn nicht leer, muss das Eingabemodell kostenlos sein. Verwenden Sie solvingMode = TRANSFORM_AND_RETURN_REQUEST, um die geänderte Anfrage zu erhalten. In diesem Fall wird die Anfrage nicht bearbeitet. Weitere Informationen finden Sie in der entsprechenden Dokumentation.

Experimentell: Weitere Informationen finden Sie unter https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request.

globalStartTime

string (Timestamp format)

Globale Start- und Endzeit des Modells: Zeiten außerhalb dieses Bereichs können nicht als gültig betrachtet werden.

Der Zeitraum des Modells darf nicht länger als ein Jahr sein. Das heißt, zwischen globalEndTime und globalStartTime dürfen nicht mehr als 31.536.000 Sekunden liegen.

Wenn Sie cost_per_*hour-Felder verwenden, sollten Sie dieses Fenster auf ein kleineres Intervall festlegen, um die Leistung zu steigern. Wenn Sie beispielsweise einen einzelnen Tag modellieren, sollten Sie die globalen Zeitlimits auf diesen Tag festlegen. Wenn kein Wert angegeben ist, wird standardmäßig der 1. Januar 1970 um 00:00:00 UTC verwendet (d. h. Sekunden: 0, Nanosekunden: 0).

Verwendet RFC 3339, wobei die generierte Ausgabe immer Z-normalisiert ist und 0, 3, 6 oder 9 Nachkommastellen verwendet. Andere Offsets als „Z“ werden ebenfalls akzeptiert. Beispiele: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" oder "2014-10-02T15:01:23+05:30".

globalEndTime

string (Timestamp format)

Wenn kein Wert angegeben ist, wird standardmäßig 00:00:00 UTC, 1. Januar 1971 (d. h. Sekunden: 31536000, Nanosekunden: 0) verwendet.

Verwendet RFC 3339, wobei die generierte Ausgabe immer Z-normalisiert ist und 0, 3, 6 oder 9 Nachkommastellen verwendet. Andere Offsets als „Z“ werden ebenfalls akzeptiert. Beispiele: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" oder "2014-10-02T15:01:23+05:30".

globalDurationCostPerHour

number

Die „globale Dauer“ des Gesamtplans ist die Differenz zwischen der frühesten effektiven Startzeit und der spätesten effektiven Endzeit aller Fahrzeuge. Nutzer können dieser Menge Kosten pro Stunde zuweisen, um beispielsweise die frühestmögliche Fertigstellung des Jobs zu optimieren. Diese Kosten müssen in derselben Einheit wie Shipment.penalty_cost angegeben werden.

durationDistanceMatrices[]

object (DurationDistanceMatrix)

Gibt die im Modell verwendeten Dauer- und Distanzmatrizen an. Wenn dieses Feld leer ist, werden stattdessen Google Maps- oder geodätische Distanzen verwendet, je nach Wert des Felds useGeodesicDistances. Wenn es nicht leer ist, darf useGeodesicDistances nicht „true“ sein und weder durationDistanceMatrixSrcTags noch durationDistanceMatrixDstTags dürfen leer sein.

Typische Syntax:

  • Es gibt zwei Standorte: locA und locB.
  • Ein Fahrzeug beginnt seine Route an Ort A und endet an Ort A.
  • 1 Abholanfrage am Standort B.
model {
  vehicles { startTags: "locA"  endTags: "locA" }
  shipments { pickups { tags: "locB" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixDstTags: "locA"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrices {
    rows {  # from: locA
      durations { seconds: 0 }   meters: 0    # to: locA
      durations { seconds: 100 } meters: 1000 # to: locB
    }
    rows {  # from: locB
      durations { seconds: 102 } meters: 990 # to: locA
      durations { seconds: 0 }   meters: 0   # to: locB
    }
  }
}
  • Es gibt drei Standorte: locA, locB und locC.
  • 1 Fahrzeug, das seine Route an locA beginnt und an locB beendet, wobei die Matrix „fast“ verwendet wird.
  • 1 Fahrzeug, das seine Route an locB beginnt und an locB beendet, wobei die Matrix „slow“ verwendet wird.
  • 1 Fahrzeug, das seine Route an locB beginnt und an locB beendet, wobei die Matrix „fast“ verwendet wird.
  • 1 Abholanfrage am Standort C.
model {
  vehicles { startTags: "locA" endTags: "locB" startTags: "fast" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "slow" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "fast" }
  shipments { pickups { tags: "locC" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixSrcTags: "locC"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrixDstTags: "locC"
  durationDistanceMatrices {
    vehicleStartTag: "fast"
    rows {  # from: locA
      durations { seconds: 1000 } meters: 2000 # to: locB
      durations { seconds: 600 }  meters: 1000 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }   meters: 0    # to: locB
      durations { seconds: 700 } meters: 1200 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 702 } meters: 1190 # to: locB
      durations { seconds: 0 }   meters: 0    # to: locC
    }
  }
  durationDistanceMatrices {
    vehicleStartTag: "slow"
    rows {  # from: locA
      durations { seconds: 1800 } meters: 2001 # to: locB
      durations { seconds: 900 }  meters: 1002 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }    meters: 0    # to: locB
      durations { seconds: 1000 } meters: 1202 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 1001 } meters: 1195 # to: locB
      durations { seconds: 0 }    meters: 0    # to: locC
    }
  }
}
durationDistanceMatrixSrcTags[]

string

Tags, die die Quellen der Dauer- und Distanzmatrizen definieren; durationDistanceMatrices(i).rows(j) definiert Dauer und Distanzen von Besuchen mit dem Tag durationDistanceMatrixSrcTags(j) zu anderen Besuchen in Matrix i.

Tags entsprechen VisitRequest.tags oder Vehicle.start_tags. Ein bestimmtes VisitRequest oder Vehicle muss genau mit einem Tag in diesem Feld übereinstimmen. Die Quell-, Ziel- und Matrix-Tags eines Vehicle können identisch sein. Ebenso können die Quell- und Ziel-Tags eines VisitRequest identisch sein. Alle Tags müssen sich unterscheiden und dürfen keine leeren Strings sein. Wenn dieses Feld nicht leer ist, darf durationDistanceMatrices nicht leer sein.

durationDistanceMatrixDstTags[]

string

Tags, die die Ziele der Dauer- und Distanzmatrizen definieren; durationDistanceMatrices(i).rows(j).durations(k) (bzw. durationDistanceMatrices(i).rows(j).meters(k)) definiert die Dauer (bzw. die Entfernung) der Reise von Besuchen mit dem Tag durationDistanceMatrixSrcTags(j) zu Besuchen mit dem Tag durationDistanceMatrixDstTags(k) in Matrix i.

Tags entsprechen VisitRequest.tags oder Vehicle.start_tags. Ein bestimmtes VisitRequest oder Vehicle muss genau mit einem Tag in diesem Feld übereinstimmen. Die Quell-, Ziel- und Matrix-Tags eines Vehicle können identisch sein. Ebenso können die Quell- und Ziel-Tags eines VisitRequest identisch sein. Alle Tags müssen sich unterscheiden und dürfen keine leeren Strings sein. Wenn dieses Feld nicht leer ist, darf durationDistanceMatrices nicht leer sein.

transitionAttributes[]

object (TransitionAttributes)

Dem Modell wurden Übergangsattribute hinzugefügt.

shipmentTypeIncompatibilities[]

object (ShipmentTypeIncompatibility)

Sets mit inkompatiblen shipment_types (siehe ShipmentTypeIncompatibility).

shipmentTypeRequirements[]

object (ShipmentTypeRequirement)

Sätze von shipmentType-Anforderungen (siehe ShipmentTypeRequirement).

precedenceRules[]

object (PrecedenceRule)

Eine Reihe von Vorrangregeln, die im Modell durchgesetzt werden müssen.

WICHTIG: Durch die Verwendung von Vorrangregeln wird die Größe des Problems, das optimiert werden kann, eingeschränkt. Anfragen mit Vorrangregeln, die viele Sendungen enthalten, können abgelehnt werden.

maxActiveVehicles

integer

Beschränkt die maximale Anzahl aktiver Fahrzeuge. Ein Fahrzeug ist aktiv, wenn auf seiner Route mindestens eine Sendung transportiert wird. So kann die Anzahl der Routen begrenzt werden, wenn es weniger Fahrer als Fahrzeuge gibt und die Fahrzeugflotte heterogen ist. Bei der Optimierung wird dann die beste Teilmenge von Fahrzeugen ausgewählt. Muss strikt positiv sein.

Versand

Der Versand eines einzelnen Artikels von einem seiner Abholorte zu einem seiner Lieferorte. Damit eine Lieferung als ausgeführt gilt, muss ein einzelnes Fahrzeug einen der Abholorte anfahren (und seine freien Kapazitäten entsprechend verringern) und später einen der Lieferorte anfahren (und seine freien Kapazitäten entsprechend wieder erhöhen).

JSON-Darstellung
{
  "displayName": string,
  "pickups": [
    {
      object (VisitRequest)
    }
  ],
  "deliveries": [
    {
      object (VisitRequest)
    }
  ],
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "allowedVehicleIndices": [
    integer
  ],
  "costsPerVehicle": [
    number
  ],
  "costsPerVehicleIndices": [
    integer
  ],
  "pickupToDeliveryAbsoluteDetourLimit": string,
  "pickupToDeliveryTimeLimit": string,
  "shipmentType": string,
  "label": string,
  "ignore": boolean,
  "penaltyCost": number,
  "pickupToDeliveryRelativeDetourLimit": number
}
Felder
displayName

string

Der benutzerdefinierte Anzeigename der Sendung. Sie kann bis zu 63 Zeichen lang sein und UTF-8-Zeichen enthalten.

pickups[]

object (VisitRequest)

Eine Reihe von Abholalternativen, die mit der Sendung verknüpft sind. Wenn nichts angegeben ist, muss das Fahrzeug nur einen Standort anfahren, der den Lieferungen entspricht.

deliveries[]

object (VisitRequest)

Eine Reihe von Lieferalternativen, die mit der Sendung verknüpft sind. Wenn nichts angegeben ist, muss das Fahrzeug nur einen Ort anfahren, der den Abholorten entspricht.

loadDemands

map (key: string, value: object (Load))

Anforderungen an die Ladung (z. B. Gewicht, Volumen, Anzahl der Paletten usw.). Die Schlüssel in der Map sollten Kennungen sein, die den Typ der entsprechenden Last beschreiben, idealerweise auch mit den Einheiten. Beispiele: „weight_kg“, „volume_gallons“, „pallet_count“ usw. Wenn ein bestimmter Schlüssel nicht in der Zuordnung enthalten ist, wird die entsprechende Ladung als null betrachtet.

allowedVehicleIndices[]

integer

Die Menge der Fahrzeuge, die diese Sendung ausführen können. Wenn das Feld leer ist, kann die Aktion von allen Fahrzeugen ausgeführt werden. Fahrzeuge werden anhand ihres Index in der vehicles-Liste von ShipmentModel angegeben.

costsPerVehicle[]

number

Gibt die Kosten an, die anfallen, wenn diese Sendung mit dem jeweiligen Fahrzeug zugestellt wird. Falls angegeben, muss es ENTWEDER:

  • dieselbe Anzahl an Elementen wie costsPerVehicleIndices. costsPerVehicle[i] entspricht dem Fahrzeug costsPerVehicleIndices[i] des Modells.
  • dieselbe Anzahl von Elementen wie Fahrzeuge im Modell. Das i-te Element entspricht Fahrzeug i des Modells.

Diese Kosten müssen in derselben Einheit wie penaltyCost angegeben werden und dürfen nicht negativ sein. Lassen Sie dieses Feld leer, wenn keine solchen Kosten anfallen.

costsPerVehicleIndices[]

integer

Die Indexe der Fahrzeuge, auf die costsPerVehicle angewendet wird. Wenn das Feld nicht leer ist, muss es dieselbe Anzahl an Elementen wie costsPerVehicle enthalten. Ein Fahrzeugindex darf nicht mehr als einmal angegeben werden. Wenn ein Fahrzeug aus costsPerVehicleIndices ausgeschlossen ist, sind seine Kosten null.

pickupToDeliveryAbsoluteDetourLimit

string (Duration format)

Gibt die maximale absolute Umwegzeit im Vergleich zum kürzesten Weg von der Abholung bis zur Zustellung an. Wenn angegeben, muss der Wert nicht negativ sein und die Sendung muss mindestens eine Abholung und eine Zustellung enthalten.

Sei t beispielsweise die kürzeste Zeit, die benötigt wird, um von der ausgewählten Abholalternative direkt zur ausgewählten Lieferalternative zu gelangen. Die Einstellung pickupToDeliveryAbsoluteDetourLimit erzwingt dann Folgendes:

startTime(delivery) - startTime(pickup) <=
t + pickupToDeliveryAbsoluteDetourLimit

Wenn sowohl relative als auch absolute Limits für dieselbe Sendung angegeben sind, wird für jedes mögliche Abhol-/Lieferpaar das restriktivere Limit verwendet. Seit Oktober 2017 werden Umwege nur unterstützt, wenn die Reisezeiten nicht von Fahrzeugen abhängen.

Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit "s". Beispiel: "3.5s".

pickupToDeliveryTimeLimit

string (Duration format)

Gibt die maximale Dauer vom Beginn der Abholung bis zum Beginn der Zustellung einer Sendung an. Wenn angegeben, muss der Wert nicht negativ sein und die Sendung muss mindestens eine Abholung und eine Zustellung enthalten. Das hängt weder davon ab, welche Alternativen für die Abholung und Zustellung ausgewählt sind, noch von der Fahrzeuggeschwindigkeit. Diese Einschränkung kann zusammen mit Einschränkungen für die maximale Umleitung angegeben werden. Die Lösung berücksichtigt dann beide Spezifikationen.

Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit "s". Beispiel: "3.5s".

shipmentType

string

Nicht leerer String, der einen „Typ“ für diese Sendung angibt. Mit dieser Funktion können Inkompatibilitäten oder Anforderungen zwischen shipment_types definiert werden (siehe shipmentTypeIncompatibilities und shipmentTypeRequirements in ShipmentModel).

Unterscheidet sich von visitTypes, das für einen einzelnen Besuch angegeben wird: Alle Abholungen/Lieferungen, die zur selben Sendung gehören, haben dieselbe shipmentType.

label

string

Gibt ein Label für diese Sendung an. Dieses Label wird in der Antwort im shipmentLabel des entsprechenden ShipmentRoute.Visit gemeldet.

ignore

boolean

Wenn „true“ angegeben ist, überspringen Sie diese Sendung, wenden Sie aber keine penaltyCost an.

Wenn Sie eine Sendung ignorieren, führt das zu einem Validierungsfehler, wenn im Modell shipmentTypeRequirements vorhanden sind.

Eine Sendung, die in injectedFirstSolutionRoutes oder injectedSolutionConstraint erfolgt, kann ignoriert werden. Der Solver entfernt die zugehörigen Abhol-/Lieferbesuche aus der Route. precedenceRules, die auf ignorierte Sendungen verweisen, werden ebenfalls ignoriert.

penaltyCost

number

Wenn die Lieferung nicht abgeschlossen wird, wird diese Strafe zu den Gesamtkosten der Routen hinzugerechnet. Eine Sendung gilt als abgeschlossen, wenn eine der Abhol- und Lieferalternativen besucht wurde. Die Kosten können in derselben Einheit wie alle anderen kostenbezogenen Felder im Modell angegeben werden und müssen positiv sein.

WICHTIG: Wenn diese Strafe nicht angegeben ist, wird sie als unendlich betrachtet, d.h. die Sendung muss abgeschlossen werden.

pickupToDeliveryRelativeDetourLimit

number

Gibt die maximale relative Umwegzeit im Vergleich zum kürzesten Weg von der Abholung bis zur Zustellung an. Wenn angegeben, muss der Wert nicht negativ sein und die Sendung muss mindestens eine Abholung und eine Zustellung enthalten.

Sei t beispielsweise die kürzeste Zeit, die benötigt wird, um von der ausgewählten Abholalternative direkt zur ausgewählten Lieferalternative zu gelangen. Die Einstellung pickupToDeliveryRelativeDetourLimit erzwingt dann Folgendes:

startTime(delivery) - startTime(pickup) <=
std::ceil(t * (1.0 + pickupToDeliveryRelativeDetourLimit))

Wenn sowohl relative als auch absolute Limits für dieselbe Sendung angegeben sind, wird für jedes mögliche Abhol-/Lieferpaar das restriktivere Limit verwendet. Seit Oktober 2017 werden Umwege nur unterstützt, wenn die Reisezeiten nicht von Fahrzeugen abhängen.

VisitRequest

Anfrage für einen Besuch, der mit einem Fahrzeug durchgeführt werden kann: Sie hat einen geografischen Standort (oder zwei, siehe unten), Öffnungs- und Schließzeiten, die durch Zeitfenster dargestellt werden, und eine Dienstleistungsdauer (Zeit, die das Fahrzeug benötigt, wenn es Waren abholt oder abliefert).

JSON-Darstellung
{
  "arrivalLocation": {
    object (LatLng)
  },
  "arrivalWaypoint": {
    object (Waypoint)
  },
  "departureLocation": {
    object (LatLng)
  },
  "departureWaypoint": {
    object (Waypoint)
  },
  "tags": [
    string
  ],
  "timeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "duration": string,
  "cost": number,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "visitTypes": [
    string
  ],
  "label": string,
  "avoidUTurns": boolean
}
Felder
arrivalLocation

object (LatLng)

Der geografische Standort, an dem das Fahrzeug bei der Ausführung dieses VisitRequest ankommt. Wenn das Versandmodell Distanzmatrizen mit Dauer enthält, darf arrivalLocation nicht angegeben werden.

arrivalWaypoint

object (Waypoint)

Der Wegpunkt, an dem das Fahrzeug bei Ausführung dieses VisitRequest ankommt. Wenn das Versandmodell Distanzmatrizen mit Dauer enthält, darf arrivalWaypoint nicht angegeben werden.

departureLocation

object (LatLng)

Der geografische Standort, an dem das Fahrzeug nach Abschluss dieses VisitRequest abfährt. Kann weggelassen werden, wenn sie mit arrivalLocation identisch ist. Wenn das Versandmodell Distanzmatrizen mit Dauer enthält, darf departureLocation nicht angegeben werden.

departureWaypoint

object (Waypoint)

Der Wegpunkt, an dem das Fahrzeug nach Abschluss dieser VisitRequest abfährt. Kann weggelassen werden, wenn sie mit arrivalWaypoint identisch ist. Wenn das Versandmodell Distanzmatrizen mit Dauer enthält, darf departureWaypoint nicht angegeben werden.

tags[]

string

Gibt Tags an, die an die Besuchsaufforderung angehängt werden. Leere oder doppelte Strings sind nicht zulässig.

timeWindows[]

object (TimeWindow)

Zeitfenster, die die Ankunftszeit an einem Standort einschränken. Ein Fahrzeug kann auch außerhalb des Ankunftszeitfensters abfahren. Ankunftszeit + Dauer müssen also nicht innerhalb eines Zeitfensters liegen. Das kann zu Wartezeiten führen, wenn das Fahrzeug vor TimeWindow.start_time eintrifft.

Wenn TimeWindow nicht vorhanden ist, kann das Fahrzeug diesen Besuch jederzeit durchführen.

Die Zeitfenster müssen disjunkt sein, d.h., sie dürfen sich nicht überschneiden oder aneinandergrenzen und müssen in aufsteigender Reihenfolge angegeben werden.

costPerHourAfterSoftEndTime und softEndTime können nur festgelegt werden, wenn es ein einzelnes Zeitfenster gibt.

duration

string (Duration format)

Dauer des Besuchs, d.h. Zeit, die das Fahrzeug zwischen Ankunft und Abfahrt verbringt (muss zur möglichen Wartezeit addiert werden; siehe timeWindows).

Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit "s". Beispiel: "3.5s".

cost

number

Kosten für die Bearbeitung dieser Besuchsaufforderung auf einer Fahrzeugroute. Damit können Sie für jede alternative Abholung oder Lieferung einer Sendung unterschiedliche Kosten bezahlen. Die Kosten müssen in derselben Einheit wie Shipment.penalty_cost angegeben werden und dürfen nicht negativ sein.

loadDemands

map (key: string, value: object (Load))

Ladeanforderungen dieser Besuchsaufforderung. Dieses Feld entspricht dem Feld Shipment.load_demands, gilt aber nur für diese VisitRequest und nicht für die gesamte Shipment. Die hier aufgeführten Anforderungen werden den Anforderungen in Shipment.load_demands hinzugefügt.

visitTypes[]

string

Gibt die Arten des Besuchs an. Damit kann zusätzliche Zeit zugewiesen werden, die ein Fahrzeug für diesen Besuch benötigt (siehe Vehicle.extra_visit_duration_for_visit_type).

Ein Typ kann nur einmal vorkommen.

label

string

Gibt ein Label für diese VisitRequest an. Dieses Label wird in der Antwort als visitLabel im entsprechenden ShipmentRoute.Visit gemeldet.

avoidUTurns

boolean

Gibt an, ob an diesem Ort Wendemanöver auf Fahrrouten vermieden werden sollen. Das Vermeiden von U-Turns erfolgt nach bestem Gewissen und kann nicht garantiert werden. Dies ist eine experimentelle Funktion und das Verhalten kann sich ändern.

Experimentell: Weitere Informationen finden Sie unter https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request.

LatLng

Ein Objekt, das ein Paar aus Breiten- und Längengrad darstellt. Es wird als Paar aus Werten vom Typ „Double“ (Breiten- und Längengrad) ausgedrückt. Sofern nicht anders angegeben, muss dieses Objekt dem WGS84-Standard entsprechen. Die Werte müssen innerhalb normalisierter Bereiche liegen.

JSON-Darstellung
{
  "latitude": number,
  "longitude": number
}
Felder
latitude

number

Der Breitengrad in Grad. Er muss im Bereich [-90,0, +90,0] liegen.

longitude

number

Der Längengrad in Grad. Er muss im Bereich [-180,0, +180,0] liegen.

Zwischenstopp

Kapselt einen Wegpunkt. Wegpunkte markieren Ankunfts- und Abfahrtsorte von VisitRequests sowie Start- und Endorte von Fahrzeugen.

JSON-Darstellung
{
  "sideOfRoad": boolean,
  "vehicleStopover": boolean,

  // Union field location_type can be only one of the following:
  "location": {
    object (Location)
  },
  "placeId": string
  // End of list of possible types for union field location_type.
}
Felder
sideOfRoad

boolean

Optional. Gibt an, dass das Fahrzeug an einer bestimmten Straßenseite anhalten soll. Wenn Sie diesen Wert festlegen, verläuft die Route durch den Ort, sodass das Fahrzeug am Straßenrand anhalten kann, der vom Straßenmittelpunkt aus in Richtung des Ortes liegt. Diese Option funktioniert nicht für die Mobilitätsform „WALKING“.

vehicleStopover

boolean

Gibt an, dass der Wegpunkt für Fahrzeuge vorgesehen ist, an denen sie anhalten sollen, um Personen abzuholen oder abzusetzen. Diese Option funktioniert nur für den Fortbewegungsmittelmodus „DRIVING“ und wenn „locationType“ auf „location“ festgelegt ist.

Testphase: Das Verhalten oder die Existenz dieses Felds kann sich in Zukunft ändern.

Union-Feld location_type. Verschiedene Möglichkeiten, einen Ort darzustellen. Für location_type ist nur einer der folgenden Werte zulässig:
location

object (Location)

Ein Punkt, der mit geografischen Koordinaten angegeben wird, einschließlich einer optionalen Richtung.

placeId

string

Die POI-Orts-ID, die mit dem Wegpunkt verknüpft ist.

Wenn Sie eine Orts-ID verwenden, um den Ankunfts- oder Abfahrtsort einer VisitRequest anzugeben, muss die Orts-ID so spezifisch sein, dass ein LatLng-Standort für die Navigation zum Ort bestimmt werden kann. Eine Orts-ID, die ein Gebäude darstellt, ist beispielsweise geeignet, eine Orts-ID, die eine Straße darstellt, jedoch nicht.

Standort

Kapselt einen Standort (einen geografischen Punkt und eine optionale Richtung).

JSON-Darstellung
{
  "latLng": {
    object (LatLng)
  },
  "heading": integer
}
Felder
latLng

object (LatLng)

Die geografischen Koordinaten des Wegpunkts.

heading

integer

Die Kompassausrichtung, die der Richtung des Verkehrsflusses zugeordnet ist. Mit diesem Wert wird die Straßenseite für die Abholung und das Absetzen angegeben. Die Werte für die Richtung können zwischen 0 und 360 liegen. Dabei steht 0 für Norden, 90 für Osten usw.

TimeWindow

Zeitfenster schränken die Zeit eines Ereignisses ein, z. B. die Ankunftszeit bei einem Besuch oder die Start- und Endzeit eines Fahrzeugs.

Mit den harten Zeitfenstergrenzen startTime und endTime wird die früheste und späteste Zeit des Ereignisses festgelegt, sodass startTime <= event_time <= endTime gilt. Die Untergrenze des weichen Zeitfensters, softStartTime, drückt eine Präferenz dafür aus, dass das Ereignis nach oder zum Zeitpunkt von softStartTime eintritt. Dies wird durch Kosten ausgedrückt, die proportional dazu sind, wie lange vor softStartTime das Ereignis eintritt. Die Obergrenze des weichen Zeitfensters, softEndTime, drückt eine Präferenz dafür aus, dass das Ereignis vor oder zum Zeitpunkt softEndTime eintritt. Die Kosten sind proportional dazu, wie lange nach softEndTime das Ereignis eintritt. startTime, endTime, softStartTime und softEndTime müssen innerhalb der globalen Zeitlimits liegen (siehe ShipmentModel.global_start_time und ShipmentModel.global_end_time) und Folgendes berücksichtigen:

  0 <= `startTime` <= `endTime` and
  0 <= `startTime` <= `softStartTime` and
  0 <= `softEndTime` <= `endTime`.
JSON-Darstellung
{
  "startTime": string,
  "endTime": string,
  "softStartTime": string,
  "softEndTime": string,
  "costPerHourBeforeSoftStartTime": number,
  "costPerHourAfterSoftEndTime": number
}
Felder
startTime

string (Timestamp format)

Die Startzeit des harten Zeitfensters. Wenn nicht angegeben, wird der Wert auf ShipmentModel.global_start_time gesetzt.

Verwendet RFC 3339, wobei die generierte Ausgabe immer Z-normalisiert ist und 0, 3, 6 oder 9 Nachkommastellen verwendet. Andere Offsets als „Z“ werden ebenfalls akzeptiert. Beispiele: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" oder "2014-10-02T15:01:23+05:30".

endTime

string (Timestamp format)

Das Ende des harten Zeitfensters. Wenn nicht angegeben, wird der Wert auf ShipmentModel.global_end_time gesetzt.

Verwendet RFC 3339, wobei die generierte Ausgabe immer Z-normalisiert ist und 0, 3, 6 oder 9 Nachkommastellen verwendet. Andere Offsets als „Z“ werden ebenfalls akzeptiert. Beispiele: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" oder "2014-10-02T15:01:23+05:30".

softStartTime

string (Timestamp format)

Die Soft-Startzeit des Zeitfensters.

Verwendet RFC 3339, wobei die generierte Ausgabe immer Z-normalisiert ist und 0, 3, 6 oder 9 Nachkommastellen verwendet. Andere Offsets als „Z“ werden ebenfalls akzeptiert. Beispiele: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" oder "2014-10-02T15:01:23+05:30".

softEndTime

string (Timestamp format)

Das weiche Ende des Zeitfensters.

Verwendet RFC 3339, wobei die generierte Ausgabe immer Z-normalisiert ist und 0, 3, 6 oder 9 Nachkommastellen verwendet. Andere Offsets als „Z“ werden ebenfalls akzeptiert. Beispiele: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" oder "2014-10-02T15:01:23+05:30".

costPerHourBeforeSoftStartTime

number

Kosten pro Stunde, die anderen Kosten im Modell hinzugefügt werden, wenn das Ereignis vor „softStartTime“ eintritt. Die Berechnung erfolgt so:

   max(0, softStartTime - t.seconds)
                          * costPerHourBeforeSoftStartTime / 3600,
t being the time of the event.

Diese Kosten müssen positiv sein und das Feld kann nur festgelegt werden, wenn „softStartTime“ festgelegt wurde.

costPerHourAfterSoftEndTime

number

Kosten pro Stunde, die anderen Kosten im Modell hinzugefügt werden, wenn das Ereignis nach softEndTime eintritt. Die Berechnung erfolgt so:

   max(0, t.seconds - softEndTime.seconds)
                    * costPerHourAfterSoftEndTime / 3600,
t being the time of the event.

Diese Kosten müssen positiv sein und das Feld kann nur festgelegt werden, wenn softEndTime festgelegt wurde.

Fahrzeug

Modelliert ein Fahrzeug bei einem Versandproblem. Wenn Sie ein Versandproblem beheben, wird für dieses Fahrzeug eine Route von startLocation nach endLocation erstellt. Eine Route ist eine Folge von Besuchen (siehe ShipmentRoute).

JSON-Darstellung
{
  "displayName": string,
  "travelMode": enum (TravelMode),
  "routeModifiers": {
    object (RouteModifiers)
  },
  "startLocation": {
    object (LatLng)
  },
  "startWaypoint": {
    object (Waypoint)
  },
  "endLocation": {
    object (LatLng)
  },
  "endWaypoint": {
    object (Waypoint)
  },
  "startTags": [
    string
  ],
  "endTags": [
    string
  ],
  "startTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "endTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "unloadingPolicy": enum (UnloadingPolicy),
  "loadLimits": {
    string: {
      object (LoadLimit)
    },
    ...
  },
  "costPerHour": number,
  "costPerTraveledHour": number,
  "costPerKilometer": number,
  "fixedCost": number,
  "usedIfRouteIsEmpty": boolean,
  "routeDurationLimit": {
    object (DurationLimit)
  },
  "travelDurationLimit": {
    object (DurationLimit)
  },
  "routeDistanceLimit": {
    object (DistanceLimit)
  },
  "extraVisitDurationForVisitType": {
    string: string,
    ...
  },
  "breakRule": {
    object (BreakRule)
  },
  "label": string,
  "ignore": boolean,
  "travelDurationMultiple": number
}
Felder
displayName

string

Der benutzerdefinierte Anzeigename des Fahrzeugs. Sie kann bis zu 63 Zeichen lang sein und UTF-8-Zeichen enthalten.

travelMode

enum (TravelMode)

Der Reisemodus, der sich auf die für das Fahrzeug nutzbaren Straßen und seine Geschwindigkeit auswirkt. Siehe auch travelDurationMultiple.

routeModifiers

object (RouteModifiers)

Eine Reihe von Bedingungen, die erfüllt sein müssen und sich auf die Berechnung von Routen für das jeweilige Fahrzeug auswirken.

startLocation

object (LatLng)

Geografischer Standort, an dem das Fahrzeug vor der Abholung von Sendungen startet. Wenn nicht angegeben, beginnt die Fahrt am ersten Abholort des Fahrzeugs. Wenn das Versandmodell Dauer- und Distanzmatrizen enthält, darf startLocation nicht angegeben werden.

startWaypoint

object (Waypoint)

Wegpunkt, der einen geografischen Ort darstellt, an dem das Fahrzeug vor der Abholung von Sendungen startet. Wenn weder startWaypoint noch startLocation angegeben ist, beginnt die Fahrt des Fahrzeugs am ersten Abholort. Wenn das Versandmodell Dauer- und Distanzmatrizen enthält, darf startWaypoint nicht angegeben werden.

endLocation

object (LatLng)

Geografischer Ort, an dem das Fahrzeug nach Abschluss der letzten VisitRequest steht. Wenn nicht angegeben, endet die ShipmentRoute des Fahrzeugs sofort nach Abschluss der letzten VisitRequest. Wenn das Versandmodell Dauer- und Distanzmatrizen enthält, darf endLocation nicht angegeben werden.

endWaypoint

object (Waypoint)

Wegpunkt, der einen geografischen Ort darstellt, an dem das Fahrzeug nach Abschluss der letzten VisitRequest endet. Wenn weder endWaypoint noch endLocation angegeben ist, endet die ShipmentRoute des Fahrzeugs sofort, wenn die letzte VisitRequest abgeschlossen ist. Wenn das Versandmodell Dauer- und Distanzmatrizen enthält, darf endWaypoint nicht angegeben werden.

startTags[]

string

Gibt Tags an, die dem Start der Route des Fahrzeugs zugeordnet sind.

Leere oder doppelte Strings sind nicht zulässig.

endTags[]

string

Gibt Tags an, die am Ende der Route des Fahrzeugs angehängt werden.

Leere oder doppelte Strings sind nicht zulässig.

startTimeWindows[]

object (TimeWindow)

Zeitfenster, in denen das Fahrzeug vom Startort abfahren darf. Sie müssen innerhalb der globalen Zeitlimits liegen (siehe ShipmentModel.global_*-Felder). Wenn keine Angabe erfolgt, gibt es keine Einschränkungen, die über die globalen Zeitlimits hinausgehen.

Zeiträume, die zum selben wiederholten Feld gehören, dürfen sich nicht überschneiden oder aneinandergrenzen und müssen in chronologischer Reihenfolge angegeben werden.

costPerHourAfterSoftEndTime und softEndTime können nur festgelegt werden, wenn es ein einzelnes Zeitfenster gibt.

endTimeWindows[]

object (TimeWindow)

Zeitfenster, in denen das Fahrzeug am Zielort eintreffen kann. Sie müssen innerhalb der globalen Zeitlimits liegen (siehe ShipmentModel.global_*-Felder). Wenn keine Angabe erfolgt, gibt es keine Einschränkungen, die über die globalen Zeitlimits hinausgehen.

Zeiträume, die zum selben wiederholten Feld gehören, dürfen sich nicht überschneiden oder aneinandergrenzen und müssen in chronologischer Reihenfolge angegeben werden.

costPerHourAfterSoftEndTime und softEndTime können nur festgelegt werden, wenn es ein einzelnes Zeitfenster gibt.

unloadingPolicy

enum (UnloadingPolicy)

Die Richtlinie zum Entladen wird auf das Fahrzeug angewendet.

loadLimits

map (key: string, value: object (LoadLimit))

Kapazitäten des Fahrzeugs (z. B. Gewicht, Volumen, Anzahl der Paletten). Die Schlüssel in der Karte sind die Kennungen des Lasttyps, die mit den Schlüsseln des Felds Shipment.load_demands übereinstimmen. Wenn ein bestimmter Schlüssel in dieser Zuordnung fehlt, wird die entsprechende Kapazität als unbegrenzt betrachtet.

costPerHour

number

Fahrzeugkosten: Alle Kosten werden addiert und müssen in derselben Einheit wie Shipment.penalty_cost angegeben werden.

Kosten pro Stunde der Fahrzeugroute. Diese Kosten werden auf die Gesamtzeit der Route angewendet und umfassen Fahrzeit, Wartezeit und Besuchszeit. Die Verwendung von costPerHour anstelle von costPerTraveledHour kann zu zusätzlicher Latenz führen.

costPerTraveledHour

number

Kosten pro gefahrener Stunde der Fahrzeugroute. Diese Kosten werden nur auf die Reisezeit der Route angewendet (d. h. auf die in ShipmentRoute.transitions angegebene Zeit). Wartezeit und Besuchszeit sind nicht enthalten.

costPerKilometer

number

Kosten pro Kilometer der Fahrzeugroute. Diese Kosten werden auf die in ShipmentRoute.transitions angegebene Entfernung angewendet und gelten nicht für Entfernungen, die implizit vom arrivalLocation zum departureLocation eines einzelnen VisitRequest zurückgelegt werden.

fixedCost

number

Feste Kosten, die anfallen, wenn dieses Fahrzeug für den Transport einer Sendung verwendet wird.

usedIfRouteIsEmpty

boolean

Dieses Feld gilt nur für Fahrzeuge, deren Route keine Lieferungen umfasst. Gibt an, ob das Fahrzeug in diesem Fall als gebraucht betrachtet werden soll.

Wenn „true“ festgelegt ist, fährt das Fahrzeug von seinem Start- zum Zielort, auch wenn es keine Sendungen transportiert. Zeit- und Entfernungskosten, die sich aus der Fahrt vom Start- zum Zielort ergeben, werden berücksichtigt.

Andernfalls fährt es nicht von seinem Start- zum Zielort und es sind keine breakRule oder Verspätungen (ab TransitionAttributes) für dieses Fahrzeug geplant. In diesem Fall enthält ShipmentRoute des Fahrzeugs keine Informationen außer dem Fahrzeugindex und dem Label.

routeDurationLimit

object (DurationLimit)

Limit für die Gesamtdauer der Route des Fahrzeugs. In einem bestimmten OptimizeToursResponse ist die Routendauer eines Fahrzeugs die Differenz zwischen vehicleEndTime und vehicleStartTime.

travelDurationLimit

object (DurationLimit)

Beschränkung der Reisedauer der Fahrzeugroute. In einem bestimmten OptimizeToursResponse ist die Reisedauer der Route die Summe aller zugehörigen transitions.travel_duration.

routeDistanceLimit

object (DistanceLimit)

Limit für die Gesamtstrecke der Fahrzeugroute. In einem bestimmten OptimizeToursResponse ist die Routenentfernung die Summe aller seiner transitions.travel_distance_meters.

extraVisitDurationForVisitType

map (key: string, value: string (Duration format))

Gibt eine Zuordnung von „visitTypes“-Strings zu Zeiträumen an. Die Dauer ist die Zeit zusätzlich zu VisitRequest.duration, die bei Besuchen mit der angegebenen visitTypes eingeplant werden muss. Diese zusätzliche Besuchszeit führt zu zusätzlichen Kosten, wenn costPerHour angegeben ist. Schlüssel (d.h. visitTypes) dürfen keine leeren Strings sein.

Wenn eine Besichtigung mehrere Typen hat, wird für jeden Typ eine Dauer auf der Karte hinzugefügt.

breakRule

object (BreakRule)

Beschreibt den Pausenplan, der für dieses Fahrzeug erzwungen werden soll. Wenn das Feld leer ist, werden für dieses Fahrzeug keine Pausen eingeplant.

label

string

Gibt ein Label für dieses Fahrzeug an. Dieses Label wird in der Antwort als vehicleLabel des entsprechenden ShipmentRoute gemeldet.

ignore

boolean

Wenn „true“ angegeben ist, muss usedIfRouteIsEmpty „false“ sein und dieses Fahrzeug wird nicht verwendet.

Wenn eine Lieferung von einem ignorierten Fahrzeug in injectedFirstSolutionRoutes durchgeführt wird, wird sie in der ersten Lösung übersprungen, kann aber in der Antwort durchgeführt werden.

Wenn eine Sendung mit einem ignorierten Fahrzeug in injectedSolutionConstraint durchgeführt wird und die zugehörige Abholung/Lieferung auf das Fahrzeug beschränkt ist (d.h. nicht auf die Ebene RELAX_ALL_AFTER_THRESHOLD gelockert wird), wird sie in der Antwort übersprungen. Wenn eine Sendung ein nicht leeres Feld allowedVehicleIndices hat und alle zulässigen Fahrzeuge ignoriert werden, wird sie in der Antwort übersprungen.

travelDurationMultiple

number

Gibt einen multiplikativen Faktor an, mit dem die Fahrzeiten dieses Fahrzeugs verlängert oder verkürzt werden können. Wenn Sie diesen Wert beispielsweise auf 2,0 festlegen, ist das Fahrzeug langsamer und die Fahrzeiten sind doppelt so lang wie bei Standardfahrzeugen. Dieser Faktor hat keine Auswirkungen auf die Besuchszeiten. Es wirkt sich auf die Kosten aus, wenn costPerHour oder costPerTraveledHour angegeben sind. Dieser Wert muss im Bereich [0,001, 1.000,0] liegen. Wenn nicht festgelegt, ist das Fahrzeug standardmäßig und dieser Faktor wird als 1, 0 betrachtet.

ACHTUNG: Reisezeiten werden nach Anwendung dieses Vielfachen, aber vor allen numerischen Operationen auf die nächste Sekunde gerundet. Ein kleines Vielfaches kann daher zu einem Genauigkeitsverlust führen.

Siehe auch extraVisitDurationForVisitType unten.

TravelMode

Mobilitätsformen, die von Fahrzeugen genutzt werden können.

Dies sollte eine Teilmenge der Google Maps Platform Routes API-Fortbewegungsmittel sein. Weitere Informationen finden Sie unter https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode.

Hinweis: WALKING-Routen befinden sich in der Betaphase und enthalten möglicherweise nicht immer ausgewiesene Fußgängerwege. Sie müssen diese Warnung für alle Fußgängerrouten, die Sie in Ihrer App anzeigen, für den Nutzer einblenden.

Enums
TRAVEL_MODE_UNSPECIFIED Nicht angegebene Mobilitätsform, entspricht DRIVING.
DRIVING Mobilitätsform, die der Wegbeschreibung entspricht (Auto usw.).
WALKING Mobilitätsform für die Wegbeschreibung für Fußgänger.

RouteModifiers

Kapselt eine Reihe optionaler Bedingungen, die bei der Berechnung von Fahrzeugrouten erfüllt werden müssen. Dies ähnelt RouteModifiers in der Google Maps Platform Routes Preferred API. Weitere Informationen finden Sie unter https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers.

JSON-Darstellung
{
  "avoidTolls": boolean,
  "avoidHighways": boolean,
  "avoidFerries": boolean,
  "avoidIndoor": boolean
}
Felder
avoidTolls

boolean

Gibt an, ob Mautstraßen nach Möglichkeit vermieden werden sollen. Routen ohne Mautstraßen werden bevorzugt. Gilt nur für motorisierte Fortbewegungsmittel.

avoidHighways

boolean

Gibt an, ob Autobahnen nach Möglichkeit vermieden werden sollen. Routen ohne Autobahnen werden bevorzugt. Gilt nur für motorisierte Fortbewegungsmittel.

avoidFerries

boolean

Gibt an, ob Fähren nach Möglichkeit vermieden werden sollen. Routen ohne Fährverbindungen werden bevorzugt. Gilt nur für motorisierte Fortbewegungsmittel.

avoidIndoor

boolean

Optional. Gibt an, ob die Navigation in Innenräumen nach Möglichkeit vermieden werden soll. Routen ohne Indoor-Navigation werden bevorzugt. Gilt nur für den Fortbewegungsmodus WALKING.

UnloadingPolicy

Richtlinie zum Entladen eines Fahrzeugs. Gilt nur für Sendungen mit Abholung und Zustellung.

Andere Sendungen können unabhängig von unloadingPolicy überall auf der Route erfolgen.

Enums
UNLOADING_POLICY_UNSPECIFIED Keine Angaben zur Entladung; Lieferungen müssen nur nach den entsprechenden Abholungen erfolgen.
LAST_IN_FIRST_OUT Lieferungen müssen in umgekehrter Reihenfolge der Abholungen erfolgen
FIRST_IN_FIRST_OUT Lieferungen müssen in derselben Reihenfolge wie Abholungen erfolgen

LoadLimit

Definiert ein Ladungsgewichtslimit für ein Fahrzeug, z. B. „Dieser Lkw darf nur bis zu 3.500 kg transportieren“. loadLimits ansehen.

JSON-Darstellung
{
  "softMaxLoad": string,
  "costPerUnitAboveSoftMax": number,
  "startLoadInterval": {
    object (Interval)
  },
  "endLoadInterval": {
    object (Interval)
  },
  "maxLoad": string,
  "costPerKilometer": {
    object (LoadCost)
  },
  "costPerTraveledHour": {
    object (LoadCost)
  }
}
Felder
softMaxLoad

string (int64 format)

Ein weiches Limit für die Last. costPerUnitAboveSoftMax ansehen.

costPerUnitAboveSoftMax

number

Wenn die Last auf der Route dieses Fahrzeugs jemals softMaxLoad überschreitet, wird die folgende Kostenstrafe angewendet (nur einmal pro Fahrzeug): (Last – softMaxLoad) × costPerUnitAboveSoftMax. Alle Kosten werden addiert und müssen in derselben Einheit wie Shipment.penalty_cost angegeben werden. Weiche Limits dürfen nur für Typen definiert werden, die im gesamten Modell entweder nur für Abholungen oder nur für Lieferungen gelten.

startLoadInterval

object (Interval)

Das zulässige Ladeintervall des Fahrzeugs zu Beginn der Route.

endLoadInterval

object (Interval)

Das zulässige Ladeintervall des Fahrzeugs am Ende der Route.

maxLoad

string (int64 format)

Die maximal zulässige Belastung.

costPerKilometer

object (LoadCost)

Kosten für den Transport einer Ladeeinheit über einen Kilometer mit diesem Fahrzeug. Dies kann als Proxy für den Kraftstoffverbrauch verwendet werden: Wenn die Last ein Gewicht (in Newton) ist, hat „Last × Kilometer“ die Dimension einer Energie.

Experimentell: Weitere Informationen finden Sie unter https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request.

costPerTraveledHour

object (LoadCost)

Kosten für die Beförderung einer Ladeeinheit mit diesem Fahrzeug für eine Stunde.

Experimentell: Weitere Informationen finden Sie unter https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request.

Intervall

Intervall der zulässigen Ladebeträge.

JSON-Darstellung
{
  "min": string,
  "max": string
}
Felder
min

string (int64 format)

Eine Mindestlast. Muss ≥ 0 sein. Wenn beide angegeben sind, muss min ≤ max sein.

max

string (int64 format)

Eine maximal zulässige Belastung. Muss ≥ 0 sein. Wenn keine Angabe erfolgt, ist die maximale Belastung durch diese Meldung nicht eingeschränkt. Wenn beide angegeben sind, muss min ≤ max sein.

LoadCost

Kosten für die Verlagerung einer Lasteinheit während eines Transition. Die Kosten für eine bestimmte Last setzen sich aus zwei Teilen zusammen:

  • min(load, loadThreshold) * costPerUnitBelowThreshold
  • max(0, load – loadThreshold) * costPerUnitAboveThreshold

Bei diesen Kosten werden Lösungen bevorzugt, bei denen zuerst hohe Anforderungen erfüllt werden oder hohe Anforderungen zuletzt abgeholt werden. Wenn ein Fahrzeug beispielsweise

load_limit {
  key: "weight"
  value {
    costPerKilometer {
      loadThreshold: 15
      costPerUnitBelowThreshold: 2.0
      costPerUnitAboveThreshold: 10.0
    }
  }
}

Die Route ist: Start,Abholung,Abholung,Lieferung,Lieferung,Ende. Die Übergänge sind:

transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }

dann sind die Kosten für diese LoadCost (cost_below * load_below * kilometers + cost_above * load_above * kms).

  • Übergang 0: 0,0
  • Übergang 1: 2,0 × 10 × 1,0 + 10,0 × 0 × 1,0 = 20,0
  • Übergang 2: 2,0 × 15 × 1,0 + 10,0 × (20 – 15) × 1,0 = 80,0
  • Übergang 3: 2,0 × 10 × 1,0 + 10,0 × 0 × 1,0 = 20,0
  • Übergang 4: 0,0

Der LoadCost für die Route beträgt also 120,0.

Wenn die Route jedoch mit Übergängen beginnt und endet, z. B. „Start,Abholung,Zustellung,Abholung,Zustellung,Ende“:

transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }

dann sind die Kosten für diese LoadCost

  • Übergang 0: 0,0
  • Übergang 1: 2,0 × 10 × 1,0 + 10,0 × 0 × 1,0 = 20,0
  • Übergang 2: 0,0
  • Übergang 3: 2,0 × 10 × 1,0 + 10,0 × 0 × 1,0 = 20,0
  • Übergang 4: 0,0

Hier beträgt der LoadCost für die Route 40,0.

LoadCost macht Lösungen mit stark ausgelasteten Übergängen teurer.

Experimentell: Weitere Informationen finden Sie unter https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request.

JSON-Darstellung
{
  "loadThreshold": string,
  "costPerUnitBelowThreshold": number,
  "costPerUnitAboveThreshold": number
}
Felder
loadThreshold

string (int64 format)

Die Menge der Last, ab der sich die Kosten für das Verschieben einer Lasteinheit von „costPerUnitBelowThreshold“ zu „costPerUnitAboveThreshold“ ändern. Muss >= 0 sein.

costPerUnitBelowThreshold

number

Die Kosten für das Verschieben einer Lasteinheit für jede Einheit zwischen 0 und dem Schwellenwert. Muss ein endlicher Wert und >= 0 sein.

costPerUnitAboveThreshold

number

Kosten für die Verlagerung einer Lasteinheit für jede Einheit über dem Schwellenwert. Im Sonderfall „Grenzwert = 0“ handelt es sich um einen Fixkostenbetrag pro Einheit. Muss ein endlicher Wert und >= 0 sein.

DurationLimit

Ein Grenzwert, der die maximale Dauer der Route eines Fahrzeugs definiert. Sie kann entweder hart oder weich sein.

Wenn ein Feld für ein weiches Limit definiert ist, müssen sowohl der Grenzwert für das weiche Maximum als auch die zugehörigen Kosten zusammen definiert werden.

JSON-Darstellung
{
  "maxDuration": string,
  "softMaxDuration": string,
  "quadraticSoftMaxDuration": string,
  "costPerHourAfterSoftMax": number,
  "costPerSquareHourAfterQuadraticSoftMax": number
}
Felder
maxDuration

string (Duration format)

Ein hartes Limit, das die Dauer auf maximal „maxDuration“ begrenzt.

Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit "s". Beispiel: "3.5s".

softMaxDuration

string (Duration format)

Ein weiches Limit, das keine maximale Dauer erzwingt, aber bei Überschreitung Kosten für die Route verursacht. Diese Kosten werden zu anderen Kosten addiert, die im Modell definiert sind und dieselbe Einheit haben.

Falls definiert, muss softMaxDuration nicht negativ sein. Wenn auch „maxDuration“ definiert ist, muss softMaxDuration kleiner als „maxDuration“ sein.

Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit "s". Beispiel: "3.5s".

quadraticSoftMaxDuration

string (Duration format)

Ein weiches Limit, das keine maximale Dauer erzwingt, aber bei Überschreitung Kosten für die Route verursacht, die quadratisch mit der Dauer steigen. Diese Kosten werden zu anderen Kosten addiert, die im Modell definiert sind und dieselbe Einheit haben.

Falls definiert, muss quadraticSoftMaxDuration nicht negativ sein. Wenn auch maxDuration definiert ist, muss quadraticSoftMaxDuration kleiner als maxDuration sein und die Differenz darf nicht größer als ein Tag sein:

maxDuration - quadraticSoftMaxDuration <= 86400 seconds

Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit "s". Beispiel: "3.5s".

costPerHourAfterSoftMax

number

Kosten pro Stunde, die anfallen, wenn der softMaxDuration-Grenzwert überschritten wird. Die zusätzlichen Kosten betragen 0, wenn die Dauer unter dem Schwellenwert liegt. Andernfalls hängen die Kosten wie folgt von der Dauer ab:

  costPerHourAfterSoftMax * (duration - softMaxDuration)

Die Kosten dürfen nicht negativ sein.

costPerSquareHourAfterQuadraticSoftMax

number

Kosten pro Quadratstunde, die anfallen, wenn der quadraticSoftMaxDuration-Grenzwert überschritten wird.

Die zusätzlichen Kosten betragen 0, wenn die Dauer unter dem Schwellenwert liegt. Andernfalls hängen die Kosten wie folgt von der Dauer ab:

  costPerSquareHourAfterQuadraticSoftMax *
  (duration - quadraticSoftMaxDuration)^2

Die Kosten dürfen nicht negativ sein.

DistanceLimit

Ein Limit, das die maximale Entfernung definiert, die zurückgelegt werden kann. Sie kann entweder hart oder weich sein.

Wenn ein Soft Limit definiert ist, müssen sowohl softMaxMeters als auch costPerKilometerAboveSoftMax definiert und nicht negativ sein.

JSON-Darstellung
{
  "maxMeters": string,
  "softMaxMeters": string,
  "costPerKilometerBelowSoftMax": number,
  "costPerKilometerAboveSoftMax": number
}
Felder
maxMeters

string (int64 format)

Eine harte Beschränkung, die den Abstand auf maximal „maxMeters“ begrenzt. Das Limit darf nicht negativ sein.

softMaxMeters

string (int64 format)

Ein weiches Limit erzwingt keine maximale Entfernung, führt aber bei Überschreitung zu Kosten, die zu anderen im Modell definierten Kosten mit derselben Einheit addiert werden.

Wenn definiert, muss „softMaxMeters“ kleiner als „maxMeters“ und nicht negativ sein.

costPerKilometerBelowSoftMax

number

Anfallende Kosten pro Kilometer, die bis zu softMaxMeters steigen, mit folgender Formel:

  min(distanceMeters, softMaxMeters) / 1000.0 *
  costPerKilometerBelowSoftMax.

Diese Kosten werden in routeDistanceLimit nicht unterstützt.

costPerKilometerAboveSoftMax

number

Kosten pro Kilometer, die anfallen, wenn die Entfernung das Limit von softMaxMeters überschreitet. Die zusätzlichen Kosten betragen 0, wenn die Entfernung unter dem Grenzwert liegt. Andernfalls wird die folgende Formel zur Berechnung der Kosten verwendet:

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

Die Kosten dürfen nicht negativ sein.

BreakRule

Regeln zum Generieren von Zeitunterbrechungen für ein Fahrzeug (z.B. Mittagspausen). Eine Pause ist ein zusammenhängender Zeitraum, in dem das Fahrzeug an seiner aktuellen Position inaktiv bleibt und keinen Besuch durchführen kann. Eine Unterbrechung kann folgende Ursachen haben:

  • während der Reise zwischen zwei Besuchen (einschließlich der Zeit unmittelbar vor oder nach einem Besuch, aber nicht in der Mitte eines Besuchs). In diesem Fall wird die entsprechende Transitzeit zwischen den Besuchen verlängert.
  • oder vor dem Start des Fahrzeugs (das Fahrzeug darf nicht mitten in einer Pause starten). In diesem Fall wird die Startzeit des Fahrzeugs nicht beeinflusst.
  • oder nach dem Ende der Fahrt (siehe oben, mit der Endzeit der Fahrt).
JSON-Darstellung
{
  "breakRequests": [
    {
      object (BreakRequest)
    }
  ],
  "frequencyConstraints": [
    {
      object (FrequencyConstraint)
    }
  ]
}
Felder
breakRequests[]

object (BreakRequest)

Reihenfolge der Unterbrechungen. Sehen Sie sich die Meldung BreakRequest an.

frequencyConstraints[]

object (FrequencyConstraint)

Es können mehrere FrequencyConstraint gelten. Alle müssen durch die BreakRequest dieses BreakRule erfüllt werden. Siehe FrequencyConstraint.

BreakRequest

Die Reihenfolge der Pausen (d.h. ihre Anzahl und Reihenfolge), die für jedes Fahrzeug gelten, muss im Voraus bekannt sein. Die wiederholten BreakRequests definieren diese Sequenz in der Reihenfolge, in der sie auftreten müssen. Die Zeiträume (earliestStartTime / latestStartTime) können sich überschneiden, müssen aber mit der Reihenfolge kompatibel sein (das wird geprüft).

JSON-Darstellung
{
  "earliestStartTime": string,
  "latestStartTime": string,
  "minDuration": string
}
Felder
earliestStartTime

string (Timestamp format)

Erforderlich. Inklusive Untergrenze für den Beginn der Pause.

Verwendet RFC 3339, wobei die generierte Ausgabe immer Z-normalisiert ist und 0, 3, 6 oder 9 Nachkommastellen verwendet. Andere Offsets als „Z“ werden ebenfalls akzeptiert. Beispiele: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" oder "2014-10-02T15:01:23+05:30".

latestStartTime

string (Timestamp format)

Erforderlich. Obergrenze (einschließlich) für den Beginn der Pause.

Verwendet RFC 3339, wobei die generierte Ausgabe immer Z-normalisiert ist und 0, 3, 6 oder 9 Nachkommastellen verwendet. Andere Offsets als „Z“ werden ebenfalls akzeptiert. Beispiele: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" oder "2014-10-02T15:01:23+05:30".

minDuration

string (Duration format)

Erforderlich. Mindestdauer der Pause. Muss positiv sein.

Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit "s". Beispiel: "3.5s".

FrequencyConstraint

Die oben angegebene Häufigkeit und Dauer der Pausen kann weiter eingeschränkt werden, indem eine Mindestpausenhäufigkeit festgelegt wird, z. B. „Alle 12 Stunden muss eine Pause von mindestens einer Stunde eingelegt werden“. Wenn wir davon ausgehen, dass dies als „In einem beliebigen gleitenden Zeitfenster von 12 Stunden muss es mindestens eine Pause von mindestens einer Stunde geben“ interpretiert werden kann, würde das Beispiel in die folgende FrequencyConstraint übersetzt:

{
   minBreakDuration { seconds: 3600 }         # 1 hour.
   maxInterBreakDuration { seconds: 39600 }  # 11 hours (12 - 1 = 11).
}

Das Timing und die Dauer der Pausen in der Lösung berücksichtigen alle diese Einschränkungen sowie die bereits in der BreakRequest angegebenen Zeitfenster und Mindestdauern.

Eine FrequencyConstraint kann in der Praxis auch auf nicht aufeinanderfolgende Pausen angewendet werden. Im folgenden Zeitplan wird beispielsweise das Beispiel „1 Stunde alle 12 Stunden“ berücksichtigt:

  04:00 vehicle start
   .. performing travel and visits ..
  09:00 1 hour break
  10:00 end of the break
   .. performing travel and visits ..
  12:00 20-min lunch break
  12:20 end of the break
   .. performing travel and visits ..
  21:00 1 hour break
  22:00 end of the break
   .. performing travel and visits ..
  23:59 vehicle end
JSON-Darstellung
{
  "minBreakDuration": string,
  "maxInterBreakDuration": string
}
Felder
minBreakDuration

string (Duration format)

Erforderlich. Mindestdauer der Pause für diese Einschränkung. Nicht negativ. Siehe Beschreibung von FrequencyConstraint.

Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit "s". Beispiel: "3.5s".

maxInterBreakDuration

string (Duration format)

Erforderlich. Die maximal zulässige Dauer eines beliebigen Zeitintervalls auf der Route, das nicht mindestens teilweise eine Pause von duration >= minBreakDuration umfasst. Muss positiv sein.

Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit "s". Beispiel: "3.5s".

Ziel

Zielvorhaben ersetzen das Kostenmodell vollständig und sind daher nicht mit bestehenden Kosten kompatibel. Jedes Ziel wird einer Reihe vordefinierter Kosten für z.B. Fahrzeuge, Sendungen oder Übergangsattribute zugeordnet.

Experimentell: Weitere Informationen finden Sie unter https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request.

JSON-Darstellung
{
  "type": enum (Type),
  "weight": number
}
Felder
type

enum (Type)

Der Typ des Zielvorhabens.

weight

number

Wie viel dieses Zielvorhaben im Verhältnis zu den anderen zählen soll. Das kann eine beliebige nicht negative Zahl sein. Die Summe der Gewichte muss nicht 1 ergeben. Die Standardeinstellung für Gewichte ist 1,0.

Typ

Der Zielvorhabentyp, der einer Reihe von Kosten zugeordnet wird.

Enums
DEFAULT Es wird ein Standardsatz von Kosten verwendet, um eine angemessene Lösung zu gewährleisten. Hinweis: Dieses Ziel kann allein verwendet werden, wird aber auch immer mit dem Gewicht 1,0 als Baseline zu den vom Nutzer angegebenen Zielen hinzugefügt, sofern es nicht bereits vorhanden ist.
MIN_DISTANCE „MIN“-Zielvorhaben. Minimieren Sie die insgesamt zurückgelegte Strecke.
MIN_WORKING_TIME Minimieren Sie die gesamte Arbeitszeit, summiert über alle Fahrzeuge.
MIN_TRAVEL_TIME Wie oben, aber nur mit Fokus auf die Reisezeit.
MIN_NUM_VEHICLES Minimieren Sie die Anzahl der verwendeten Fahrzeuge.

DurationDistanceMatrix

Gibt eine Matrix mit Dauer und Entfernung von den Startorten der Besuche und Fahrzeuge zu den Endorten der Besuche und Fahrzeuge an.

JSON-Darstellung
{
  "rows": [
    {
      object (Row)
    }
  ],
  "vehicleStartTag": string
}
Felder
rows[]

object (Row)

Gibt die Zeilen der Matrix für Dauer und Entfernung an. Es muss so viele Elemente wie ShipmentModel.duration_distance_matrix_src_tags haben.

vehicleStartTag

string

Tag, das definiert, für welche Fahrzeuge diese Dauer- und Distanzmatrix gilt. Wenn das Feld leer ist, gilt die Matrix für alle Fahrzeuge. In diesem Fall kann es nur eine Matrix geben.

Jeder Fahrzeugstart muss genau einer Matrix entsprechen. Das bedeutet, dass genau eines der startTags-Felder mit dem vehicleStartTag einer Matrix übereinstimmen muss (und nur mit dem vehicleStartTag dieser Matrix).

Alle Matrizen müssen einen anderen vehicleStartTag haben.

Zeile

Gibt eine Zeile der Matrix für Dauer und Entfernung an.

JSON-Darstellung
{
  "durations": [
    string
  ],
  "meters": [
    number
  ]
}
Felder
durations[]

string (Duration format)

Dauerwerte für eine bestimmte Zeile. Es muss so viele Elemente wie ShipmentModel.duration_distance_matrix_dst_tags haben.

Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit "s". Beispiel: "3.5s".

meters[]

number

Entfernungswerte für eine bestimmte Zeile. Wenn sich im Modell keine Kosten oder Einschränkungen auf Entfernungen beziehen, kann dieses Feld leer gelassen werden. Andernfalls muss es so viele Elemente wie durations enthalten.

TransitionAttributes

Gibt Attribute von Übergängen zwischen zwei aufeinanderfolgenden Besuchen auf einer Route an. Für denselben Übergang können mehrere TransitionAttributes gelten. In diesem Fall werden alle zusätzlichen Kosten addiert und die strengste Einschränkung oder das strengste Limit wird angewendet (gemäß der natürlichen UND-Semantik).

JSON-Darstellung
{
  "srcTag": string,
  "excludedSrcTag": string,
  "dstTag": string,
  "excludedDstTag": string,
  "cost": number,
  "costPerKilometer": number,
  "distanceLimit": {
    object (DistanceLimit)
  },
  "delay": string
}
Felder
srcTag

string

Tags, die die Menge der (src->dst)-Übergänge definieren, auf die sich diese Attribute beziehen.

Ein Quellbesuch oder Fahrzeugstart stimmt überein, wenn sein VisitRequest.tags oder Vehicle.start_tags entweder srcTag enthält oder excludedSrcTag nicht enthält (je nachdem, welches dieser beiden Felder nicht leer ist).

excludedSrcTag

string

srcTag ansehen. Genau eines von srcTag und excludedSrcTag darf nicht leer sein.

dstTag

string

Ein Zielbesuch oder Fahrzeugende stimmt überein, wenn VisitRequest.tags oder Vehicle.end_tags entweder dstTag enthält oder excludedDstTag nicht enthält (je nachdem, welches dieser beiden Felder nicht leer ist).

excludedDstTag

string

dstTag ansehen. Genau eines von dstTag und excludedDstTag darf nicht leer sein.

cost

number

Gibt die Kosten für die Durchführung dieses Übergangs an. Diese Einheit ist dieselbe wie bei allen anderen Kosten im Modell und darf nicht negativ sein. Sie wird zusätzlich zu allen anderen bestehenden Kosten berechnet.

costPerKilometer

number

Gibt die Kosten pro Kilometer an, die für die während dieser Übergangsphase zurückgelegte Strecke berechnet werden. Sie wird zu allen Vehicle.cost_per_kilometer addiert, die für Fahrzeuge angegeben sind.

distanceLimit

object (DistanceLimit)

Gibt ein Limit für die zurückgelegte Strecke während dieses Übergangs an.

Seit Juni 2021 werden nur noch weiche Limits unterstützt.

delay

string (Duration format)

Gibt eine Verzögerung an, die bei der Ausführung dieses Übergangs auftritt.

Diese Verzögerung tritt immer nach dem Beenden des Quellbesuchs und vor dem Start des Zielbesuchs auf.

Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit "s". Beispiel: "3.5s".

ShipmentTypeIncompatibility

Gibt Inkompatibilitäten zwischen Sendungen in Abhängigkeit von ihrem „shipmentType“ an. Das Erscheinen inkompatibler Sendungen auf derselben Route ist je nach Inkompatibilitätsmodus eingeschränkt.

JSON-Darstellung
{
  "types": [
    string
  ],
  "incompatibilityMode": enum (IncompatibilityMode)
}
Felder
types[]

string

Liste der inkompatiblen Typen. Zwei Sendungen mit unterschiedlichen shipment_types unter den aufgeführten sind „inkompatibel“.

incompatibilityMode

enum (IncompatibilityMode)

Auf die Inkompatibilität angewendeter Modus.

IncompatibilityMode

Modi, die definieren, wie das Erscheinen inkompatibler Sendungen auf derselben Route eingeschränkt wird.

Enums
INCOMPATIBILITY_MODE_UNSPECIFIED Nicht angegebener Inkompatibilitätsmodus. Dieser Wert sollte niemals verwendet werden.
NOT_PERFORMED_BY_SAME_VEHICLE In diesem Modus können zwei Sendungen mit inkompatiblen Typen niemals dasselbe Fahrzeug nutzen.
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

In diesem Modus können zwei Sendungen mit inkompatiblen Typen niemals gleichzeitig auf demselben Fahrzeug transportiert werden:

  • Sie können dasselbe Fahrzeug nur dann nutzen, wenn das erste geliefert wurde, bevor das zweite abgeholt wird.
  • Wenn beide Sendungen nur abgeholt oder nur geliefert werden sollen, können sie nicht im selben Fahrzeug transportiert werden.

ShipmentTypeRequirement

Gibt Anforderungen zwischen Sendungen basierend auf ihrem „shipmentType“ an. Die Details der Anforderung werden durch den Anforderungsmodus definiert.

JSON-Darstellung
{
  "requiredShipmentTypeAlternatives": [
    string
  ],
  "dependentShipmentTypes": [
    string
  ],
  "requirementMode": enum (RequirementMode)
}
Felder
requiredShipmentTypeAlternatives[]

string

Liste der alternativen Versandarten, die von dependentShipmentTypes benötigt werden.

dependentShipmentTypes[]

string

Für alle Sendungen mit einem Typ im Feld dependentShipmentTypes muss auf derselben Route mindestens eine Sendung vom Typ requiredShipmentTypeAlternatives besucht werden.

HINWEIS: Ketten von Anforderungen, bei denen eine shipmentType von sich selbst abhängt, sind nicht zulässig.

requirementMode

enum (RequirementMode)

Auf die Anforderung angewendeter Modus.

RequirementMode

Modi, die das Erscheinungsbild von abhängigen Sendungen auf einer Route definieren.

Enums
REQUIREMENT_MODE_UNSPECIFIED Nicht angegebener Anforderungsmodus. Dieser Wert sollte niemals verwendet werden.
PERFORMED_BY_SAME_VEHICLE In diesem Modus müssen alle „abhängigen“ Sendungen dasselbe Fahrzeug wie mindestens eine ihrer „erforderlichen“ Sendungen nutzen.
IN_SAME_VEHICLE_AT_PICKUP_TIME

Im IN_SAME_VEHICLE_AT_PICKUP_TIME-Modus muss für alle „abhängigen“ Sendungen zum Zeitpunkt der Abholung mindestens eine „erforderliche“ Sendung im Fahrzeug vorhanden sein.

Für die Abholung einer „abhängigen“ Sendung muss daher Folgendes gelten:

  • Eine „erforderliche“ Sendung, die nur geliefert werden muss, wird nach der Route geliefert oder
  • Eine „erforderliche“ Sendung wird auf der Route vor der „abhängigen“ Sendung abgeholt. Wenn die „erforderliche“ Sendung eine Lieferung enthält, muss diese nach der Abholung der „abhängigen“ Sendung erfolgen.
IN_SAME_VEHICLE_AT_DELIVERY_TIME Wie zuvor, nur dass für die „abhängigen“ Sendungen zum Zeitpunkt der Lieferung eine „erforderliche“ Sendung auf dem Fahrzeug vorhanden sein muss.

PrecedenceRule

Eine Vorrangregel zwischen zwei Ereignissen (jedes Ereignis ist die Abholung oder die Zustellung einer Sendung): Das „zweite“ Ereignis muss mindestens offsetDuration nach dem Start des „ersten“ Ereignisses beginnen.

Mehrere Präzedenzen können sich auf dieselben (oder ähnliche) Ereignisse beziehen, z.B.: „Abholung von B erfolgt nach Lieferung von A“ und „Abholung von C erfolgt nach Abholung von B“.

Außerdem gelten Vorrangregeln nur, wenn beide Sendungen ausgeführt werden. Andernfalls werden sie ignoriert.

JSON-Darstellung
{
  "firstIsDelivery": boolean,
  "secondIsDelivery": boolean,
  "offsetDuration": string,
  "firstIndex": integer,
  "secondIndex": integer
}
Felder
firstIsDelivery

boolean

Gibt an, ob das „first“-Ereignis eine Zustellung ist.

secondIsDelivery

boolean

Gibt an, ob es sich beim „second“-Ereignis um eine Zustellung handelt.

offsetDuration

string (Duration format)

Die Zeitverschiebung zwischen dem ersten und dem zweiten Ereignis. Sie kann negativ sein.

Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit "s". Beispiel: "3.5s".

firstIndex

integer

Versandindex des „ersten“ Ereignisses. Dieses Feld muss angegeben werden.

secondIndex

integer

Versandindex des „zweiten“ Ereignisses. Dieses Feld muss angegeben werden.