Antwort interpretieren

Die Routenoptimierungs-API gibt Routen für Fahrzeuge in der entsprechenden Anfrage zurück. Lieferungen sind Fahrzeugen zugewiesen oder können übersprungen werden, der Anfrageeigenschaften.

Eine OptimizeToursResponse-Nachricht (REST, gRPC) hat zwei übergeordnete Hauptebene Eigenschaften:

  • routes[] sind die Routen für jedes Fahrzeug mit den zugewiesenen Sendungen. Jedes Route enthält Messwerte, die die Eigenschaften der jeweiligen Route widerspiegeln.
  • metrics sind aggregierte Messwerte für die gesamte Antwort über alle Fahrzeugen und Routenplänen. Messwerte oberster Ebene enthalten dieselben Eigenschaften wie Routenmesswerte mit für alle Routen aggregierten Werten.

Einige Eigenschaften werden je nach Optimierungsergebnissen möglicherweise nicht immer ausgefüllt:

  1. skippedShipments[] listet Sendungen auf, die von keinem Fahrzeug durchgeführt werden. Eine Sendung kann übersprungen werden, wenn sie nicht innerhalb der angegebenen oder die Versandkosten die Strafkosten übersteigen. Zum Beispiel, wenn die Abholung oder Lieferung einer Sendung timeWindow es möglicherweise nicht möglich oder kostengünstig ist, den Besuch im erforderlichen Zeitfenster durchführen.
  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 treten Validierungsfehler auf in einer Fehlermeldung statt im Antworttext angezeigt. Beachten Sie, dass Der VALIDATE_ONLY-Lösungsmodus kann mehrere Fehler gleichzeitig melden, was für die schnelle Fehlerbehebung bei Anfragen.

Routeneigenschaften

Jeder routes[]-Eintrag ist eine ShipmentRoute-Nachricht (REST, gRPC). Jedes ShipmentRoute steht für die Routenzuweisung für ein bestimmtes Fahrzeug von der Anfrage. Wichtige ShipmentRoute-Properties, die für die zugehörigen Vehicle umfassen:

  • vehicleIndex ist der nullbasierte Index von Vehicle im entsprechenden Anfragenachricht. Bei REST-Antworten wird dieses Attribut weggelassen, wenn der Wert null ist.
  • vehicleStartTime ist der Zeitpunkt, zu dem das Fahrzeug mit seiner 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 von visits, die das Fahrzeug abgeschlossen ist. Jede Visit (REST, gRPC) entspricht einer VisitRequest (REST, gRPC) aus der entsprechenden Anfrage. Wichtig: Visit Zu den Properties gehören:

  • shipmentIndex ist der nullbasierte Index der Sendung, zu der dieser Besuch gehört. in die entsprechende Anfrage ein.
  • isPickup ist „true“, wenn ein Besuch ein Abholservice ist, und „false“, wenn ein Besuch ein Auslieferung. REST-Antworten lassen dieses Attribut weg, 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. REST-Antworten lassen dieses Attribut weg, wenn die Wert Null ist.
  • startTime ist die Uhrzeit, zu der der Besuch voraussichtlich beginnen wird.
  • loadDemands ordnet den Ladetyp der für den Abschluss des Vorgangs angeforderten Lademenge zu. Visit. Die Ladungsbeträge sind bei Lieferbesuchen negativ und stellen die Last dar. aus dem Fahrzeug entfernt wird.

Ein Visit-Beispiel sieht so aus:

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

Jede ShipmentRoute enthält eine geordnete Liste von transitions, die Fahrt zwischen visits für ein bestimmtes Fahrzeug. Wichtige Nachricht zu Transition Zu den Attributen (REST, gRPC) gehören:

  • startTime ist der Zeitpunkt, zu dem das Fahrzeug mit der Ausführung des Fahrzeugs beginnt, zu übertragen.
  • 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 zu übertragen.
  • waitDuration steht für die Leerlaufzeit, die das Fahrzeug warten muss, bevor es möglich ist Start des nächsten Visit. Dies kann am start_time des Follower von Visit
  • totalDuration ist die Gesamtdauer der Umstellung, einschließlich Fahrtdauer, Warte-, Pausen- und Verspätungszeiten.
  • vehicleLoadsordnet den Ladetyp der Ladungsmenge zu, die das Fahrzeug während dieses Übergangs geladen hat.

Ein Beispiel für Transition sieht so aus:

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

Die Beziehung zwischen vists und transitions wird unter Optimierung von Abhol- und Lieferbestellungen sowie in der Referenzdokumentation zu ShipmentRoute (REST, gRPC)

Messwerteigenschaften

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

  • totalCost sind die Gesamtkosten, die für die Fertigstellung der Routen anfallen. Mehr erfahren zu Kosten in Kostenmodellparametern.
  • 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, „Obligatorisch“. In einer obligatorischen Sendung ist keine penaltyCost angegeben, die anfällt, wenn die Lieferung übersprungen wird. Obligatorische Lieferungen können weiterhin werden übersprungen, wenn ihre Leistung unter bestimmten Einschränkungen nicht realisierbar ist. Weitere Informationen zu Kosten finden Sie unter Kostenmodellparameter.

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

Wichtige AggregatedMetrics-Properties sind:

  • performedShipmentCount ist die Anzahl der Sendungen, die von Fahrzeugen ausgeführt werden auf allen Routen ansehen.
  • travelDuration ist die Gesamtzeit, die die Fahrzeuge für die Fahrten auf ihren Routen benötigen.
  • waitDuration ist die Gesamtzeit, die die Fahrzeuge am Ende warten deren Routen.
  • delayDuration ist die Gesamtverzögerungszeit der Fahrzeuge. Dies ist normalerweise Null, es sei denn, TransitionAttributes werden in der Anfrage verwendet.
  • breakDuration ist die Gesamtzeit, die die Fahrzeuge in Pausen verbringen, während ihre Routen vervollständigen.
  • visitDuration ist die Gesamtzeit, die die Fahrzeuge mit Besuchen verbringen, während ihre Routen vervollständigen. Das ist die Summe aller VisitRequest.duration-Werte für VisitRequests, die Visits entsprechen dem entsprechenden Fahrzeug zugewiesen ist.
  • totalDuration ist die Gesamtdauer, die für die Ausführung der Strecken der Fahrzeuge erforderlich ist.
  • travelDistanceMeters ist die Gesamtstrecke, die die Fahrzeuge zurückgelegt haben, während ihre Routen vervollständigen.
  • maxLoads ordnet die Ladetypen dem maximalen Ladevolumen zu, das vom auf ihren Routen nutzen.

Eine Metrics-Nachricht sieht beispielsweise 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 auf die Anfrage von Compose a Request sieht so aus: wie:

{
  "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
    }
  }
}