Antwort interpretieren

Entwickler im Europäischen Wirtschaftsraum (EWR)

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

Eine OptimizeToursResponse-Nachricht (REST, gRPC) hat zwei Haupteigenschaften auf oberster Ebene:

  • routes[] sind die Routen für die einzelnen Fahrzeuge mit den zugewiesenen Sendungen. Jeder Route enthält Messwerte, die die Eigenschaften der jeweiligen Route widerspiegeln.
  • metrics sind aggregierte Messwerte für die gesamte Antwort über alle Fahrzeuge und Routenpläne hinweg. Messwerte der obersten Ebene enthalten dieselben Eigenschaften wie Messwerte pro Route, wobei die Werte über alle Routen hinweg aggregiert werden.

Einige Eigenschaften sind je nach Optimierungsergebnissen möglicherweise nicht immer verfügbar:

  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 erfolgen kann oder wenn die Kosten für den Versand die Kosten für die Strafe übersteigen. Wenn beispielsweise für die Abholung oder Zustellung einer Sendung ein sehr enges timeWindow festgelegt ist, ist es möglicherweise nicht möglich oder kosteneffizient, dass ein Fahrzeug den Besuch innerhalb des erforderlichen Zeitfensters durchführt.
  2. validationErrors[] gibt Fehler an, die die Anfrage ungültig oder unlösbar machen, wenn solvingMode der Anfrage auf VALIDATE_ONLY festgelegt ist. Im normalen DEFAULT_SOLVE-Modus werden Validierungsfehler in einer Fehlermeldung anstelle des Antworttexts angezeigt. Im VALIDATE_ONLY-Modus können mehrere Fehler gleichzeitig gemeldet werden. Das ist nützlich, um Anfragen schnell zu debuggen.

Routeneigenschaften

Jeder routes[]-Eintrag ist eine ShipmentRoute-Nachricht (REST, gRPC). Jedes ShipmentRoute-Objektliteral stellt die Routenzuweisung für ein bestimmtes Fahrzeug aus der Anfrage dar. Wichtige ShipmentRoute-Eigenschaften, die sich auf die entsprechende Vehicle beziehen, sind:

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

In einer Antwort sieht routes so aus:

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

Jeder ShipmentRoute enthält eine geordnete Liste von visits, die das Fahrzeug ausführen wird. Jede Visit (REST, gRPC) steht für eine VisitRequest (REST, gRPC) aus der entsprechenden Anfrage. Wichtige Visit-Eigenschaften sind:

  • shipmentIndex ist der nullbasierte Index der Sendung, zu der dieser Besuch in der entsprechenden Anfrage gehört.
  • isPickup ist „true“, wenn es sich bei einem Besuch um eine Abholung handelt, und „false“, wenn es sich um eine Lieferung handelt. In REST-Antworten wird diese Eigenschaft ausgelassen, wenn der Wert „false“ ist.
  • visitRequestIndex ist der nullbasierte Index des VisitRequest aus Shipment.pickups oder Shipment.deliveries in der entsprechenden Anfrage, die von Visit dargestellt wird. In REST-Antworten wird dieses Attribut weggelassen, wenn der Wert null ist.
  • startTime ist die Uhrzeit, zu der der Besuch voraussichtlich beginnt.
  • loadDemands ordnet den Lasttyp der erforderlichen Lastmenge zu, um die Visit abzuschließen. Die Lademengen sind für Lieferbesuche negativ, da die Ladung aus dem Fahrzeug entfernt wird.

Ein Beispiel für Visit:

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

Jeder ShipmentRoute enthält eine geordnete Liste von transitions, die die Fahrt zwischen visits für ein bestimmtes Fahrzeug darstellen. Wichtige Transition-Nachrichteneigenschaften (REST, gRPC):

  • startTime ist der Zeitpunkt, zu dem das Fahrzeug mit der Umstellung beginnt.
  • travelDuration ist die Dauer, die das Fahrzeug benötigt, um die Übergangsphase abzuschließen.
  • travelDistanceMeters ist die Entfernung in Metern, die das Fahrzeug zurücklegen muss, um den Übergang abzuschließen.
  • trafficInfoUnavailable gibt an, ob Traffic-Daten für die Umstellung verfügbar sind.
  • waitDuration steht für die Leerlaufzeit, die das Fahrzeug mit Warten verbringt, bevor es mit dem nächsten Visit beginnen kann. Das kann folgende Visit aufgrund von start_time haben:
  • totalDuration ist die Gesamtdauer des Übergangs, einschließlich Reise-, Warte-, Pausen- und Verzögerungszeiten.
  • vehicleLoads ordnet den Lasttyp der vom Fahrzeug während dieses Übergangs transportierten Lastmenge zu.

Ein Beispiel für Transition:

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

Weitere Informationen zum Verhältnis zwischen vists und transitions finden Sie unter Optimierung der Reihenfolge von Abhol- und Zustellstopps und in der ShipmentRoute-Referenzdokumentation (REST, gRPC). Weitere Informationen zu den Attributen routePolyline und routeToken einer Transition-Nachricht finden Sie unter Übergangspolylinien und Routen-Tokens.

Messwerteigenschaften

Die Metrics-Nachricht (REST, gRPC) fasst die gesamte Lösung zusammen. Einige wichtige Metrics-Attribute sind:

  • totalCost sind die Gesamtkosten für die Durchfü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 haben möglicherweise leere Routen, wenn der Optimierer feststellt, dass ihre Verwendung nicht erforderlich ist.
  • skippedMandatoryShipmentCount ist die Anzahl der übersprungenen Sendungen, die „obligatorisch“ sind. Bei einer obligatorischen Sendung wird keine penaltyCost angegeben, die anfällt, wenn die Sendung übersprungen wird. Pflichtlieferungen können weiterhin übersprungen werden, wenn ihre Leistung unter den angegebenen Einschränkungen nicht möglich ist. Weitere Informationen zu Kosten finden Sie unter Parameter des Kostenmodells.

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

Wichtige AggregatedMetrics-Eigenschaften:

  • performedShipmentCount ist die Anzahl der Sendungen, die von Fahrzeugen auf ihren gesamten Routen durchgeführt wurden.
  • travelDuration ist die Gesamtzeit, die die Fahrzeuge während der Routen zurücklegen.
  • waitDuration ist die Gesamtzeit, die die Fahrzeuge während der Routen zurücklegen.
  • delayDuration ist die Gesamtverzögerungszeit für die Fahrzeuge. Dieser Wert ist in der Regel null, sofern in der Anfrage keine TransitionAttributes verwendet werden.
  • breakDuration ist die Gesamtzeit, die die Fahrzeuge während der Routen in Pausen verbringen.
  • visitDuration ist die Gesamtzeit, die die Fahrzeuge für Besuche während der Routen benötigen. Dies ist im Grunde die Summe aller VisitRequest.duration-Werte für VisitRequests, die den Visits entsprechen, die dem entsprechenden Fahrzeug zugewiesen sind.
  • totalDuration ist die Gesamtdauer, die für die Routen der Fahrzeuge erforderlich ist.
  • travelDistanceMeters ist die Gesamtstrecke, die die Fahrzeuge auf ihren Routen zurückgelegt haben.
  • maxLoads ordnet Ladungstypen dem maximalen Ladungsgewicht zu, das die Fahrzeuge zu einem beliebigen Zeitpunkt auf ihren Routen transportieren.

Eine Beispielnachricht für Metrics 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 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
    }
  }
}