ShipmentModel

Ein Versandmodell enthält eine Reihe von Sendungen, die von einer Gruppe von Fahrzeugen durchgeführt werden müssen und dabei die Gesamtkosten, die sich aus der folgenden Summe ergeben, zu minimieren:

  • die Kosten für die Routenplanung der Fahrzeuge (Summe der Kosten pro Gesamtzeit, Kosten pro Fahrtzeit und Fixkosten für alle Fahrzeuge).
  • die nicht erfüllten 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 Sendungen, 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 dürfen nicht mehr als 3.153.6.000 Sekunden voneinander entfernt sein.

Wenn Sie cost_per_*hour-Felder verwenden, können Sie für dieses Fenster ein kleineres Intervall festlegen, um die Leistung zu steigern. Wenn Sie z. B. einen einzelnen Tag modellieren, sollten Sie die globalen Zeitbeschränkungen auf diesen Tag festlegen. Ist die Richtlinie nicht konfiguriert, wird standardmäßig 00:00:00 UTC, der 1. Januar 1970 (Sekunden: 0, Nanos: 0) verwendet.

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

globalEndTime

string (Timestamp format)

Ist die Richtlinie nicht konfiguriert, wird standardmäßig 00:00:00 UTC, der 1. Januar 1971 (Sekunden: 31536000, Nanos: 0) verwendet.

Ein Zeitstempel im Format RFC3339 UTC "Zulu" mit einer Auflösung im Nanosekundenbereich 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 letzten effektiven Endzeit aller Fahrzeuge. Nutzende können dieser Menge Kosten pro Stunde zuweisen, um beispielsweise zu versuchen, den frühesten Abschluss eines Auftrags zu optimieren. Diese Kosten müssen in derselben Einheit wie Shipment.penalty_cost liegen.

durationDistanceMatrices[]

object (DurationDistanceMatrix)

Gibt die im Modell verwendeten Matrizen für Dauer und Entfernung an. Wenn dieses Feld leer ist, werden stattdessen Google Maps oder geodätische Entfernungen verwendet, je nach dem Wert des Felds useGeodesicDistances. Wenn es nicht leer ist, kann useGeodesicDistances nicht „true“ 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 locA startet und an locA endet.
  • 1 Anfrage für einen Abholtermin am Standort „locB“.
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 startet und an locB endet, unter Verwendung der Matrix „fast“.
  • 1 Fahrzeug, das seine Route an locB startet und an locB endet, unter Verwendung der Matrix „langsam“.
  • 1 Fahrzeug beginnt seine Route an locB und endet an locB, unter Verwendung der Matrix „fast“.
  • 1 Anfrage für einen Abholtermin 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 Matrizen für Dauer und Entfernung definiert werden durationDistanceMatrices(i).rows(j) definiert die Dauer und die Entfernungen von Besuchen mit dem Tag durationDistanceMatrixSrcTags(j) zu anderen Besuchen in Matrix i.

Tags entsprechen VisitRequest.tags oder Vehicle.start_tags. Ein bestimmter VisitRequest oder Vehicle muss mit genau einem Tag in diesem Feld übereinstimmen. Die Quell-, Ziel- und Matrix-Tags einer Vehicle können identisch sein. 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, darf durationDistanceMatrices nicht leer sein.

durationDistanceMatrixDstTags[]

string

