ShipmentModel

Ein Versandmodell besteht aus einer Reihe von Sendungen, die von einer Gruppe von Fahrzeugen ausgeführt werden müssen, wobei die Gesamtkosten minimiert werden, die sich aus der Summe aus folgenden Komponenten ergeben:

  • die Kosten für die Routenplanung der Fahrzeuge (Summe der Kosten pro Gesamtzeit, Kosten pro Fahrtzeit und Fixkosten für alle Fahrzeuge).
  • nicht ausgeführte Versandstrafen.
  • die Kosten der globalen Dauer der Lieferungen
JSON-Darstellung
{
  "shipments": [
    {
      object (Shipment)
    }
  ],
  "vehicles": [
    {
      object (Vehicle)
    }
  ],
  "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)

Satz von Lieferungen, die im Modell ausgeführt werden müssen.

vehicles[]

object (Vehicle)

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

globalStartTime

string (Timestamp format)

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

Die Zeitspanne des Modells muss kürzer als ein Jahr sein, d. h., globalEndTime und globalStartTime müssen nicht mehr als 3.153.6000 Sekunden voneinander abweichen.

Wenn Sie cost_per_*hour-Felder verwenden, können Sie dieses Zeitfenster auf ein kleineres Intervall einstellen, um die Leistung zu steigern. Wenn Sie beispielsweise einen einzelnen Tag modellieren, sollten Sie die globalen Zeitlimits auf diesen Tag festlegen. Wenn kein Wert festgelegt ist, wird standardmäßig 00:00:00 UTC, 1. Januar 1970 (Sekunden: 0, Nanos: 0) verwendet.

Ein Zeitstempel im Format RFC3339 UTC „Zulu“ mit Nanosekundenauflösung und bis zu neun Nachkommastellen. Beispiele: "2014-10-02T15:01:23Z" und "2014-10-02T15:01:23.045123456Z".

globalEndTime

string (Timestamp format)

Wenn kein Wert festgelegt ist, wird standardmäßig 00:00:00 UTC, 1. Januar 1971 (Sekunden: 31536000, Nanos: 0) verwendet.

Ein Zeitstempel im Format RFC3339 UTC „Zulu“ mit Nanosekundenauflösung und bis zu neun Nachkommastellen. Beispiele: "2014-10-02T15:01:23Z" und "2014-10-02T15:01:23.045123456Z".

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 sie beispielsweise im Hinblick auf den frühesten Abschluss eines 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 Entfernungen verwendet, abhängig vom Wert des Felds useGeodesicDistances. Wenn es nicht leer ist, kann useGeodesicDistances nicht wahr sein und weder durationDistanceMatrixSrcTags noch durationDistanceMatrixDstTags dürfen leer sein.

Typische Syntax:

  • Es gibt zwei Standorte: locA und locB.
  • 1 Fahrzeug, das seine Route an locationA beginnt und an locA endet.
  • 1 Anfrage für einen Abholtermin am Standort „Standort“.
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 Standort A startet und an Ort B endet, wobei die Matrix „schnell“ verwendet wird.
  • 1 Fahrzeug, das seine Route an Standort B beginnt und an Standort B endet, wobei die Matrix „langsam“ verwendet wird.
  • 1 Fahrzeug, das seine Route an Standort B beginnt und an Standort B endet, wobei die Matrix „schnell“ verwendet wird.
  • 1 Anfrage zur Abholung bei locC.
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, mit denen die Quellen der Dauer- und Entfernungsmatrizen definiert werden; durationDistanceMatrices(i).rows(j) definiert die Dauer und Entfernung von Besuchen mit dem Tag durationDistanceMatrixSrcTags(j) zu anderen Besuchen in der Matrix i.

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

durationDistanceMatrixDstTags[]

string

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

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

transitionAttributes[]

object (TransitionAttributes)

Übergangsattribute wurden dem Modell hinzugefügt.

shipmentTypeIncompatibilities[]

object (ShipmentTypeIncompatibility)

Gruppen mit inkompatiblen „shipment_types“-Elementen (siehe ShipmentTypeIncompatibility).

shipmentTypeRequirements[]

object (ShipmentTypeRequirement)

Gruppen mit shipmentType-Anforderungen (siehe ShipmentTypeRequirement).

precedenceRules[]

object (PrecedenceRule)

Satz von Prioritätsregeln, die im Modell erzwungen werden müssen.

maxActiveVehicles

integer

Beschränkt die maximale Anzahl aktiver Fahrzeuge. Ein Fahrzeug ist aktiv, wenn auf seiner Route mindestens ein Versand durchgeführt wird. Diese Option kann verwendet werden, um die Anzahl der Routen zu begrenzen, falls es weniger Fahrer als Fahrzeuge gibt und der Fahrzeugflotte heterogen ist. Im Rahmen der Optimierung wird dann die beste Teilmenge von Fahrzeugen ausgewählt. Muss ausschließlich positiv sein.

Versand

Die Lieferung eines einzelnen Artikels von einer Abholung bis zu einer Lieferung. Damit eine Sendung als durchgeführt gilt, muss ein bestimmtes Fahrzeug einen seiner Abholorte aufsuchen (und seine Kapazitäten entsprechend verringern) und dann später einen seiner Lieferorte aufsuchen (und dann entsprechend sein freies Fassungsvermögen wieder aufstocken).

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)

Satz von Alternativen zur Abholung, die der Sendung zugeordnet sind. Wenn nicht angegeben, muss das Fahrzeug nur einen Ort aufsuchen, der den Lieferungen entspricht.

deliveries[]

object (VisitRequest)

Die mit der Sendung verbundenen Lieferalternativen. Wenn nicht angegeben, muss das Fahrzeug nur zu einem Standort fahren, der den Abholungen entspricht.

