Antwort interpretieren

Die Route Optimization API gibt Routen für Fahrzeuge in der entsprechenden Anfrage zurück. Sendungen werden Fahrzeugen zugewiesen oder können je nach Eigenschaften der Anfrage übersprungen werden.

Eine OptimizeToursResponse-Nachricht (REST, gRPC) hat zwei Haupteigenschaften der obersten Ebene:

  • routes[] sind die Routen für jedes Fahrzeug mit den zugewiesenen Sendungen. Jedes Route enthält Messwerte, die die Eigenschaften dieser einzelnen Route widerspiegeln.
  • metrics sind aggregierte Messwerte für die gesamte Antwort, für alle Fahrzeuge und Routenpläne. Messwerte der obersten Ebene enthalten dieselben Properties wie Messwerte pro Route, wobei die Werte für alle Routen zusammengefasst werden.

Je nach Optimierungsergebnissen werden einige Properties möglicherweise nicht immer ausgefüllt:

  1. skippedShipments[] enthält Sendungen, die nicht mit einem Fahrzeug durchgeführt werden. Ein Versand kann übersprungen werden, wenn er nicht innerhalb der angegebenen Einschränkungen durchgeführt werden kann oder wenn die Kosten für die Durchführung des Versands die Kostenpauschale übersteigen. Wenn beispielsweise die Abholung oder Zustellung einer Sendung einen sehr engen timeWindow hat, ist es möglicherweise nicht möglich oder kostengünstig, dass ein Fahrzeug den Besuch innerhalb des erforderlichen Zeitfensters durchführt.
  2. validationErrors[] gibt Fehler an, die die Anfrage ungültig machen oder deren Behebung unmöglich machen, wenn solvingMode der Anfrage auf VALIDATE_ONLY festgelegt ist. Im normalen DEFAULT_SOLVE-Modus werden Validierungsfehler in einer Fehlermeldung anstelle im Antworttext angezeigt. Im VALIDATE_ONLY-Lösungsmodus können mehrere Fehler gleichzeitig gemeldet werden. Das ist nützlich, um Anfragen schnell zu beheben.

Routeneigenschaften

Jeder routes[]-Eintrag ist eine ShipmentRoute-Nachricht (REST, gRPC). Jedes ShipmentRoute steht für die Routenzuweisung für ein bestimmtes Fahrzeug aus der Anfrage. Zu den wichtigen ShipmentRoute-Eigenschaften, die sich auf die entsprechende Vehicle beziehen, gehören:

  • vehicleIndex ist der nullbasierte Index der Vehicle in der entsprechenden Anfragenachricht. In REST-Antworten wird diese Eigenschaft weggelassen, wenn der Wert null ist.
  • vehicleStartTime ist die Uhrzeit, zu der das Fahrzeug seine Route beginnen muss.
  • vehicleEndTime ist die voraussichtliche Zeit, zu der das Fahrzeug seine Route beendet.

In einer Antwort sieht routes so aus:

{
  "routes": [
    {
      "vehicleStartTime": "2024-02-13T00:00:00Z",
      "vehicleEndTime": "2024-02-13T00:38:42Z",
      "visits": [
        ...
      ],
      "transitions": [
        ...
      ],
      "metrics": {
        ...
      },
      ...
    }
  ],
  ...
}

Jede ShipmentRoute enthält eine sortierte Liste der visits, die das Fahrzeug zurücklegt. Jede Visit (REST, gRPC) entspricht einer VisitRequest (REST, gRPC) aus der entsprechenden Anfrage. Zu den wichtigen Visit Eigenschaften gehören:

  • shipmentIndex ist der Index der Sendung, zu der dieser Besuch in der entsprechenden Anfrage gehört, beginnend mit 0.
  • isPickup ist „wahr“, wenn es sich bei einem Besuch um eine Abholung handelt, und „falsch“, wenn es sich um eine Lieferung handelt. In REST-Antworten wird diese Eigenschaft weggelassen, wenn der Wert „false“ ist.
  • visitRequestIndex ist der nullbasierte Index der VisitRequest aus Shipment.pickups oder Shipment.deliveries in der entsprechenden Anfrage, die die Visit darstellt. In REST-Antworten wird dieses Attribut weggelassen, wenn der Wert null ist.
  • startTime ist die voraussichtliche Uhrzeit des Besuchs.
  • loadDemands ordnet den Ladetyp der Lademenge zu, die zum Ausführen der Visit erforderlich ist. Bei Zustellfahrten sind die Ladungsmengen negativ, was bedeutet, dass Ladung aus dem Fahrzeug entfernt wird.

