Yanıtı yorumlama

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

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

  • routes[], atanmış gönderimleriyle birlikte her bir araç için rotalardır. Her Route, söz konusu bağımsız rotanın özelliklerini yansıtan metrikleri içerir.
  • metrics, tüm araçlar ve rota planları genelinde yanıtın tamamı için toplu metriklerdir. Üst düzey metrikler, tüm Rotalar genelinde toplanan değerlerle birlikte Rota başına metriklerle aynı özellikleri içerir.

Optimizasyon sonuçlarına bağlı olarak bazı özellikler her zaman doldurulmayabilir:

  1. skippedShipments[], herhangi bir aracın gerçekleştirdiği gönderimleri listeler. Bir gönderim, belirtilen kısıtlamalar dahilinde gerçekleştirilemiyorsa veya gönderimi gerçekleştirme maliyeti ceza maliyetini aşıyorsa atlanabilir. Örneğin, bir gönderinin teslim alma veya teslimat süresi çok dar bir timeWindow değerine sahipse bir aracın gerekli zaman aralığı içinde ziyareti gerçekleştirmesi mümkün olmayabilir veya uygun maliyetli olmayabilir.
  2. validationErrors[], isteğin solvingMode değeri VALIDATE_ONLY olarak ayarlandığında isteği geçersiz veya çözülmesi imkansız hale getiren 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ümleme modunun, aynı anda birden fazla hatayı bildirebileceğini ve bu, isteklerde hızlı hata ayıklamak için faydalı olduğunu unutmayın.

Rota özellikleri

Her routes[] girişi bir ShipmentRoute iletisidir (REST, gRPC). Her ShipmentRoute, istekteki belirli bir araç için rota atamasını temsil eder. Karşılık gelen 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 rotaya başlaması gereken zamandır.
  • vehicleEndTime, aracın rotasını tamamlaması beklenen süredir.

Yanıtta routes şöyle 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ı visits listesi içerir. Her Visit (REST, gRPC), ilgili istekte bir VisitRequest (REST, gRPC) temsil eder. Önemli Visit özellikleri şunları içerir:

  • shipmentIndex, bu ziyaretin ilgili istekte ait olduğu gönderimin sıfır tabanlı dizinidir.
  • isPickup değeri, ziyaret teslim alma olduğunda doğru, teslimat ise yanlıştır. Değer yanlış olduğunda REST yanıtları bu özelliği atlar.
  • visitRequestIndex, Visit ile temsil edilen ilgili istekteki VisitRequest öğesinin Shipment.pickups veya Shipment.deliveries sıfır tabanlı dizinidir. Değer sıfır olduğunda REST yanıtları bu özelliği atlar.
  • startTime, ziyaretin başlamasının beklendiği zamandır.
  • loadDemands, yükleme türünü Visit işlemini tamamlamak için talep edilen yükleme miktarıyla eşler. Yük miktarları, teslimat ziyaretleri için negatiftir ve araçtan kaldırılan yükü temsil eder.

Örnek bir Visit aşağıdaki gibi 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ındaki seyahati temsil eden sıralı 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 seyahat 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ılabilir olup olmadığını gösterir.
  • waitDuration, aracın bir sonraki Visit aracına geçmeden önce beklediği boşta kalma süresini temsil eder. Bu, aşağıdaki Visit hükümlerinin start_time sonucu olabilir.
  • totalDuration; seyahat, bekleme, mola ve gecikme süreleri dahil olmak üzere geçişin toplam süresidir.
  • vehicleLoads, yükleme türünü bu geçiş sırasında aracın taşıyacağı yük miktarıyla eşler.

Örnek bir Transition aşağıdaki gibi 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, Teslim Alma ve Teslimat Durdurma Siparişi Optimizasyonu bölümünde ve ShipmentRoute referans belgelerinde (REST, gRPC) açıklanmıştır.

Metrik özellikleri

Metrics mesajı (REST, gRPC) tüm çözümü özetler. Bazı önemli Metrics özellikleri şunlardır:

  • totalCost, rotaların tamamlanması için tahakkuk eden toplam maliyettir. Maliyet Modeli Parametreleri bölümünde maliyetler hakkında daha fazla bilgi edinebilirsiniz.
  • usedVehicleCount, çözümde kullanılan toplam taşıt sayısıdır. Optimize Edici, kullanımlarının gereksiz olduğuna karar verirse araçların boş rotaları olabilir.
  • skippedMandatoryShipmentCount, "zorunlu" olan atlanan gönderimlerin sayısıdır. Zorunlu gönderimde, gönderim atlanırsa gerçekleşecek bir penaltyCost belirtilmez. Performansları belirtilen kısıtlamalar dahilinde uygun değilse zorunlu gönderimler atlayabilirsiniz. Maliyet Modeli Parametreleri bölümünde maliyetler hakkında daha fazla bilgi edinebilirsiniz.

Ek metrikler, AggregatedMetrics mesajları (REST, gRPC) olarak raporlanır. AggregatedMetrics mesaj türü Metrics.aggregatedRouteMetrics mülkü için kullanılır ve ShipmentRoute.metrics mülkü Metrics.aggregatedRouteMetrics için OptimizeToursResponse içindeki tüm ShipmentRoute öğelerinden toplanan metrikleri içerir. Her ShipmentRoute.metrics mülkü, söz konusu ShipmentRoute ile ilgili metrikleri içerir.

Önemli AggregatedMetrics özellikleri şunlardır:

  • performedShipmentCount, araçların tüm rotalarında gerçekleştirdiği gönderim sayısıdır.
  • travelDuration, araçların rotalarını tamamlarken toplu taşımada geçirdiği toplam süredir.
  • waitDuration, araçların rotalarını tamamlarken beklediği toplam süredir.
  • delayDuration, araçlar için toplam gecikme süresidir. İstekte TransitionAttributes kullanılmadığı sürece bu genellikle sıfırdır.
  • breakDuration, araçların rotalarını tamamlarken molalarda geçirdikleri 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'lere karşılık gelen VisitRequest öğeleri 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ükleme türlerini araçların rotaları üzerinde herhangi bir noktada taşıdıkları maksimum yük miktarıyla eşler.

Ö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
    }
  }
}

Eksiksiz örnek

Create a Request (İstek Oluşturma) tarafından yapılan isteğe ilişkin örnek yanıtın eksiksiz bir örneği şöyledir:

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