loadDemands

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

Belastbarkeit der Sendung (z. B. Gewicht, Volumen, Anzahl der Paletten usw.) Die Schlüssel in der Karte sollten Kennungen sein, die den Typ des entsprechenden Ladevorgangs beschreiben, idealerweise auch die Einheiten. Beispiel: "weight_kg", "volume_gallons", "pallet_count" usw. Wenn ein bestimmter Schlüssel nicht auf der Karte erscheint, wird die entsprechende Ladung als null betrachtet.

Ein Objekt, das eine Liste von "key": value-Paaren enthält. Beispiel: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

allowedVehicleIndices[]

integer

Die Fahrzeuge, die diesen Versand durchführen können. Ist das Feld leer, kann die Funktion von allen Fahrzeugen ausgeführt werden. Fahrzeuge sind über ihren Index in der vehicles-Liste der ShipmentModel angegeben.

costsPerVehicle[]

number

Gibt die Kosten an, die anfallen, wenn diese Sendung von dem jeweiligen Fahrzeug geliefert wird. Wenn angegeben, muss ENTWEDER:

  • hat die gleiche Anzahl von Elementen wie costsPerVehicleIndices. costsPerVehicle[i] entspricht dem Fahrzeug costsPerVehicleIndices[i] des Modells.
  • wie viele Elemente es im Modell gibt. Das i-te Element entspricht Fahrzeug Nr. 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 vorliegen.

costsPerVehicleIndices[]

integer

Indexe der Fahrzeuge, für die costsPerVehicle gilt. Wenn es nicht leer ist, muss es dieselbe Anzahl von Elementen haben wie costsPerVehicle. Ein Fahrzeugindex darf nur einmal angegeben werden. Wenn ein Fahrzeug aus „costsPerVehicleIndices“ ausgeschlossen ist, fallen keine Kosten an.

pickupToDeliveryAbsoluteDetourLimit

string (Duration format)

Gibt die maximale absolute Umleitungszeit im Vergleich zum kürzesten Weg von der Abholung zur Lieferung an. Falls angegeben, darf sie nicht negativ sein und die Sendung muss mindestens eine Abholung und eine Lieferung enthalten.

Geben Sie beispielsweise die kürzeste Zeit an, die nötig ist, um von der ausgewählten Abholoption direkt zur ausgewählten Lieferoption zu wechseln. Wenn Sie dann pickupToDeliveryAbsoluteDetourLimit festlegen, wird Folgendes erzwungen:

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

Wenn für dieselbe Sendung sowohl relative als auch absolute Grenzwerte angegeben sind, wird für jedes mögliche Paar aus Abholung und Lieferung die stärker einschränkende Begrenzung verwendet. Seit 2017/10 werden Umleitungen nur noch unterstützt, wenn die Reisedauer nicht von Fahrzeugen abhängt.

Eine Dauer in Sekunden mit bis zu neun Nachkommastellen, die auf „s“ endet. Beispiel: "3.5s".

pickupToDeliveryTimeLimit

string (Duration format)

Gibt die maximale Dauer vom Beginn der Abholung bis zum Beginn der Lieferung einer Sendung an. Falls angegeben, darf sie nicht negativ sein und die Sendung muss mindestens eine Abholung und eine Lieferung enthalten. Dies hängt weder von den Alternativen für Abhol- und Lieferoptionen noch von der Fahrzeuggeschwindigkeit ab. Dies kann zusammen mit den maximalen Umleitungsbeschränkungen angegeben werden: Die Lösung berücksichtigt beide Spezifikationen.

Eine Dauer in Sekunden mit bis zu neun Nachkommastellen, die auf „s“ endet. Beispiel: "3.5s".

shipmentType

string

Ein 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).

Abweichend von visitTypes, das für einen einzelnen Besuch angegeben wird: Für alle Abhol-/Lieferungen, die zur selben Sendung gehören, wird dieselbe shipmentType verwendet.

label

string

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

ignore

boolean

Wenn „true“ festgelegt ist, kannst du diese Lieferung überspringen, aber kein penaltyCost anwenden.

Wenn eine Sendung ignoriert wird, tritt ein Validierungsfehler auf, wenn shipmentTypeRequirements im Modell vorhanden ist.

Das Ignorieren einer Sendung, die in injectedFirstSolutionRoutes oder injectedSolutionConstraint ausgeführt wird, ist zulässig. Der Solver entfernt die entsprechenden Besuche für Abholung/Lieferung aus der Route, die die jeweilige Bestellung ausführt. precedenceRules, die auf ignorierte Sendungen verweisen, werden ebenfalls ignoriert.

penaltyCost

number

Wenn der Versand nicht abgeschlossen wird, wird die Strafgebühr zu den Gesamtkosten der Routen hinzugefügt. Eine Sendung gilt als abgeschlossen, wenn eine der Optionen für Abholung und Lieferung genutzt wird. Die Kosten können in derselben Einheit ausgedrückt werden, die für alle anderen kostenbezogenen Felder im Modell verwendet wird, und müssen positiv sein.

WICHTIG: Wenn Sie keine Angabe machen, gilt der Abzug als unendlich, d.h., der Versand muss abgeschlossen sein.

pickupToDeliveryRelativeDetourLimit

number

Gibt die maximale relative Umleitungszeit im Vergleich zum kürzesten Weg von der Abholung zur Lieferung an. Falls angegeben, darf sie nicht negativ sein und die Sendung muss mindestens eine Abholung und eine Lieferung enthalten.

Geben Sie beispielsweise die kürzeste Zeit an, die nötig ist, um von der ausgewählten Abholoption direkt zur ausgewählten Lieferoption zu wechseln. Wenn Sie dann pickupToDeliveryRelativeDetourLimit festlegen, wird Folgendes erzwungen:

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

