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 mesajının (REST, gRPC) iki temel üst düzey özelliği vardır:

  • routes[], atanmış gönderimleri olan her aracın 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 toplu metriklerdir. Üst düzey metrikler, Rota başına metriklerle aynı özellikleri içerir ve değerler tüm Rotalar genelinde toplanır.

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

  1. skippedShipments[], hiçbir araç tarafından yapılmayan gönderileri listeler. Bir gönderi, belirtilen kısıtlamalar dahilinde gerçekleştirilemezse veya gönderim bedelinin ceza maliyetini aşarsa atlanabilir. Örneğin, bir gönderinin teslim alma veya teslimat süresi çok dar timeWindow ise aracın gerekli zaman aralığında ziyareti gerçekleştirmesi mümkün olmayabilir ya da düşük maliyetli olabilir.
  2. validationErrors[], isteğin solvingMode değeri VALIDATE_ONLY olarak ayarlandığında isteği geçersiz veya çözülmesi mümkün olmayan 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 aynı anda birden fazla hatayı bildirebileceğini unutmayın. Bu özellik, isteklerde hızlı bir şekilde hata ayıklamak için kullanışlıdır.

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. 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 rotasına başlaması gereken zamandır.
  • vehicleEndTime, aracın rotasını tamamlamasının beklendiği zamandır.

Yanıt olarak routes şöyle görünecek:

{
  "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 istekten bir VisitRequest (REST, gRPC) temsil eder. Önemli Visit özellikleri şunlardır:

  • shipmentIndex, ilgili istekte bu ziyaretin ait olduğu gönderinin sıfır tabanlı dizinidir.
  • Bir ziyaret teslim alma olduğunda isPickup doğru, ziyaret teslim olduğunda ise yanlış değeridir. Değer yanlış olduğunda REST yanıtları 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. Değer sıfır olduğunda REST yanıtları, bu özelliği atlar.
  • startTime, ziyaretin başlaması beklenen zamandır.
  • loadDemands, yükleme türünü Visit işleminin tamamlanması için istenen yükleme miktarıyla eşler. Yük miktarları, teslimat ziyaretleri için negatiftir. Bu değer, taşıttan kaldırılan yükü temsil eder.

Visit örneğini inceleyin:

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

Her ShipmentRoute, belirli bir araç için visits arasındaki seyahati gösteren sıralı bir transitions listesi içerir. Önemli Transition mesajı (REST, gRPC) özellikleri şunları içerir:

  • startTime, aracın geçişi gerçekleştirmeye başlayacağı zamandır.
  • travelDuration, aracın geçişi tamamlamak için gitmesi gereken süredir.
  • travelDistanceMeters, aracın geçişi tamamlamak için kat etmesi gereken metre cinsinden mesafedir.
  • trafficInfoUnavailable, trafik verilerinin geçiş için kullanılabilir olup olmadığını gösterir.
  • 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 aracın taşıdığı yük miktarıyla eşleştirir.

Transition örneğini inceleyin:

{
  "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 ve ShipmentRoute referans belgelerinde (REST, gRPC) açıklanmıştır.

Metrik özellikleri

Metrics mesajı (REST, gRPC) tüm çözümü özetler. Önemli Metrics özelliklerinden bazıları şunlardır:

  • totalCost, rotaları tamamlamak için ödenen toplam maliyettir. Maliyet Modeli Parametreleri bölümünde maliyetler hakkında daha fazla bilgi edinebilirsiniz.
  • usedVehicleCount, çözümde kullanılan toplam araç sayısıdır. Optimize Edici, bu araçların kullanımının gerekli olmadığını belirlerse araçlarda boş rotalar olabilir.
  • skippedMandatoryShipmentCount, "zorunlu" atlanan gönderim sayısıdır. Zorunlu gönderimde, gönderim atlanırsa gerçekleşen penaltyCost belirtilmez. Performansları, belirtilen kısıtlamalar kapsamında uygun değilse zorunlu gönderiler yine de atlanabilir. 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. ShipmentRoute.metrics mülkü ise Metrics.aggregatedRouteMetrics, OptimizeToursResponse kapsamındaki tüm ShipmentRoute üzerinden toplanan metrikleri içerir. Her ShipmentRoute.metrics özelliği, 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 bekledikleri toplam süredir.
  • delayDuration araçlar için toplam gecikme süresidir. İstekte TransitionAttributes kullanılmadığı sürece bu genellikle sıfır olur.
  • 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ı tamamlarken katettikleri 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.

Metrics mesajının görünümü aşağıdaki gibidir:

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

Construct a Request (İstek Oluşturma) işlevinden isteğin eksiksiz bir örnek yanıtı aşağıdaki gibidir:

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