Menafsirkan respons

Route Optimization API menampilkan rute untuk kendaraan dalam permintaan yang sesuai. Pengiriman ditetapkan ke kendaraan, atau mungkin dilewati, bergantung pada properti permintaan.

Pesan OptimizeToursResponse (REST, gRPC) memiliki dua properti level atas utama:

  • routes[] adalah rute untuk setiap kendaraan dengan pengiriman yang ditetapkan. Setiap Route berisi metrik yang mencerminkan properti dari setiap rute tersebut.
  • metrics adalah metrik gabungan untuk seluruh respons, di semua rencana rute dan kendaraan. Metrik tingkat atas berisi properti yang sama seperti metrik per Rute, dengan nilai yang digabungkan di semua Rute.

Beberapa properti mungkin tidak selalu terisi bergantung pada hasil pengoptimalan:

  1. skippedShipments[] mencantumkan pengiriman yang tidak dilakukan oleh kendaraan apa pun. Pengiriman dapat dilewati jika tidak dapat dilakukan dalam batasan yang ditentukan atau jika biaya untuk melakukan pengiriman melebihi biaya penaltinya. Misalnya, jika pengambilan atau pengiriman oleh pengiriman memiliki timeWindow yang sangat sempit, kendaraan mungkin tidak dapat melakukan kunjungan selama periode waktu yang diperlukan atau tidak hemat biaya.
  2. validationErrors[] menentukan error yang membuat permintaan tidak valid atau tidak mungkin diselesaikan saat solvingMode permintaan ditetapkan ke VALIDATE_ONLY. Dalam mode DEFAULT_SOLVE normal, error validasi akan muncul dalam pesan error, bukan isi respons. Perhatikan bahwa mode pemecahan masalah VALIDATE_ONLY dapat melaporkan beberapa error sekaligus, yang berguna untuk men-debug permintaan dengan cepat.

Properti rute

Setiap entri routes[] adalah pesan ShipmentRoute (REST, gRPC). Setiap ShipmentRoute mewakili penetapan rute untuk kendaraan tertentu dari permintaan tersebut. Properti ShipmentRoute penting yang terkait dengan Vehicle yang sesuai mencakup:

  • vehicleIndex adalah indeks berbasis nol dari Vehicle dalam pesan permintaan yang sesuai. Respons REST menghilangkan properti ini jika nilainya nol.
  • vehicleStartTime adalah waktu saat kendaraan harus memulai rutenya.
  • vehicleEndTime adalah waktu saat kendaraan diperkirakan akan menyelesaikan rute.

Dalam respons, routes akan terlihat seperti:

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

Setiap ShipmentRoute menyertakan daftar visits yang diurutkan yang akan diselesaikan oleh kendaraan. Setiap Visit (REST, gRPC) mewakili VisitRequest (REST, gRPC) dari permintaan yang sesuai. Properti Visit penting mencakup:

  • shipmentIndex adalah indeks berbasis nol pengiriman yang memiliki kunjungan ini dalam permintaan yang sesuai.
  • isPickup bernilai benar (true) jika kunjungan adalah pengambilan dan salah (false) jika kunjungan adalah pengiriman. Respons REST menghilangkan properti ini jika nilainya salah.
  • visitRequestIndex adalah indeks berbasis nol untuk VisitRequest dari Shipment.pickups atau Shipment.deliveries dalam permintaan yang sesuai yang diwakili oleh Visit. Respons REST menghilangkan properti ini jika nilainya nol.
  • startTime adalah waktu kunjungan yang diharapkan akan dimulai.
  • loadDemands memetakan jenis pemuatan ke jumlah pemuatan yang diminta untuk menyelesaikan Visit. Jumlah pemuatan negatif untuk kunjungan pengiriman, yang merepresentasikan beban yang dihapus dari kendaraan.

Contoh Visit terlihat seperti ini:

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