Wenn für dieselbe Sendung sowohl relative als auch absolute Grenzwerte angegeben sind, wird für jedes mögliche Paar aus Abholung und Lieferung die stärker einschränkende Begrenzung verwendet. Seit 2017/10 werden Umleitungen nur noch unterstützt, wenn die Reisedauer nicht von Fahrzeugen abhängt.

VisitRequest

Anfrage für einen Besuch, der von einem Fahrzeug durchgeführt werden kann: Er hat einen geografischen Standort (oder zwei, siehe unten), die Öffnungs- und Schließzeiten, die durch Zeitfenster dargestellt werden, sowie eine Servicedauer, d. h. die Zeit, die das Fahrzeug bei der Abholung oder Abgabe der Ware verbracht hat.

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
}
Felder
arrivalLocation

object (LatLng)

Der Standort, an dem das Fahrzeug bei der Durchführung dieses VisitRequest-Vorgangs ankommt. Wenn das Versandmodell über Entfernungsmatrizen für die Dauer verfügt, darf arrivalLocation nicht angegeben werden.

arrivalWaypoint

object (Waypoint)

Der Wegpunkt, an dem das Fahrzeug bei der Durchführung dieses VisitRequest-Vorgangs ankommt. Wenn das Versandmodell über Entfernungsmatrizen für die Dauer verfügt, darf arrivalWaypoint nicht angegeben werden.

departureLocation

object (LatLng)

Der Standort, an dem das Fahrzeug nach Abschluss dieses VisitRequest-Vorgangs abfährt. Kann weggelassen werden, wenn er mit arrivalLocation identisch ist. Wenn das Versandmodell über Entfernungsmatrizen für die Dauer verfügt, darf departureLocation nicht angegeben werden.

departureWaypoint

object (Waypoint)

Der Wegpunkt, an dem das Fahrzeug nach Abschluss dieses VisitRequest-Vorgangs abfährt. Kann weggelassen werden, wenn er mit arrivalWaypoint identisch ist. Wenn das Versandmodell über Entfernungsmatrizen für die Dauer verfügt, darf departureWaypoint nicht angegeben werden.

tags[]

string

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

timeWindows[]

object (TimeWindow)

Zeitfenster, die die Ankunftszeit bei einem Besuch einschränken Beachten Sie, dass ein Fahrzeug möglicherweise außerhalb des Ankunftszeitfensters abfährt, d.h., Ankunftszeit und Dauer müssen nicht innerhalb eines Zeitfensters liegen. Sollte das Fahrzeug vor dem TimeWindow.start_time ankommen, kann es zu Wartezeiten kommen.

Wenn TimeWindow fehlt, kann das Fahrzeug diesen Besuch jederzeit durchführen.

Zeitfenster müssen disjunkt sein, d. h., sie müssen nicht mit einem anderen Zeitfenster überlappen oder aneinander angrenzen. Außerdem müssen sie in aufsteigender Reihenfolge sein.

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

duration

string (Duration format)

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

Eine Dauer in Sekunden mit bis zu neun Nachkommastellen, die auf „s“ endet. Beispiel: "3.5s".

cost

number

Kosten für die Bereitstellung dieser Besuchsanfrage auf einer Fahrzeugroute. So können Sie für jede alternative Abholung oder Lieferung einer Sendung unterschiedliche Kosten bezahlen. Diese 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))

Anforderungen dieser Besuchsanfrage laden. Er entspricht dem Feld „Shipment.load_demands“, mit dem Unterschied, dass es nur für dieses Feld (VisitRequest) und nicht für das gesamte Feld „Shipment“ gilt. Die hier aufgeführten Anforderungen werden zu den in Shipment.load_demands aufgeführten Anforderungen hinzugefügt.

Ein Objekt, das eine Liste von "key": value-Paaren enthält. Beispiel: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

visitTypes[]

string

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

Ein Typ kann nur einmal angezeigt werden.

label

string

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

LatLng

