Yanıtı yorumlama

Route Optimization API, ilgili istekteki araçların rotalarını döndürür. Gönderimler araçlara atanır veya isteğin özelliklerine bağlı olarak atlanabilir.

OptimizeToursResponse mesajının (REST, gRPC) iki ana üst düzey özelliği vardır:

  • routes[], her bir aracın atanan kargolarıyla birlikte rotalarıdır. Her Route, ilgili rotanın özelliklerini yansıtan metrikler içerir.
  • metrics, tüm araçlar ve rota planları genelinde yanıtın tamamı için toplanmış metriklerdir. Üst düzey metrikler, rota başına metriklerle aynı özellikleri içerir ve değerleri tüm rotalar genelinde toplanır.

Bazı özellikler, optimizasyon sonuçlarına bağlı olarak her zaman doldurulmayabilir:

  1. skippedShipments[], herhangi bir araç tarafından yapılmayan gönderimleri listeler. Belirtilen kısıtlamalar dahilinde gerçekleştirilemiyorsa veya gönderimi gerçekleştirme maliyeti ceza maliyetini aşıyorsa gönderim atlanabilir. Örneğin, bir gönderinin alınması veya teslim edilmesi için çok dar bir timeWindow varsa bir aracın gerekli zaman aralığında ziyareti gerçekleştirmesi mümkün olmayabilir veya maliyetli olabilir.
  2. validationErrors[], isteğin solvingMode değeri VALIDATE_ONLY olarak ayarlandığında isteği geçersiz kılan veya çözümünü imkansız kılan hataları belirtir. Normal DEFAULT_SOLVE modunda, doğrulama hataları yanıt gövdesi yerine bir hata mesajında görünür. VALIDATE_ONLY Çözüm modunun, isteklerde hızlıca hata ayıklama için yararlı olan birden fazla hatayı tek seferde bildirebileceğini unutmayın.

Rota özellikleri

Her routes[] girişi bir ShipmentRoute mesajıdır (REST, gRPC). Her ShipmentRoute, istekteki belirli bir araca yönelik rota atamasını temsil eder. İlgili Vehicle ile ilgili önemli ShipmentRoute özellikleri şunlardır:

  • vehicleIndex, ilgili istek mesajındaki Vehicle öğesinin sıfır tabanlı dizinidir. Değer sıfır olduğunda REST yanıtları bu özelliği atlar.
  • vehicleStartTime, aracın rotasına başlaması gereken zamandır.
  • vehicleEndTime, aracın rotasını tamamlamasının beklendiği zamandır.

Yanıtlarda routes şu şekilde görünür:

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

Her ShipmentRoute, aracın tamamlayacağı sıralı bir visits listesi içerir. Her Visit (REST, gRPC), ilgili istekteki bir VisitRequest (REST, gRPC) temsil eder. Önemli Visit mülkler arasında şunlar yer alır:

  • shipmentIndex, ilgili istekteki bu ziyaretin ait olduğu gönderinin sıfır tabanlı dizinidir.
  • isPickup, ziyaret teslimat olduğunda yanlış, teslim alma olduğunda doğru değerini alır. REST yanıtları, değer yanlış olduğunda bu özelliği atlar.
  • visitRequestIndex, Visit öğesinin temsil ettiği ilgili istekte Shipment.pickups veya Shipment.deliveries konumundaki VisitRequest öğesinin sıfır tabanlı dizinidir. REST yanıtları, değer sıfır olduğunda bu özelliği atlar.
  • startTime, ziyaretin başlamasının beklendiği zamandır.
  • loadDemands, yükleme türünü Visit işleminin tamamlanması için istenen yükleme miktarıyla eşler. Teslimat ziyaretleri için yük miktarları negatiftir ve araçtan kaldırılan yükü temsil eder.

Visit örneği şu şekilde görünür:

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