Tags, mit denen die Ziele der Matrizen für Dauer und Entfernung definiert werden durationDistanceMatrices(i).rows(j).durations(k) (Resp. 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 dem Tag durationDistanceMatrixDstTags(k) in der Matrix i.

Tags entsprechen VisitRequest.tags oder Vehicle.start_tags. Ein bestimmter VisitRequest oder Vehicle muss mit genau einem Tag in diesem Feld übereinstimmen. Die Quell-, Ziel- und Matrix-Tags einer Vehicle können identisch sein. 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, darf durationDistanceMatrices nicht leer sein.

transitionAttributes[]

object (TransitionAttributes)

Dem Modell wurden Übergangsattribute hinzugefügt.

shipmentTypeIncompatibilities[]

object (ShipmentTypeIncompatibility)

Sets inkompatibler „shipment_types“ (siehe ShipmentTypeIncompatibility).

shipmentTypeRequirements[]

object (ShipmentTypeRequirement)

Gruppe von 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 eine Sendung ausgeführt wird. Dies kann verwendet werden, um die Anzahl der Routen für den Fall zu begrenzen, dass es weniger Fahrer als Fahrzeuge gibt und der Fuhrpark 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 einer Abholung bis zu einem ihrer Lieferungen. Damit die Sendung als ausgeführt gilt, muss ein einzelnes Fahrzeug einen Abholort anfahren (und die freien Kapazitäten entsprechend reduzieren) und dann später einen der Lieferorte aufsuchen (und die freien Kapazitäten entsprechend 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. Er kann bis zu 63 Zeichen lang sein und UTF-8-Zeichen enthalten.

pickups[]

object (VisitRequest)

Eine Reihe von Alternativen für die Abholung, die der Sendung zugeordnet sind. Wenn nicht angegeben, muss das Fahrzeug nur einen Lieferort aufsuchen.

deliveries[]

object (VisitRequest)

Gruppe von Lieferalternativen für die Lieferung. Wenn nicht angegeben, muss das Fahrzeug nur zu einem Ort aufsuchen, an dem die Abholung stattfindet.

loadDemands

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

Die Anforderungen der Sendung (z. B. Gewicht, Menge, Anzahl der Paletten usw.) Die Schlüssel in der Zuordnung sollten Bezeichner sein, die den Typ der entsprechenden Last beschreiben, idealerweise einschließlich der Einheiten. Beispiel: „weight_kg“, „volumen_gallons“, „pallet_count“ usw. Wenn ein bestimmter Schlüssel nicht auf der Karte erscheint, wird die entsprechende Last 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 diese Sendung ausführen können. Ist es leer, kann es von allen Fahrzeugen ausgeführt werden. Fahrzeuge sind gemäß ihrem Index in der vehicles-Liste von ShipmentModel angegeben.

costsPerVehicle[]

number

Gibt die Kosten an, die anfallen, wenn diese Sendung von jedem Fahrzeug zugestellt wird. Wenn angegeben, muss es ENTWEDER:

  • genauso viele Elemente wie costsPerVehicleIndices. costsPerVehicle[i] entspricht Fahrzeug-costsPerVehicleIndices[i] des Modells.
  • wie viele Fahrzeuge im Modell enthalten. Das i-te Element entspricht der Fahrzeugnummer i des Modells.

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

costsPerVehicleIndices[]

integer

Indizes der Fahrzeuge, für die costsPerVehicle gilt. Wenn das Feld nicht leer ist, muss es dieselbe Anzahl an Elementen wie „costsPerVehicle“ haben. Ein Fahrzeugindex kann nur einmal angegeben werden. Wenn ein Fahrzeug von costsPerVehicleIndices ausgeschlossen ist, betragen die Kosten null.

pickupToDeliveryAbsoluteDetourLimit

string (Duration format)

Gibt die maximale absolute Umleitungszeit im Vergleich zum kürzesten Weg von Abholung bis Lieferung an. Wenn angegeben, muss er ein positiver Wert sein und die Sendung muss mindestens eine Abholung und eine Lieferung enthalten.

Es sollte beispielsweise die kürzeste Zeit sein, die von der ausgewählten Abholoption direkt zur ausgewählten Lieferalternative benötigt wird. Dann wird durch das Festlegen von pickupToDeliveryAbsoluteDetourLimit Folgendes erzwungen:

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

Wenn für dieselbe Lieferung sowohl relative als auch absolute Grenzwerte angegeben sind, wird für jedes mögliche Paar aus Abholung und Lieferung das restriktivere Limit verwendet. Seit dem 10. Oktober 2017 werden Umleitungen nur noch unterstützt, wenn die Fahrtdauer nicht von den Fahrzeugen abhängig ist.

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 Lieferung einer Sendung an. Wenn angegeben, muss er ein positiver Wert sein und die Sendung muss mindestens eine Abholung und eine Lieferung enthalten. Dies hängt nicht davon ab, welche Alternativen für Abholung und Lieferung ausgewählt werden, oder von der Fahrzeuggeschwindigkeit. Dies kann neben maximalen Umwegbeschränkungen angegeben werden: Die Lösung berücksichtigt beide Spezifikationen.

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

shipmentType

string

Ein nicht leerer String zur Angabe eines „Typs“ für diese Lieferung. 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 ist: Alle Abhol-/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 der entsprechenden ShipmentRoute.Visit gemeldet.

ignore

boolean

Wenn wahr, überspringen Sie diese Sendung, aber wenden Sie keine penaltyCost an.

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

Das Ignorieren einer Lieferung, die in injectedFirstSolutionRoutes oder injectedSolutionConstraint durchgeführt wird, ist zulässig. Der Matherechner entfernt die entsprechenden Abhol-/Lieferbesuche aus der entsprechenden Route. precedenceRules, die auf ignorierte Sendungen verweisen, werden ebenfalls ignoriert.

penaltyCost

number

Wenn der Versand nicht abgeschlossen wird, wird diese Gebühr zu den Gesamtkosten der Routen addiert. Eine Sendung gilt als abgeschlossen, wenn eine ihrer Abhol- und Lieferoptionen aufgerufen 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 diese Strafe nicht angegeben ist, gilt sie als unendlich, d.h., der Versand muss abgeschlossen sein.

pickupToDeliveryRelativeDetourLimit

number

Gibt die maximale relative Umleitungszeit im Vergleich zum kürzesten Weg von Abholung bis Lieferung an. Wenn angegeben, muss er ein positiver Wert sein und die Sendung muss mindestens eine Abholung und eine Lieferung enthalten.

Es sollte beispielsweise die kürzeste Zeit sein, die von der ausgewählten Abholoption direkt zur ausgewählten Lieferalternative benötigt wird. Dann wird durch das Festlegen von pickupToDeliveryRelativeDetourLimit Folgendes erzwungen:

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

Wenn für dieselbe Lieferung sowohl relative als auch absolute Grenzwerte angegeben sind, wird für jedes mögliche Paar aus Abholung und Lieferung das restriktivere Limit verwendet. Seit dem 10. Oktober 2017 werden Umleitungen nur noch unterstützt, wenn die Fahrtdauer nicht von den Fahrzeugen abhängig ist.

VisitRequest

Eine Anfrage für einen Besuch, der von einem Fahrzeug durchgeführt werden kann: Es hat einen geografischen Standort (oder zwei, siehe unten), Öffnungs- und Schließzeiten in Form von Zeitfenstern sowie eine Servicedauer (Zeit, die das Fahrzeug nach Ankunft zum Abholen oder Abgeben der Waren 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 dieser VisitRequest ankommt. Wenn das Versandmodell eine Distanzmatrikel für die Dauer hat, darf arrivalLocation nicht angegeben werden.

arrivalWaypoint

object (Waypoint)

Der Wegpunkt, an dem das Fahrzeug bei dieser VisitRequest ankommt. Wenn das Versandmodell eine Distanzmatrikel für die Dauer hat, darf arrivalWaypoint nicht angegeben werden.

departureLocation

object (LatLng)

Der Standort, an dem das Fahrzeug nach Abschluss dieser VisitRequest abfährt. Kann weggelassen werden, wenn er mit arrivalLocation identisch ist. Wenn das Versandmodell eine Distanzmatrikel für die Dauer hat, darf departureLocation nicht angegeben werden.

departureWaypoint

object (Waypoint)

Der Wegpunkt, an dem das Fahrzeug nach Abschluss dieser VisitRequest abfährt. Kann weggelassen werden, wenn er mit arrivalWaypoint identisch ist. Wenn das Versandmodell eine Distanzmatrikel für die Dauer hat, 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 der Ankunftszeit abfahren kann, d.h. Ankunftszeit und Dauer müssen nicht innerhalb eines Zeitfensters liegen. Dies kann zu Wartezeiten führen, wenn das Fahrzeug vor TimeWindow.start_time ankommt.

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

Zeitfenster müssen disjunkt sein, d. h., es darf sich kein Zeitfenster mit einem anderen überschneiden oder aneinander liegen. Außerdem müssen die Zeitfenster in aufsteigender Reihenfolge angeordnet sein.

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

duration

string (Duration format)

Die Dauer des Besuchs, d.h. die Zeit, die das Fahrzeug zwischen Ankunft und Abfahrt verbringt (muss zur möglichen Wartezeit hinzugerechnet 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 Besuchsanfrage auf einer Fahrzeugroute. Damit können unterschiedliche Kosten für jede alternative Abholung oder Lieferung einer Sendung bezahlt werden. 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))

Ladeanforderungen für diese Besuchsanfrage. Dies entspricht dem Feld Shipment.load_demands, mit dem Unterschied, dass es nur für diese VisitRequest und nicht für das gesamte 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 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 dieses 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. 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

Schließt einen Wegpunkt ein. Wegpunkte kennzeichnen die Ankunfts- und Abfahrtsorte von VisitRequests sowie Start- und Endpositionen von Fahrzeugen.

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 der Standort dieses Wegpunkts das Fahrzeug bevorzugt an einer bestimmten Straßenseite halten soll. Wenn Sie diesen Wert festlegen, verläuft die Route durch den Standort, sodass das Fahrzeug an der Straßenseite anhalten kann, zu der der Standort gewichtet ist. Diese Option funktioniert bei "WALKING" nicht Mobilitätsform.

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

placeId

string

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

Standort

Kapselt einen Standort ein (einen geografischen Punkt und eine optionale Überschrift).

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 angegeben, die als Start- und Zielpunkt verwendet werden soll. Ausrichtungswerte 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 Uhrzeit eines Ereignisses, z. B. die Ankunftszeit bei einem Besuch oder die Start- und Endzeit eines Fahrzeugs.

Die Grenzen des festen Zeitfensters (startTime und endTime) erzwingen die früheste und letzte Zeit des Ereignisses, z. B. startTime <= event_time <= endTime. Die Untergrenze des weichen Zeitfensters (softStartTime) drückt eine Präferenz für das Ereignis aus, das am oder nach dem softStartTime eintritt, indem Kosten proportional zur Dauer vor dem Ereignis „softStartTime“ anfallen. Die Obergrenze des weichen Zeitfensters softEndTime gibt an, dass das Ereignis am oder vor dem softEndTime eintreten soll, indem Kosten proportional zur Zeit nach softEndTime des Ereignisses anfallen. startTime, endTime, softStartTime und softEndTime müssen innerhalb der globalen Zeitbeschränkungen liegen (siehe ShipmentModel.global_start_time und ShipmentModel.global_end_time) 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)

Die Startzeit des schweren Zeitfensters. Wenn kein Wert angegeben ist, wird er auf ShipmentModel.global_start_time festgelegt.

Ein Zeitstempel im Format RFC3339 UTC "Zulu" mit einer Auflösung im Nanosekundenbereich 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 schweren Zeitfensters. Wenn kein Wert angegeben ist, wird er auf ShipmentModel.global_end_time festgelegt.

Ein Zeitstempel im Format RFC3339 UTC "Zulu" mit einer Auflösung im Nanosekundenbereich 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 einer Auflösung im Nanosekundenbereich und bis zu neun Nachkommastellen. Beispiele: "2014-10-02T15:01:23Z" und "2014-10-02T15:01:23.045123456Z".

softEndTime

string (Timestamp format)

Die weiche Endzeit des Zeitfensters.

Ein Zeitstempel im Format RFC3339 UTC "Zulu" mit einer Auflösung im Nanosekundenbereich 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 hinzugefügt werden, wenn das Ereignis vor der softStartTime eintritt. Der Wert wird wie folgt berechnet:

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

Dieser Wert muss 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. Der Wert wird wie folgt 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 bei einem Versandproblem. Wenn ein Versandproblem gelöst wird, wird für dieses Fahrzeug eine Route erstellt, die bei startLocation beginnt und um endLocation endet. Eine Route besteht aus einer Abfolge von Besuchen (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. Er kann bis zu 63 Zeichen lang sein und UTF-8-Zeichen enthalten.

travelMode

enum (TravelMode)

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

startLocation

object (LatLng)

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

startWaypoint

object (Waypoint)

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

endLocation

object (LatLng)

Der geografische Standort, an dem das Fahrzeug endet, nachdem es seine letzte VisitRequest beendet hat. Wenn nicht angegeben, endet die ShipmentRoute des Fahrzeugs sofort nach der letzten VisitRequest. Wenn das Versandmodell Matrizen für Dauer und Entfernung enthält, darf endLocation nicht angegeben werden.

endWaypoint

object (Waypoint)

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

startTags[]

string

Gibt Tags an, die am Anfang 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 vom Startort losfahren kann. Sie müssen innerhalb der globalen Zeitbeschränkungen liegen (siehe Felder „ShipmentModel.global_*“). Wenn nicht angegeben, gibt es neben diesen globalen Zeitlimits keine Einschränkungen.

Zeitfenster, die zum selben wiederholten Feld gehören, müssen disjunkt sein, d. h., kein Zeitfenster darf sich mit einem anderen überschneiden oder aneinander liegen. Außerdem müssen sie in chronologischer Reihenfolge angegeben sein.

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

endTimeWindows[]

object (TimeWindow)

Zeitfenster, in denen das Fahrzeug am Endstandort ankommt. Sie müssen innerhalb der globalen Zeitbeschränkungen liegen (siehe Felder „ShipmentModel.global_*“). Wenn nicht angegeben, gibt es neben diesen globalen Zeitlimits keine Einschränkungen.

Zeitfenster, die zum selben wiederholten Feld gehören, müssen disjunkt sein, d. h., kein Zeitfenster darf sich mit einem anderen überschneiden oder aneinander liegen. Außerdem müssen sie in chronologischer Reihenfolge angegeben sein.

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

unloadingPolicy

enum (UnloadingPolicy)

Die Richtlinie zum Entladen wird für das Fahrzeug erzwungen.

loadLimits

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

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

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

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 Gesamtdauer der Route angerechnet, einschließlich Reise-, Wartezeit und Besuchszeit. Die Verwendung von costPerHour statt nur costPerTraveledHour kann zu einer zusätzlichen Latenz führen.

costPerTraveledHour

number

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

costPerKilometer

number

Kosten pro Kilometer der Fahrzeugroute. Diese Kosten werden auf die in der ShipmentRoute.transitions angegebene Entfernung angewendet und nicht auf Entfernungen, die implizit von der arrivalLocation zum departureLocation einer einzelnen VisitRequest zurückgelegt wurden.

fixedCost

number

Es fallen Fixkosten an, wenn dieses Fahrzeug zur Abwicklung einer Sendung verwendet wird.

usedIfRouteIsEmpty

boolean

Dieses Feld gilt nur für Fahrzeuge, deren Route keine Sendungen bedient. Gibt an, ob das Fahrzeug in diesem Fall als gebraucht gilt oder nicht.

Falls wahr, bewegt sich das Fahrzeug vom Start bis zum Ziel, auch wenn es keine Sendungen bedient, sowie die aus dem Start entstehenden Zeit- und Entfernungskosten --> Endreise berücksichtigt werden.

Andernfalls wird das Fahrzeug nicht vom Start- zum Zielort bewegt und für dieses Fahrzeug sind keine breakRule oder Verspätungen (ab TransitionAttributes) geplant. In diesem Fall enthält die ShipmentRoute des Fahrzeugs keine Informationen außer Fahrzeugindex und -etikett.

routeDurationLimit

object (DurationLimit)

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

travelDurationLimit

object (DurationLimit)

Die Beschränkung gilt für die Reisedauer der Route des Fahrzeugs. In einem bestimmten OptimizeToursResponse ist die Reisedauer die Summe aller zugehörigen transitions.travel_duration.

routeDistanceLimit

object (DistanceLimit)

Die Begrenzung wird auf die Gesamtstrecke der Fahrzeugroute angewendet. In einer bestimmten OptimizeToursResponse ist die Routenentfernung die Summe aller zugehörigen transitions.travel_distance_meters.

extraVisitDurationForVisitType

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

Gibt eine Zuordnung von VisitTypes-Strings zur Dauer an. Die Dauer ist zusätzlich zu VisitRequest.duration Zeit für Besuche mit dem angegebenen visitTypes. Durch diese zusätzliche Besuchsdauer entstehen zusätzliche Kosten, wenn costPerHour angegeben ist. Schlüssel (z.B. visitTypes) dürfen keine leeren Strings sein.

Wenn eine Besuchsanfrage mehrere Typen aufweist, 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 Pausenzeitplan, 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 des entsprechenden ShipmentRoute gemeldet.

ignore

boolean

Falls wahr, muss usedIfRouteIsEmpty „falsch“ sein und das Fahrzeug bleibt ungenutzt.

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

Wenn eine Sendung von einem ignorierten Fahrzeug in injectedSolutionConstraint durchgeführt wird und damit verbundene Abhol-/Lieferungen nur im Fahrzeug verbleiben (d.h. nicht auf Level RELAX_ALL_AFTER_THRESHOLD gelockert werden), wird sie in der Antwort übersprungen. Wenn das Feld allowedVehicleIndices für eine 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 Fahrtzeit dieses Fahrzeugs erhöht oder verringert werden kann. Wenn Sie diesen Wert beispielsweise auf 2,0 festlegen, ist dieses Fahrzeug langsamer und hat doppelt so hohe Fahrzeiten wie bei Standardfahrzeugen. Dieser Multiplikator wirkt sich nicht auf die Besuchsdauer aus. Es wirkt sich auf die Kosten aus, wenn costPerHour oder costPerTraveledHour angegeben ist. Er muss im Bereich [0.001, 1000.0] liegen. Wird kein Wert festgelegt, ist das Fahrzeug ein Standardfahrzeug und dieses Vielfache wird als 1, 0 betrachtet.

WARNUNG: Die Fahrtzeiten werden auf die nächste Sekunde gerundet, nachdem dieses Vielfache angewendet wurde, aber vor der Durchführung numerischer Operationen. Daher kann ein kleines Vielfaches zu einem Genauigkeitsverlust führen.

Siehe auch extraVisitDurationForVisitType unten.

TravelMode

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

Diese sollten eine Teilmenge der Mobilitätsformen der Google Maps Platform Routes Preferred API sein, siehe https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.

Enums
TRAVEL_MODE_UNSPECIFIED Mobilitätsform ohne Angabe, entspricht DRIVING.
DRIVING Mobilitätsform, die der Route entspricht (Auto, ...).
WALKING Mobilitätsform, die der Fußgängerroute entspricht.

UnloadingPolicy

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

Andere Lieferungen sind unabhängig von unloadingPolicy überall auf der Route kostenlos.

Enums
UNLOADING_POLICY_UNSPECIFIED Nicht spezifizierte Entladerichtlinie; Lieferungen müssen unmittelbar 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 derselben Reihenfolge wie die Abholung erfolgen

LoadLimit

Definiert ein Lastlimit für ein Fahrzeug, z.B. „Der 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 Last auf der Route dieses Fahrzeugs jemals softMaxLoad überschreitet, gilt die folgende Kostenstrafe (nur einmal pro Fahrzeug): (Belastung – softMaxLoad) × costPerUnitAboveSoftMax. Alle Kosten werden addiert und müssen in derselben Einheit wie Shipment.penalty_cost liegen.

startLoadInterval

object (Interval)

Das akzeptable Ladeintervall des Fahrzeugs beim Start der Route.

endLoadInterval

object (Interval)

Das akzeptable Ladeintervall des Fahrzeugs am Ende der Route.

maxLoad

string (int64 format)

Die maximal akzeptable Last.

Intervall

Intervall akzeptabler Lademengen.

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

string (int64 format)

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

max

string (int64 format)

Maximale akzeptable Last. Muss ≥ 0 sein. Wenn nicht angegeben, wird die maximale Last durch diese Nachricht nicht eingeschränkt. Wenn beide angegeben sind, muss minmax sein.

DurationLimit

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

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

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

string (Duration format)

Ein festes Limit, das die Dauer auf maximal maxDuration beschränkt.

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

softMaxDuration

string (Duration format)

Bei einem weichen Limit, das keine maximale Dauer erzwingt, fallen bei einem Verstoß für die Route Kosten an. Diese Kosten summieren sich zu den anderen im Modell definierten Kosten mit derselben Einheit.

Falls definiert, darf softMaxDuration nicht negativ sein. Wenn „maxDuration“ ebenfalls 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)

Bei einem weichen Limit, das keine maximale Dauer erzwingt, fallen bei einem Verstoß für die Route Kosten mit quadratischer Dauer an. Diese Kosten summieren sich zu den anderen im Modell definierten Kosten mit derselben Einheit.

Falls 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

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

costPerHourAfterSoftMax

number

Kosten pro Stunde, wenn der Grenzwert softMaxDuration verletzt 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

Die Kosten pro Quadratstunde, die beim Verstoß gegen den Grenzwert von quadraticSoftMaxDuration anfallen.

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, das eine maximale Strecke definiert, 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 werden und nicht negativ sein.

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

string (int64 format)

Ein fester Grenzwert, der den Abstand auf maximal maxMeters beschränkt. Der Grenzwert darf nicht negativ sein.

softMaxMeters

string (int64 format)

Ein weicher Grenzwert, bei dem kein maximales Entfernungslimit durchgesetzt wird, aber ein Verstoß führt zu Kosten, die zu anderen im Modell definierten Kosten mit derselben Einheit addiert werden.

Wenn softMaxMeters definiert sind, muss sie kleiner als die maxMeters sein und darf nicht negativ sein.

costPerKilometerAboveSoftMax

number

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

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

Die Kosten dürfen nicht negativ sein.

BreakRule

Regeln zum Generieren von Zeitpausen 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. Es kann zu einer Unterbrechung kommen:

  • während der Reise zwischen zwei Besuchen (einschließlich der Zeit unmittelbar vor oder unmittelbar nach einem Besuch, aber nicht während eines Besuchs). In diesem Fall wird die entsprechende Laufzeit zwischen den Besuchen verlängert.
  • oder vor dem Start (das Fahrzeug startet möglicherweise nicht mitten in der Pause). In diesem Fall wirkt sich dies nicht auf die Fahrzeugstartzeit aus.
  • oder nach dem Fahrzeugende (ditto mit der Endzeit des Fahrzeugs).
JSON-Darstellung
{
  "breakRequests": [
    {
      object (BreakRequest)
    }
  ],
  "frequencyConstraints": [
    {
      object (FrequencyConstraint)
    }
  ]
}
Felder
breakRequests[]

object (BreakRequest)

Reihenfolge der Unterbrechungen Siehe die Meldung BreakRequest.

frequencyConstraints[]

object (FrequencyConstraint)

Es können mehrere FrequencyConstraint gelten. Sie müssen alle mit den BreakRequests dieser BreakRule zufrieden sein. Siehe FrequencyConstraint.

BreakRequest

Die Reihenfolge der Pausen (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 Zeitfenster (earliestStartTime / latestStartTime) können sich überschneiden, müssen aber mit der Reihenfolge kompatibel sein (diese Option ist aktiviert).

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

string (Timestamp format)

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

Ein Zeitstempel im Format RFC3339 UTC "Zulu" mit einer Auflösung im Nanosekundenbereich 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 einer Auflösung im Nanosekundenbereich und bis zu neun Nachkommastellen. Beispiele: "2014-10-02T15:01:23Z" und "2014-10-02T15:01:23.045123456Z".

minDuration

string (Duration format)

Erforderlich. Minimale Dauer der Pause Muss positiv sein.

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

FrequencyConstraint

Die Häufigkeit und Dauer der oben angegebenen Pausen kann weiter eingeschränkt werden, indem eine Mindestpausenhäufigkeit festgelegt wird, z. B. „Mindestens eine Stunde alle 12 Stunden eine Pause machen“. Unter der Annahme, dass dies als „In einem fließenden Zeitfenster von 12 Stunden muss mindestens eine Pause von mindestens einer Stunde vorhanden sein“ interpretiert werden kann, würde sich dieses Beispiel so ergeben: FrequencyConstraint:

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

Beim Timing und bei der Dauer der Pausen in der Lösung werden alle diese Einschränkungen berücksichtigt, zusätzlich zu den bereits in BreakRequest angegebenen Zeitfenstern und Mindestdauern.

Ein FrequencyConstraint kann in der Praxis auch für nicht aufeinanderfolgende Unterbrechungen gelten. Im folgenden Zeitplan wird beispielsweise die „1h alle 12h“ berücksichtigt. Beispiel:

  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 Unterbrechungsdauer 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. Maximal zulässige Zeitspanne für ein beliebiges Zeitintervall der Route, das nicht mindestens teilweise eine Unterbrechung von duration >= minBreakDuration enthält. Muss positiv sein.

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

DurationDistanceMatrix

Gibt eine Matrix für die Dauer und die Entfernung zwischen Besuchs- und Fahrzeugstartstandorten und Zielstandorten an.

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

object (Row)

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

vehicleStartTag

string

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

Jeder Fahrzeugstart muss genau einer Matrix entsprechen, d.h. genau eines der startTags-Felder muss mit der vehicleStartTag einer Matrix (und nur dieser Matrix) übereinstimmen.

Alle Matrizen müssen eine andere vehicleStartTag haben.

Zeile

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

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

string (Duration format)

Werte für die Dauer einer bestimmten Zeile. Es muss so viele Elemente wie ShipmentModel.duration_distance_matrix_dst_tags enthalten.

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, können Sie dieses Feld leer lassen. Andernfalls muss sie 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 summieren sich alle zusätzlichen Kosten und es gilt die strengste Einschränkung oder Grenze gemäß der natürlichen „AND“-Semantik.

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

string

Tags, mit denen die Gruppe der (src->dst)-Übergänge definiert wird, für die diese Attribute gelten.

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

excludedSrcTag

string

srcTag ansehen. Genau entweder srcTag oder excludedSrcTag muss ausgefüllt werden.

dstTag

string

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

excludedDstTag

string

dstTag ansehen. Genau entweder dstTag oder excludedDstTag muss ausgefüllt werden.

cost

number

Gibt die Kosten für diese Umstellung an. Diese Einheit entspricht allen anderen Kosten im Modell und darf nicht negativ sein. Er wird zusätzlich zu allen anderen bestehenden Kosten angewendet.

costPerKilometer

number

Gibt die Kosten pro Kilometer an, die auf die zurückgelegte Strecke bei dieser Umstellung angewendet werden. Die Summe ergibt alle Vehicle.cost_per_kilometer für Fahrzeuge.

distanceLimit

object (DistanceLimit)

Gibt eine Grenze für die zurückgelegte Strecke an, die während dieses Übergangs zurückgelegt wird.

Seit dem 06.06.2021 werden nur weiche Limits unterstützt.

delay

string (Duration format)

Gibt die 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.

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 Versandtyp an. Inkompatible Sendungen auf derselben Route sind aufgrund des Inkompatibilitätsmodus eingeschränkt.

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

IncompatibilityMode

Mobilitätsformen, mit denen das Auftreten inkompatibler Sendungen auf derselben Route eingeschränkt werden.

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 nicht dasselbe Fahrzeug teilen.
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

Für zwei Sendungen mit inkompatiblen Typen mit dem Inkompatibilitätsmodus NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY:

  • Wenn beide nur Abholung (keine Lieferungen) oder nur Lieferungen (keine Abholungen) sind, können sie sich nicht dasselbe Fahrzeug teilen.
  • Wenn eine der Sendungen eine Lieferung und die andere eine Abholung umfasst, können sich die beiden Sendungen dasselbe Fahrzeug teilen, sofern die vorherige Sendung vor der Abholung der Sendungen geliefert wird.

ShipmentTypeRequirement

Gibt Anforderungen zwischen Sendungen basierend auf ihrem Sendungstyp an. Die Einzelheiten der Anforderung werden durch den Anforderungsmodus definiert.

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

string

Liste alternativer Versandtypen, die von der dependentShipmentTypes gefordert werden.

dependentShipmentTypes[]

string

Alle Sendungen eines Typs im Feld dependentShipmentTypes erfordern mindestens eine Sendung vom Typ requiredShipmentTypeAlternatives, die auf derselben Route besucht werden muss.

HINWEIS: Anforderungsketten, die davon abhängen, ein shipmentType-Objekt, sind nicht zulässig.

requirementMode

enum (RequirementMode)

Modus wurde auf die Anforderung angewendet.

RequirementMode

Mobilitätsformen, mit denen das Erscheinungsbild abhängiger Sendungen auf einer Route bestimmt wird.

Enums
REQUIREMENT_MODE_UNSPECIFIED Nicht angegebener Anforderungsmodus. Dieser Wert sollte niemals verwendet werden.
PERFORMED_BY_SAME_VEHICLE In diesem Modus sind alle "abhängigen" Sendungen müssen dasselbe Fahrzeug verwenden wie mindestens eines ihrer Lieferungen.
IN_SAME_VEHICLE_AT_PICKUP_TIME

Im IN_SAME_VEHICLE_AT_PICKUP_TIME-Modus sind alle „abhängigen“ Sendungen müssen mindestens eine Fahrzeug zum Zeitpunkt der Abholung versendet wird.

Ein „abhängiges“ Die Abholung der Sendung muss daher Folgendes enthalten:

  • Eine reine Lieferung „erforderlich“ Lieferung auf dem Weg danach oder
  • Ein „erforderlich“ auf der Route abgeholt wird und ob die "erforderlichen" Lieferung erfolgt, muss diese Lieferung nach dem "Abhängigen" erfolgen. Abholung der Sendung.
IN_SAME_VEHICLE_AT_DELIVERY_TIME Wie zuvor, mit Ausnahme von „Abhängigkeit“ Sendungen einen erforderlichen zum Zeitpunkt der Lieferung im Fahrzeug versendet wurde.

PrecedenceRule

Eine Vorrangregel zwischen zwei Ereignissen (jedes Ereignis ist die Abholung oder Lieferung einer Sendung): das „zweite“ Ereignis muss mindestens offsetDuration nach dem „ersten“ beginnen hat begonnen.

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

Darüber hinaus gelten Vorrangstufen nur dann, wenn beide Lieferungen durchgeführt werden, und werden ansonsten ignoriert.

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

boolean

Gibt an, ob die „erste“ ist eine Lieferung.

secondIsDelivery

boolean

Gibt an, ob das „second“-Element ist eine Lieferung.

offsetDuration

string (Duration format)

Der Versatz zwischen dem "ersten" und „second“ . Sie kann negativ sein.

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

firstIndex

integer

Versandindex der ersten Angabe . Dieses Feld muss angegeben werden.

secondIndex

integer

Versandindex der „zweiten“ Antwort . Dieses Feld muss angegeben werden.