Ein Objekt, das ein Paar aus Breiten- und Längengrad darstellt. Dies wird als Paar von Double-Werten (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

Verkapselt einen Wegpunkt. Mit Wegpunkten werden der Ankunfts- und Abfahrtsort von VisitRequests sowie der Start- und Endpunkt von Fahrzeugen markiert.

JSON-Darstellung
{
  "sideOfRoad": 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 der Position dieses Wegpunkts bevorzugt an einer bestimmten Straßenseite halten soll. Wenn Sie diesen Wert festlegen, verläuft die Route so durch den Ort, dass das Fahrzeug an der Straßenseite anhalten kann, die zur Mitte der Straße hin geneigt ist. Diese Option funktioniert nicht bei der Mobilitätsform "Fußweg".

Union-Feld location_type. Verschiedene Möglichkeiten zur Darstellung eines Standorts. Für location_type ist nur einer der folgenden Werte zulässig:
location

object (Location)

Ein Punkt, der mithilfe geografischer Koordinaten angegeben wird, einschließlich einer optionalen Ausrichtung.

placeId

string

Die mit dem Wegpunkt verknüpfte Orts-ID des POI.

Standort

Zusammenfassung eines Standorts (ein geografischer Punkt und eine optionale Ausrichtung)

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

object (LatLng)

Die geografischen Koordinaten des Wegpunkts

heading

integer

Die Kompassrichtung, die der Verkehrsrichtung zugeordnet ist. Mit diesem Wert wird die Seite der Straße angegeben, die als Start- und Zielseite verwendet werden soll. Die Richtungswerte können zwischen 0 und 360 liegen, wobei 0 eine Richtung nach Norden, 90 eine Richtung nach Osten usw. angibt.

TimeWindow

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

Feste Zeitfenstergrenzen, startTime und endTime, erzwingen die früheste und späteste Zeit des Ereignisses, z. B. startTime <= event_time <= endTime. Die Untergrenze des weichen Zeitfensters (softStartTime) drückt aus, dass das Ereignis am oder nach dem softStartTime eintritt, wobei Kosten proportional dazu anfallen, wie lange vor softStartTime das Ereignis eintritt. Die Obergrenze für das weiche Zeitfenster (softEndTime) drückt aus, dass das Ereignis am oder vor softEndTime eintritt. Dabei fallen Kosten proportional zur Dauer nach softEndTime nach dem Eintreten des Ereignisses an. startTime, endTime, softStartTime und softEndTime müssen innerhalb der globalen Zeitlimits (siehe ShipmentModel.global_start_time und ShipmentModel.global_end_time) liegen und Folgendes berücksichtigen:

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

string (Timestamp format)

Der Beginn des harten Zeitfensters. Wenn keine Vorgabe erfolgt, wird er auf ShipmentModel.global_start_time gesetzt.

Ein Zeitstempel im Format RFC3339 UTC „Zulu“ mit Nanosekundenauflösung und bis zu neun Nachkommastellen. Beispiele: "2014-10-02T15:01:23Z" und "2014-10-02T15:01:23.045123456Z".

endTime

string (Timestamp format)

Das Ende des festen Zeitfensters. Wenn keine Vorgabe erfolgt, wird er auf ShipmentModel.global_end_time gesetzt.

Ein Zeitstempel im Format RFC3339 UTC „Zulu“ mit Nanosekundenauflösung und bis zu neun Nachkommastellen. Beispiele: "2014-10-02T15:01:23Z" und "2014-10-02T15:01:23.045123456Z".

softStartTime

string (Timestamp format)

Die Softstartzeit des Zeitfensters.

Ein Zeitstempel im Format RFC3339 UTC „Zulu“ mit Nanosekundenauflösung und bis zu neun Nachkommastellen. Beispiele: "2014-10-02T15:01:23Z" und "2014-10-02T15:01:23.045123456Z".

softEndTime

string (Timestamp format)

Das weiche Ende des Zeitfensters.

Ein Zeitstempel im Format RFC3339 UTC „Zulu“ mit Nanosekundenauflösung und bis zu neun Nachkommastellen. Beispiele: "2014-10-02T15:01:23Z" und "2014-10-02T15:01:23.045123456Z".

costPerHourBeforeSoftStartTime

number

Kosten pro Stunde, die zu den anderen Kosten im Modell addiert werden, wenn das Ereignis vor softStartTime eintritt. Sie werden wie folgt berechnet:

   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 zu den anderen Kosten im Modell hinzugefügt werden, wenn das Ereignis nach dem softEndTime eintritt. Sie werden so berechnet:

   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 in einem Versandproblem. Zur Lösung eines Versandproblems wird eine Route für dieses Fahrzeug erstellt, die zwischen startLocation beginnt und um endLocation endet. Eine Route ist eine Folge von Durchfahrten (siehe ShipmentRoute).

JSON-Darstellung
{
  "displayName": string,
  "travelMode": enum (TravelMode),
  "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)

Die Mobilitätsform, die sich auf die vom Fahrzeug genutzten Straßen und die Geschwindigkeit auswirkt. Siehe auch travelDurationMultiple.

startLocation

object (LatLng)

Geografischer Standort, an dem das Fahrzeug startet, bevor Sendungen abgeholt werden. Wenn nicht angegeben, startet das Fahrzeug bei der ersten Abholung. Wenn das Versandmodell Matrizen für Dauer und Entfernung hat, darf startLocation nicht angegeben werden.

startWaypoint

object (Waypoint)

Wegpunkt, der einen geografischen Standort darstellt, an dem das Fahrzeug startet, bevor Sendungen abgeholt werden. Wenn weder startWaypoint noch startLocation angegeben ist, startet das Fahrzeug bei der ersten Abholung. Wenn das Versandmodell Matrizen für Dauer und Entfernung hat, darf startWaypoint nicht angegeben werden.

endLocation

object (LatLng)

Geografischer Standort, an dem das Fahrzeug endet, nachdem die letzten VisitRequest abgeschlossen wurden. Wenn nicht angegeben, endet die ShipmentRoute des Fahrzeugs sofort, wenn die letzten VisitRequest abgeschlossen sind. Wenn das Versandmodell Matrizen für Dauer und Entfernung hat, darf endLocation nicht angegeben werden.

endWaypoint

object (Waypoint)

Wegpunkt, der einen geografischen Standort darstellt, an dem das Fahrzeug endet, nachdem die letzte VisitRequest abgeschlossen ist. Wenn weder endWaypoint noch endLocation angegeben ist, endet die ShipmentRoute des Fahrzeugs sofort, wenn die letzte VisitRequest abgeschlossen ist. Wenn das Versandmodell Matrizen für Dauer und Entfernung hat, darf endWaypoint nicht angegeben werden.

startTags[]

string

Gibt Tags an, die am Start der Route des Fahrzeugs angehängt sind.

Leere oder doppelte Strings sind nicht zulässig.

endTags[]

string

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

Leere oder doppelte Strings sind nicht zulässig.

startTimeWindows[]

object (TimeWindow)

Zeitfenster, in denen das Fahrzeug von seinem Startort abfährt. Sie müssen innerhalb der globalen Zeitlimits liegen (siehe ShipmentModel.global_*-Felder). Wenn keine Vorgabe erfolgt, gelten außer den globalen Zeitlimits keine weiteren Einschränkungen.

Zeitfenster, die zu demselben wiederkehrenden Feld gehören, müssen getrennt sein, d. h. es darf sich kein Zeitfenster mit einem anderen überschneiden oder aneinandergrenzen. Sie müssen in chronologischer Reihenfolge angegeben werden.

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

endTimeWindows[]

object (TimeWindow)

Zeitfenster, in denen das Fahrzeug seinen Zielort erreichen kann. Sie müssen innerhalb der globalen Zeitlimits liegen (siehe ShipmentModel.global_*-Felder). Wenn keine Vorgabe erfolgt, gelten außer den globalen Zeitlimits keine weiteren Einschränkungen.

Zeitfenster, die zu demselben wiederkehrenden Feld gehören, müssen getrennt sein, d. h. es darf sich kein Zeitfenster mit einem anderen überschneiden oder aneinandergrenzen. Sie müssen in chronologischer Reihenfolge angegeben werden.

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

unloadingPolicy

enum (UnloadingPolicy)

Ausstiegsrichtlinie für das Fahrzeug erzwungen.

loadLimits

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

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

Ein Objekt, das eine Liste von "key": value-Paaren enthält. Beispiel: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

costPerHour

number

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

Kosten pro Stunde der Route des Fahrzeugs. Diese Kosten werden auf die Gesamtzeit der Route angerechnet und umfassen Fahrt-, Wartezeit und Besuchszeit. Die Verwendung von costPerHour statt nur costPerTraveledHour kann zu einer zusätzlichen Latenz führen.

costPerTraveledHour

number

Kosten pro Fahrtstunde auf der Route des Fahrzeugs. Diese Kosten werden nur auf die Fahrtzeit auf der Route (d. h. die in ShipmentRoute.transitions angegebene) berechnet. Wartezeiten und Besuchszeit werden nicht berücksichtigt.

costPerKilometer

number

Kosten pro Kilometer der Fahrzeugroute. Diese Kosten werden auf die im ShipmentRoute.transitions gemeldete Entfernung angewendet und gelten nicht für Entfernungen, die implizit von der arrivalLocation zur departureLocation einer einzelnen VisitRequest zurückgelegt wurden.

fixedCost

number

Wenn dieses Fahrzeug zur Abwicklung einer Sendung verwendet wird, fallen Festpreise an.

usedIfRouteIsEmpty

boolean

Dieses Feld gilt nur für Fahrzeuge, auf deren Route keine Sendungen möglich sind. Sie gibt an, ob das Fahrzeug in diesem Fall als gebraucht gelten soll.

Wenn der Wert „true“ ist, fährt das Fahrzeug vom Start- zum Zielort, auch wenn keine Lieferungen anstehen. Außerdem werden die Zeit- und Entfernungskosten berücksichtigt, die sich aus der Start- -> Endfahrt ergeben.

Andernfalls fährt er nicht von seinem Start- zum Zielort und es sind keine breakRule und keine Verspätung (ab TransitionAttributes) für dieses Fahrzeug geplant. In diesem Fall enthält die ShipmentRoute des Fahrzeugs mit Ausnahme des Fahrzeugindex und des Fahrzeugs keine Informationen.

routeDurationLimit

object (DurationLimit)

Der Grenzwert wird auf die Gesamtdauer der Route des Fahrzeugs angewendet. In einer bestimmten OptimizeToursResponse ist die Routendauer eines Fahrzeugs die Differenz zwischen seinen vehicleEndTime und vehicleStartTime.

travelDurationLimit

object (DurationLimit)

Der Grenzwert wird auf die Reisedauer auf der Route des Fahrzeugs angewendet. In einer gegebenen OptimizeToursResponse ist die Reisedauer der Route die Summe aller ihrer transitions.travel_duration.

routeDistanceLimit

object (DistanceLimit)

Der Grenzwert wird auf die Gesamtstrecke auf der Route des Fahrzeugs angewendet. In einer gegebenen OptimizeToursResponse ist die Routenentfernung die Summe aller ihrer transitions.travel_distance_meters.

extraVisitDurationForVisitType

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

Gibt eine Zuordnung von "visitTypes"-Strings zu "duration"-Werten an. Die Dauer ist die Zeit, die zusätzlich zu VisitRequest.duration bei Besuchen mit dem angegebenen visitTypes erfasst werden soll. Durch diese zusätzliche Besuchsdauer fallen Kosten an, wenn costPerHour angegeben ist. Schlüssel (z.B. visitTypes) dürfen keine leeren Strings sein.

Wenn eine Besuchsanfrage mehrere Typen umfasst, wird für jeden Typ in der Karte eine Dauer hinzugefügt.

Ein Objekt, das eine Liste von "key": value-Paaren enthält. Beispiel: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

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 geplant.

label

string

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

ignore

boolean

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

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

Wenn eine Sendung von einem ignorierten Fahrzeug in injectedSolutionConstraint ausgeführt wird und damit verbundene Abhol-/Liefervorgänge im Fahrzeug verbleiben (d.h. nicht auf Stufe RELAX_ALL_AFTER_THRESHOLD gelockert wird), wird sie in der Antwort übersprungen. Wenn das Feld „allowedVehicleIndices“ einer Sendung nicht leer ist und alle zulässigen Fahrzeuge ignoriert werden, wird sie in der Antwort übersprungen.

travelDurationMultiple

number

Gibt einen multiplikativen Faktor an, mit dem die Fahrtzeiten dieses Fahrzeugs verlängert oder verkürzt werden können. Wenn Sie diesen Wert beispielsweise auf 2,0 setzen, ist dieses Fahrzeug langsamer und hat doppelt so lange Fahrtzeiten wie für Standardfahrzeuge. Dieser Faktor wirkt sich nicht auf die Besuchsdauer aus. Wenn costPerHour oder costPerTraveledHour angegeben ist, wirkt sich dies auf die Kosten aus. Dieser muss im Bereich [0,001; 1000,0] liegen. Wenn nichts festgelegt ist, entspricht das Fahrzeug dem Standard.Dieser Vielfachewert wird als 1, 0 betrachtet.

WARNUNG: Fahrtzeiten werden auf die nächste Sekunde gerundet, nachdem dieses Vielfache angewendet wurde, aber bevor numerische Operationen ausgeführt werden. Daher kann ein kleiner Vielfaches zu einem Genauigkeitsverlust führen.

Siehe auch extraVisitDurationForVisitType unten.

TravelMode

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

Dabei sollte es sich um eine Teilmenge der „Routes Preferred API“-Mobilitätsformen der Google Maps Platform handeln. Weitere Informationen finden Sie unter https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.

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

UnloadingPolicy

Richtlinie zum Entladen eines Fahrzeugs. Gilt nur für Sendungen mit Abhol- und Lieferservice.

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

Enums
UNLOADING_POLICY_UNSPECIFIED Nicht angegebene Entladerichtlinien. Lieferungen müssen erst nach der entsprechenden Abholung erfolgen.
LAST_IN_FIRST_OUT Lieferungen müssen in umgekehrter Reihenfolge der Abholung erfolgen
FIRST_IN_FIRST_OUT Lieferungen müssen in der gleichen Bestellung erfolgen wie Abholungen

LoadLimit

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

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

string (int64 format)

Ein weiches Limit der Last. costPerUnitAboveSoftMax ansehen.

costPerUnitAboveSoftMax

number

Wenn die Ladung auf der Route dieses Fahrzeugs softMaxLoad überschreitet, gilt die folgende Kostenstrafe (nur einmal pro Fahrzeug): (Last – softMaxLoad) × costPerUnitAboveSoftMax. Alle Kosten müssen addiert werden und müssen sich in derselben Einheit wie Shipment.penalty_cost befinden.

startLoadInterval

object (Interval)

Das akzeptable Ladeintervall des Fahrzeugs zu Beginn der Route.

endLoadInterval

object (Interval)

Das akzeptable Lastintervall des Fahrzeugs am Ende der Route.

maxLoad

string (int64 format)

Die maximal akzeptable Last.

Intervall

Intervall akzeptabler Lastbeträge.

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

string (int64 format)

Eine akzeptable Mindestlast. Muss ≥ 0 sein. Wenn beide angegeben werden, muss minmax sein.

max

string (int64 format)

Eine maximal akzeptable Last. Muss ≥ 0 sein. Wenn keine Angabe gemacht wird, wird die maximale Last durch diese Nachricht nicht eingeschränkt. Wenn beide angegeben werden, muss minmax sein.

DurationLimit

Limit für die maximale Dauer der Route eines Fahrzeugs. Sie kann entweder hart oder weich sein.

Wenn ein Feld für ein weiches Limit definiert ist, müssen sowohl der Grenzwert für den weichen 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“ beschränkt.

Eine Dauer in Sekunden mit bis zu neun Nachkommastellen, die auf „s“ endet. Beispiel: "3.5s".

softMaxDuration

string (Duration format)

Ein weiches Limit, das kein maximales Dauerlimit erzwingt, aber wenn es verletzt wird, verursacht Kosten für die Route. Diese Kosten summieren sich zu den anderen im Modell definierten Kosten mit derselben Einheit.

Wenn definiert, darf softMaxDuration nicht negativ sein. Wenn „maxDuration“ ebenfalls definiert ist, muss softMaxDuration kleiner als „maxDuration“ sein.

Eine Dauer in Sekunden mit bis zu neun Nachkommastellen, die auf „s“ endet. Beispiel: "3.5s".

quadraticSoftMaxDuration

string (Duration format)

Ein weiches Limit, das kein maximales Dauerlimit erzwingt, aber wenn es verletzt wird, verursacht eine quadratische Dauer für die Route. Diese Kosten summieren sich zu den anderen im Modell definierten Kosten mit derselben Einheit.

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

maxDuration - quadraticSoftMaxDuration <= 86400 seconds

Eine Dauer in Sekunden mit bis zu neun Nachkommastellen, die auf „s“ endet. Beispiel: "3.5s".

costPerHourAfterSoftMax

number

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

  costPerHourAfterSoftMax * (duration - softMaxDuration)

Die Kosten dürfen nicht negativ sein.

costPerSquareHourAfterQuadraticSoftMax

number

Es fallen Kosten pro Quadratstunde an, wenn der Grenzwert von quadraticSoftMaxDuration überschritten wird.

Die zusätzlichen Kosten sind 0, wenn die Dauer unter dem Grenzwert 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 für die maximale Strecke, die zurückgelegt werden kann. Sie kann entweder hart oder weich sein.

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

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

string (int64 format)

Ein harter Grenzwert, der die Entfernung auf maximal maxMeters beschränkt. Das Limit darf nicht negativ sein.

softMaxMeters

string (int64 format)

Ein weiches Limit erzwingt kein maximales Entfernungslimit. Wenn es jedoch überschritten wird, entstehen Kosten, die zu den im Modell definierten Kosten mit derselben Einheit addiert werden.

Falls definiert, müssen softMaxMeters kleiner als maxMeters sein und dürfen nicht negativ sein.

costPerKilometerAboveSoftMax

number

Es fallen Kosten pro Kilometer an, wenn die Entfernung über dem Limit von softMaxMeters liegt. Die zusätzlichen Kosten sind 0, wenn die Entfernung unter dem Limit liegt. Andernfalls wird die Formel zur Berechnung der Kosten wie folgt verwendet:

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

Die Kosten dürfen nicht negativ sein.

BreakRule

Regeln zum Erstellen von Pausen für ein Fahrzeug (z. B. Mittagspausen) Eine Pause ist ein zusammenhängender Zeitraum, in dem das Fahrzeug in seiner aktuellen Position inaktiv bleibt und keine Besuche durchführen kann. Es kann zu einer Unterbrechung kommen:

  • der Fahrt zwischen zwei Besichtigungen (einschließlich der Zeit direkt vor oder direkt nach einem Besuch, aber nicht in der Mitte eines Besuchs). In diesem Fall wird die Laufzeit zwischen den Besuchen verlängert.
  • oder vor dem Start des Fahrzeugs (das Fahrzeug darf nicht mitten in einer Pause starten). In diesem Fall hat dies keinen Einfluss auf die Startzeit des Fahrzeugs.
  • oder nach dem Ende des Fahrzeugs (Dito, mit der Endzeit des Fahrzeugs).
JSON-Darstellung
{
  "breakRequests": [
    {
      object (BreakRequest)
    }
  ],
  "frequencyConstraints": [
    {
      object (FrequencyConstraint)
    }
  ]
}
Felder
breakRequests[]

object (BreakRequest)

Reihenfolge der Pausen Siehe BreakRequest-Nachricht.

frequencyConstraints[]

object (FrequencyConstraint)

Möglicherweise gelten mehrere FrequencyConstraint. Sie müssen alle mit den BreakRequest dieser BreakRule erfüllt sein. Siehe FrequencyConstraint.

BreakRequest

Die Reihenfolge der Pausen, d.h. deren Anzahl und Reihenfolge, für jedes Fahrzeug muss im Voraus bekannt sein. Die wiederholten BreakRequests definieren diese Sequenz in der Reihenfolge, in der sie auftreten müssen. Ihre Zeitfenster (earliestStartTime / latestStartTime) können sich überschneiden, müssen aber mit der Bestellung kompatibel sein (es ist aktiviert).

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

string (Timestamp format)

Erforderlich. Die Untergrenze (einschließlich) zu Beginn der Unterbrechung.

Ein Zeitstempel im Format RFC3339 UTC „Zulu“ mit Nanosekundenauflösung und bis zu neun Nachkommastellen. Beispiele: "2014-10-02T15:01:23Z" und "2014-10-02T15:01:23.045123456Z".

latestStartTime

string (Timestamp format)

Erforderlich. Obergrenze (einschließlich) zu Beginn der Unterbrechung.

Ein Zeitstempel im Format RFC3339 UTC „Zulu“ mit Nanosekundenauflösung und bis zu neun Nachkommastellen. Beispiele: "2014-10-02T15:01:23Z" und "2014-10-02T15:01:23.045123456Z".

minDuration

string (Duration format)

Erforderlich. Die Mindestdauer der Unterbrechung. Muss positiv sein.

Eine Dauer in Sekunden mit bis zu neun Nachkommastellen, die auf „s“ endet. Beispiel: "3.5s".

FrequencyConstraint

Die Häufigkeit und Dauer der oben angegebenen Pausen kann weiter eingeschränkt werden, indem eine Mindesthäufigkeit für Pausen erzwungen wird, z. B. „Alle 12 Stunden muss eine Pause von mindestens 1 Stunde stattfinden“. Wenn dies so interpretiert werden kann, dass in einem fließenden Zeitfenster von 12 Stunden mindestens eine Pause von mindestens einer Stunde vorhanden ist, würde dieses Beispiel so interpretiert werden: FrequencyConstraint:

{
   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 zusätzlich zu den Zeitfenstern und Mindestdauern, die bereits in BreakRequest angegeben sind.

Ein FrequencyConstraint kann in der Praxis auch für nicht aufeinanderfolgende Unterbrechungen gelten. Im folgenden Zeitplan wird beispielsweise das Beispiel „1h alle 12h“ 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. Minimale Pausendauer für diese Einschränkung. Nicht negativ. Siehe Beschreibung von FrequencyConstraint.

Eine Dauer in Sekunden mit bis zu neun Nachkommastellen, die auf „s“ endet. Beispiel: "3.5s".

maxInterBreakDuration

string (Duration format)

Erforderlich. Maximal zulässige Spanne für ein Zeitintervall auf der Route, das nicht zumindest teilweise eine Unterbrechung von duration >= minBreakDuration enthält. Muss positiv sein.

Eine Dauer in Sekunden mit bis zu neun Nachkommastellen, die auf „s“ endet. Beispiel: "3.5s".

DurationDistanceMatrix

Gibt eine Matrix für Dauer und Entfernung von den Start- und Startorten des Besuchs und der Startorte der Fahrzeuge an.

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

object (Row)

Gibt die Zeilen der Dauer- und Distanzmatrix an. Es muss genauso viele Elemente wie ShipmentModel.duration_distance_matrix_src_tags enthalten.

vehicleStartTag

string

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

Jeder Start eines Fahrzeugs muss genau mit einer Matrix übereinstimmen, d.h., genau eines der Felder startTags muss mit dem vehicleStartTag einer Matrix (und nur dieser Matrix) übereinstimmen.

Alle Matrizen müssen eine andere vehicleStartTag haben.

Row

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 genauso viele Elemente wie ShipmentModel.duration_distance_matrix_dst_tags enthalten.

Eine Dauer in Sekunden mit bis zu neun Nachkommastellen, die auf „s“ endet. Beispiel: "3.5s".

meters[]

number

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

TransitionAttributes

Gibt Attribute für Übergänge zwischen zwei aufeinanderfolgenden Besuchen einer Route an. Mehrere TransitionAttributes können für denselben Übergang gelten: In diesem Fall addieren sich alle zusätzlichen Kosten und es gilt die strengste Beschränkung oder das strengste Limit (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 Übergänge (src->dst) definieren, für die diese Attribute gelten.

Ein Besuch oder Start eines Fahrzeugs stimmt überein, wenn VisitRequest.tags oder Vehicle.start_tags entweder srcTag oder nicht excludedSrcTag enthält (je nachdem, welches dieser Felder nicht leer ist).

excludedSrcTag

string

srcTag ansehen. srcTag und excludedSrcTag dürfen nicht leer sein.

dstTag

string

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

excludedDstTag

string

dstTag ansehen. dstTag und excludedDstTag dürfen nicht leer sein.

cost

number

Gibt die Kosten für die Durchführung dieses Übergangs an. Dies ist dieselbe Einheit wie alle anderen Kosten im Modell und darf nicht negativ sein. Sie wird auf alle anderen bestehenden Kosten angewendet.

costPerKilometer

number

Gibt die Kosten pro Kilometer an, die auf die bei diesem Übergang zurückgelegte Strecke angewendet werden. Er addiert alle Vehicle.cost_per_kilometer, die für „Fahrzeuge“ angegeben sind.

distanceLimit

object (DistanceLimit)

Gibt einen Grenzwert für die Strecke an, die bei diesem Übergang zurückgelegt wird.

Ab dem 06.06.2021 werden nur weiche Limits unterstützt.

delay

string (Duration format)

Gibt eine Verzögerung an, die bei der Durchführung dieser Umstellung auftritt.

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

Eine Dauer in Sekunden mit bis zu neun Nachkommastellen, die auf „s“ endet. Beispiel: "3.5s".

ShipmentTypeIncompatibility

Gibt Inkompatibilitäten zwischen Sendungen abhängig von ihrer Sendungsart an. Inkompatible Sendungen auf derselben Route können aufgrund des Inkompatibilitätsmodus nur eingeschränkt angezeigt werden.

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

string

Liste der inkompatiblen Typen. Zwei Sendungen mit unterschiedlichen shipment_types sind „inkompatibel“.

incompatibilityMode

enum (IncompatibilityMode)

Modus, der auf die Inkompatibilität angewendet wurde.

IncompatibilityMode

Modi, mit denen festgelegt wird, wie inkompatible Sendungen auf derselben Route erscheinen können.

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

Bei zwei Sendungen mit inkompatiblen Typen mit dem Inkompatibilitätsmodus „NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY“:

  • Wenn beide Optionen „Nur Abholen“ (keine Lieferungen) oder nur Lieferungen (keine Abholungen) sind, können sie sich nicht im selben Fahrzeug teilen.
  • Hat eine der Sendungen eine Lieferung und die andere eine Abholung, können sich die beiden Sendungen dasselbe Fahrzeug teilen, wenn die erste Sendung zugestellt wird, bevor die zweite abgeholt wird.

ShipmentTypeRequirement

Gibt die Anforderungen zwischen Sendungen basierend auf ihrer Sendungsart an. Die Einzelheiten der Anforderung werden durch den Anforderungsmodus definiert.

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

string

Liste alternativer Versandarten, die für die dependentShipmentTypes erforderlich sind.

dependentShipmentTypes[]

string

Für alle Sendungen mit einem Typ im Feld „dependentShipmentTypes“ ist mindestens eine Sendung vom Typ requiredShipmentTypeAlternatives auf derselben Route erforderlich.

HINWEIS: Anforderungsketten, bei denen ein shipmentType von sich selbst abhängt, sind nicht zulässig.

requirementMode

enum (RequirementMode)

Der Modus wurde auf die Anforderung angewendet.

RequirementMode

Modi, die die Darstellung abhängiger Lieferungen 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 sich alle „abhängigen“ Sendungen im selben Fahrzeug wie mindestens eine ihrer „erforderlichen“ Sendungen befinden.
IN_SAME_VEHICLE_AT_PICKUP_TIME

Im IN_SAME_VEHICLE_AT_PICKUP_TIME-Modus müssen alle „abhängigen“ Sendungen zum Zeitpunkt der Abholung mindestens eine „erforderliche“ Sendung im Fahrzeug haben.

Bei einer „abhängigen“ Abholung muss daher eines der folgenden Kriterien erfüllt sein:

  • eine Lieferung nur für eine Lieferung erforderlich, die auf dem Weg nach dem Ziel geliefert wird, oder
  • Eine „erforderliche“ Sendung, die auf der Route zuvor abgeholt werden muss und wenn es für die „erforderliche“ Lieferung eine Lieferung gibt, muss diese Lieferung nach der Abholung der abhängigen Sendung erfolgen.
IN_SAME_VEHICLE_AT_DELIVERY_TIME Wie zuvor, mit der Ausnahme, dass die „abhängigen“ Sendungen zum Zeitpunkt der Lieferung eine „erforderliche“ Sendung im Fahrzeug haben müssen.

PrecedenceRule

Eine Prioritätsregel zwischen zwei Ereignissen (jedes Ereignis ist die Abholung oder Lieferung einer Sendung): Das „zweite“ Ereignis muss mindestens offsetDuration nach Beginn des „ersten“ Ereignisses beginnen.

Mehrere Rangfolgen können sich auf dieselben (oder verwandte) Ereignisse beziehen, z.B. „Abholung B erfolgt nach Lieferung von A“ und „Abholung C erfolgt nach Abholung von B“.

Außerdem gelten Rangfolgen nur dann, wenn beide Lieferungen 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 „erste“ Ereignis eine Auslieferung ist.

secondIsDelivery

boolean

Gibt an, ob das „zweite“ Ereignis eine Auslieferung ist.

offsetDuration

string (Duration format)

Abstand zwischen dem „ersten“ und dem „zweiten“ Ereignis Sie kann negativ sein.

Eine Dauer in Sekunden mit bis zu neun Nachkommastellen, die auf „s“ endet. 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.