Setiap ShipmentRoute menyertakan daftar transitions yang diurutkan, yang mewakili perjalanan antara visits untuk kendaraan tertentu. Properti pesan Transition penting (REST, gRPC) mencakup:

  • startTime adalah waktu saat kendaraan akan mulai melakukan transisi.
  • travelDuration adalah durasi yang harus ditempuh kendaraan untuk menyelesaikan transisi.
  • travelDistanceMeters adalah jarak dalam meter yang harus ditempuh kendaraan untuk menyelesaikan transisi.
  • trafficInfoUnavailable menunjukkan apakah data traffic tersedia untuk transisi.
  • waitDuration merepresentasikan waktu tidak ada aktivitas yang dihabiskan kendaraan untuk menunggu sebelum dapat memulai Visit berikutnya. Hal ini mungkin terjadi karena start_time dari Visit berikut.
  • totalDuration adalah total durasi transisi, termasuk waktu perjalanan, tunggu, istirahat, dan tunda.
  • vehicleLoads memetakan jenis beban ke jumlah beban yang dibawa oleh kendaraan selama transisi ini.

Contoh Transition terlihat seperti ini:

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

Hubungan antara vists dan transitions dijelaskan dalam Pengoptimalan Pemberhentian Pesanan Pengambilan dan Pengiriman, serta dalam dokumentasi referensi ShipmentRoute (REST, gRPC).

Properti metrik

Pesan Metrics (REST, gRPC) merangkum seluruh solusi. Beberapa properti Metrics penting mencakup:

  • totalCost adalah total biaya yang dikeluarkan untuk menyelesaikan rute. Baca selengkapnya tentang biaya di Parameter Model Biaya.
  • usedVehicleCount adalah jumlah total kendaraan yang digunakan dalam solusi. Kendaraan mungkin memiliki rute kosong saat pengoptimal menentukan bahwa penggunaannya tidak diperlukan.
  • skippedMandatoryShipmentCount adalah jumlah pengiriman yang dilewati yang "wajib". Pengiriman wajib tidak menentukan penaltyCost yang disertakan jika pengiriman dilewati. Pengiriman wajib tetap dapat dilewati jika performanya tidak memungkinkan berdasarkan batasan yang ditentukan. Baca selengkapnya tentang biaya di Parameter Model Biaya.

Metrik tambahan dilaporkan sebagai pesan AggregatedMetrics (REST, gRPC). Jenis pesan AggregatedMetrics digunakan untuk properti Metrics.aggregatedRouteMetrics dan untuk properti ShipmentRoute.metrics, Metrics.aggregatedRouteMetrics, berisi metrik yang digabungkan dari semua ShipmentRoute dalam OptimizeToursResponse. Setiap properti ShipmentRoute.metrics berisi metrik untuk ShipmentRoute tertentu tersebut.

Properti AggregatedMetrics penting mencakup:

  • performedShipmentCount adalah jumlah pengiriman yang dilakukan oleh kendaraan di seluruh rutenya.
  • travelDuration adalah total waktu yang dihabiskan kendaraan dalam pengiriman saat menyelesaikan rutenya.
  • waitDuration adalah total waktu yang dihabiskan kendaraan untuk menunggu saat menyelesaikan rute.
  • delayDuration adalah total waktu tunda untuk kendaraan. Nilainya biasanya nol kecuali jika TransitionAttributes digunakan dalam permintaan.
  • breakDuration adalah total waktu yang dihabiskan kendaraan saat istirahat saat menyelesaikan rutenya.
  • visitDuration adalah total waktu yang dihabiskan kendaraan untuk melakukan kunjungan saat menyelesaikan rutenya. Ini pada dasarnya adalah jumlah semua nilai VisitRequest.duration untuk VisitRequest yang terkait dengan Visit yang ditetapkan ke kendaraan yang berlaku.
  • totalDuration adalah total durasi yang diperlukan untuk menyelesaikan rute kendaraan.
  • travelDistanceMeters adalah total jarak yang ditempuh kendaraan saat menyelesaikan rutenya.
  • maxLoads memetakan jenis beban ke jumlah beban maksimum yang dibawa oleh kendaraan di titik mana pun pada rutenya.

Contoh pesan Metrics terlihat seperti ini:

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

Contoh lengkap

Contoh respons lengkap untuk permintaan dari Membuat Permintaan akan terlihat seperti:

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