Her ShipmentRoute, belirli bir araç için visits arasında yapılan seyahatleri temsil eden sıralı bir transitions listesi içerir. Önemli Transition mesaj (REST, gRPC) özellikleri şunlardır:

  • startTime, aracın geçişi gerçekleştirmeye başlayacağı zamandır.
  • travelDuration, aracın geçişi tamamlamak için kat etmesi gereken süredir.
  • travelDistanceMeters, aracın geçişi tamamlamak için kat etmesi gereken mesafedir (metre cinsinden).
  • trafficInfoUnavailable, geçiş için trafik verilerinin kullanılıp kullanılamayacağını belirtir.
  • waitDuration, aracın bir sonraki Visit başlatılmadan önce beklerken geçirdiği boşta süreyi temsil eder. Bu durum, aşağıdaki Visit içinde belirtilen start_time nedeniyle ortaya çıkabilir.
  • totalDuration; seyahat, bekleme, ara ve gecikme süreleri dahil olmak üzere geçiş sürecinin toplam süresidir.
  • vehicleLoads, yük türünü bu geçiş sırasında araç tarafından taşınan yük miktarıyla eşleştirir.

Transition örneği şu şekilde görünür:

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

vists ile transitions arasındaki ilişki hakkında daha fazla bilgi edinmek için Teslim alma ve Teslimat Durdurma Siparişi Optimizasyonu ve ShipmentRoute referans belgelerini (REST, gRPC) inceleyin. Transition mesajının routePolyline ve routeToken özellikleri hakkında daha fazla bilgi için Geçiş Poli Çizgileri ve Rota Jetonları başlıklı makaleyi inceleyin.

Metrik özellikleri

Metrics mesajı (REST, gRPC), çözümün tamamını özetler. Metrics mülklerinin bazı önemli özellikleri şunlardır:

  • totalCost, rotaların tamamlanmasıyla ilgili toplam maliyettir. Maliyet Modeli Parametreleri bölümünde maliyetler hakkında daha fazla bilgi edinin.
  • usedVehicleCount, çözümde kullanılan toplam araç sayısıdır. Optimize edici, kullanımlarının gereksiz olduğunu belirlediğinde araçların rotaları boş olabilir.
  • skippedMandatoryShipmentCount, "zorunlu" olan atlanan gönderimlerin sayısıdır. Zorunlu gönderimde, gönderim atlanırsa gerçekleşen penaltyCost belirtilmez. Zorunlu gönderimler, performansları belirtilen kısıtlamalar altında mümkün değilse atlanabilir. Maliyet Modeli Parametreleri bölümünde maliyetler hakkında daha fazla bilgi edinin.

Ek metrikler AggregatedMetrics mesajları (REST, gRPC) olarak raporlanır. AggregatedMetrics mesaj türü, Metrics.aggregatedRouteMetrics mülkü ve ShipmentRoute.metrics mülkü için kullanılır. Metrics.aggregatedRouteMetrics, OptimizeToursResponse'daki tüm ShipmentRoute'larda toplanan metrikleri içerir. Her ShipmentRoute.metrics mülkü, ilgili ShipmentRoute için metrikler içerir.

Önemli AggregatedMetrics mülkleri şunlardır:

  • performedShipmentCount, araçların tüm rotalarında gerçekleştirdiği gönderi sayısıdır.
  • travelDuration, araçların rotalarını tamamlarken aktarma merkezlerinde geçirdiği toplam süredir.
  • waitDuration, araçların rotalarını tamamlarken beklerken geçirdiği toplam süredir.
  • delayDuration araçlar için toplam gecikme süresidir. İstekte TransitionAttributes kullanılmadığı sürece bu değer genellikle sıfırdır.
  • breakDuration, araçların rotalarını tamamlarken aralarda geçirdiği toplam süredir.
  • visitDuration, araçların rotalarını tamamlarken ziyaret gerçekleştirmek için harcadığı toplam süredir. Bu, geçerli araca atanan Visit öğelerine karşılık gelen VisitRequest için tüm VisitRequest.duration değerlerinin toplamıdır.
  • totalDuration, araçların rotalarını tamamlamak için gereken toplam süredir.
  • travelDistanceMeters, araçların rotalarını tamamlarken katettiği toplam mesafedir.
  • maxLoads, yük türlerini araçların rota üzerindeki herhangi bir noktada taşıdığı maksimum yük miktarıyla eşleştirir.

Örnek bir Metrics mesajı şu şekilde görünür:

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

Tam örnek

İstek Oluşturma bölümündeki istek için tam örnek yanıt şu şekildedir:

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