Ein Beispiel für Visit sieht so aus:

{
  "routes": [
    {
      ...
      "visits": [
        {
          "isPickup": true,
          "startTime": "2024-02-13T00:00:00Z",
          "detour": "0s"
        },
        ...
      ],
    },
    ...
  ],
  ...
}

Jede ShipmentRoute enthält eine sortierte Liste von transitions, die Fahrten zwischen visits für ein bestimmtes Fahrzeug darstellen. Zu den wichtigen Transition-Nachrichteneigenschaften (REST, gRPC) gehören:

  • startTime ist der Zeitpunkt, zu dem das Fahrzeug mit der Umstellung beginnt.
  • travelDuration ist die Dauer, während der das Fahrzeug fahren muss, um den Übergang abzuschließen.
  • travelDistanceMeters ist die Entfernung in Metern, die das Fahrzeug zurücklegen muss, um die Umstellung abzuschließen.
  • trafficInfoUnavailable gibt an, ob für die Umstellung Traffic-Daten verfügbar sind.
  • waitDuration steht für die Inaktivitätszeit, die das Fahrzeug verbringt, bevor es die nächste Visit starten kann. Das kann aufgrund der start_time der folgenden Visit geschehen.
  • totalDuration ist die Gesamtdauer des Übergangs, einschließlich Fahrt-, Warte-, Pausen- und Verzögerungszeiten.
  • vehicleLoadsordnet den Ladetyp der Ladung zu, die während dieses Übergangs vom Fahrzeug befördert wird.

Ein Beispiel für Transition sieht so aus:

{
  "routes": [
    {
      ...
      "transitions": [
        ...
        {
          "travelDuration": "1171s",
          "travelDistanceMeters": 9004,
          "waitDuration": "0s",
          "totalDuration": "1171s",
          "startTime": "2024-02-13T00:00:00Z"
        },
        ...
      ],
      ...
    }
  ],
  ...
}

Weitere Informationen zur Beziehung zwischen vists und transitions finden Sie unter Optimierung der Abhol- und Lieferstoppreihenfolge und in der Referenzdokumentation zu ShipmentRoute (REST, gRPC). Weitere Informationen zu den Eigenschaften routePolyline und routeToken einer Transition-Nachricht finden Sie unter Übergangspolylinien und Routentokens.

Messwerteigenschaften

Die Metrics-Nachricht (REST, gRPC) fasst die gesamte Lösung zusammen. Zu den wichtigen Metrics-Properties gehören:

  • totalCost sind die Gesamtkosten für die Ausführung der Routen. Weitere Informationen zu Kosten finden Sie unter Parameter des Kostenmodells.
  • usedVehicleCount ist die Gesamtzahl der in der Lösung verwendeten Fahrzeuge. Fahrzeuge können leere Routen haben, wenn der Optimierer feststellt, dass ihre Nutzung nicht erforderlich ist.
  • skippedMandatoryShipmentCount ist die Anzahl der übersprungenen Sendungen, die „erforderlich“ sind. Für eine obligatorische Sendung wird kein penaltyCost angegeben, der anfällt, wenn die Sendung übersprungen wird. Erforderliche Sendungen können trotzdem übersprungen werden, wenn ihre Leistung unter den angegebenen Einschränkungen nicht möglich ist. Weitere Informationen zu Kosten finden Sie unter Kostenmodellparameter.

Zusätzliche Messwerte werden als AggregatedMetrics-Nachrichten (REST, gRPC) erfasst. Der Nachrichtentyp AggregatedMetrics wird für die Property Metrics.aggregatedRouteMetrics und für die Property ShipmentRoute.metrics verwendet. Metrics.aggregatedRouteMetrics enthält Messwerte, die für alle ShipmentRoutes in der OptimizeToursResponse aggregiert wurden. Jede ShipmentRoute.metrics-Property enthält Messwerte für diese spezifische ShipmentRoute.

Zu den wichtigen AggregatedMetrics-Eigenschaften gehören:

  • performedShipmentCount ist die Anzahl der Sendungen, die von Fahrzeugen auf ihren gesamten Routen ausgeführt werden.
  • travelDuration ist die Gesamtzeit, die die Fahrzeuge auf ihren Routen unterwegs sind.
  • waitDuration ist die Gesamtzeit, die die Fahrzeuge beim Durchfahren ihrer Routen warten.
  • delayDuration ist die Gesamtverzögerungszeit für die Fahrzeuge. Dieser Wert ist normalerweise null, es sei denn, in der Anfrage werden TransitionAttributes verwendet.
  • breakDuration ist die Gesamtzeit, die die Fahrzeuge während der Fahrten in Pausen verbringen.
  • visitDuration ist die Gesamtzeit, die die Fahrzeuge für Besuche während der Ausführung ihrer Routen aufwenden. Dies ist die Summe aller VisitRequest.duration-Werte für VisitRequests, die den Visits entsprechen, die dem betreffenden Fahrzeug zugewiesen sind.
  • totalDuration ist die Gesamtdauer, die für die Ausführung der Strecken der Fahrzeuge erforderlich ist.
  • travelDistanceMeters ist die Gesamtstrecke, die die Fahrzeuge bei der Ausführung ihrer Routen zurückgelegt haben.
  • maxLoads ordnet Ladekapazitäten der maximalen Ladung zu, die die Fahrzeuge an jedem Punkt ihrer Routen befördern.

Eine Metrics-Nachricht sieht so aus:

{
  "routes": [
    ...
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 1,
      "travelDuration": "2322s",
      "waitDuration": "0s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "0s",
      "totalDuration": "2322s",
      "travelDistanceMeters": 18603
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2024-02-13T00:00:00Z",
    "latestVehicleEndTime": "2024-02-13T00:38:42Z",
    "totalCost": 18.603,
    "costs": {
      "model.vehicles.cost_per_kilometer": 18.603
    }
  }
}

Vollständiges Beispiel

Eine vollständige Beispielantwort für die Anfrage aus Eine Anfrage erstellen sieht so aus:

{
  "routes": [
    {
      "vehicleStartTime": "2024-02-13T00:00:00Z",
      "vehicleEndTime": "2024-02-13T00:38:42Z",
      "visits": [
        {
          "isPickup": true,
          "startTime": "2024-02-13T00:00:00Z",
          "detour": "0s"
        },
        {
          "startTime": "2024-02-13T00:19:31Z",
          "detour": "0s"
        }
      ],
      "transitions": [
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2024-02-13T00:00:00Z"
        },
        {
          "travelDuration": "1171s",
          "travelDistanceMeters": 9004,
          "waitDuration": "0s",
          "totalDuration": "1171s",
          "startTime": "2024-02-13T00:00:00Z"
        },
        {
          "travelDuration": "1151s",
          "travelDistanceMeters": 9599,
          "waitDuration": "0s",
          "totalDuration": "1151s",
          "startTime": "2024-02-13T00:19:31Z"
        }
      ],
      "metrics": {
        "performedShipmentCount": 1,
        "travelDuration": "2322s",
        "waitDuration": "0s",
        "delayDuration": "0s",
        "breakDuration": "0s",
        "visitDuration": "0s",
        "totalDuration": "2322s",
        "travelDistanceMeters": 18603
      },
      "routeCosts": {
        "model.vehicles.cost_per_kilometer": 18.603
      },
      "routeTotalCost": 18.603
    }
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 1,
      "travelDuration": "2322s",
      "waitDuration": "0s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "0s",
      "totalDuration": "2322s",
      "travelDistanceMeters": 18603
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2024-02-13T00:00:00Z",
    "latestVehicleEndTime": "2024-02-13T00:38:42Z",
    "totalCost": 18.603,
    "costs": {
      "model.vehicles.cost_per_kilometer": 18.603
    }
  }
}