Menafsirkan respons Route Optimization API... dengan

Developer Wilayah Ekonomi Eropa (EEA)

Catatan untuk produksi

Agar mudah, panduan ini menggunakan REST dan JSON. Namun, untuk lingkungan produksi, rekomendasi keseluruhannya adalah menggunakan gRPC dan library klien untuk performa yang lebih baik. Untuk mengetahui informasi selengkapnya, lihat library klien Route Optimization API.

Setelah Anda mengirim permintaan di bagian Membuat permintaan pertama Anda, pengoptimal akan menampilkan OptimizeToursResponse. Respons ini adalah rencana rute yang harus diikuti oleh pengemudi Anda. Panduan ini menunjukkan cara membacanya.

Ringkasan rencana rute

Untuk skenario penitipan, pengoptimal menetapkan gunung Bernese dan Chihuahua ke van Anda dan melewati German shepherd. Rencana rute pengemudi Anda adalah sebagai berikut:

  • Mulai shift pukul 07.55 di tempat penitipan anak.
  • Jemput gunung Bernese di dekat Coit Tower pada pukul 08.20.
  • Jemput Chihuahua di South Sunset Playground Park pukul 08.58.
  • Tiba kembali di pusat penitipan anak pada pukul 09.24, dan tunggu hingga jendela pengantaran dibuka pada pukul 09.30.
  • Mengantar Bernese Mountain pukul 09.30.
  • Turunkan Chihuahua pukul 09.35.
  • Selesaikan giliran kerja pada pukul 09.40.

Biaya rencana rute adalah $147,22, termasuk denda $100 karena melewatkan German shepherd.

Untuk memeriksa hasil, bandingkan respons Anda dengan contoh respons lengkap. Hasil Anda mungkin sedikit berbeda karena waktu dan jarak perjalanan bergantung pada data jalan saat ini.

Contoh respons lengkap

{
  "routes": [
    {
      "vehicleStartTime": "2024-02-13T15:55:04Z",
      "vehicleEndTime": "2024-02-13T17:40:00Z",
      "visits": [
        {
          "isPickup": true,
          "startTime": "2024-02-13T16:20:00Z",
          "detour": "0s",
          "shipmentLabel": "Bernese mountain dog",
          "visitType": "PICKUP_SHIPMENT"
        },
        {
          "shipmentIndex": 1,
          "isPickup": true,
          "startTime": "2024-02-13T16:58:12Z",
          "detour": "2600s",
          "shipmentLabel": "Chihuahua",
          "visitType": "PICKUP_SHIPMENT"
        },
        {
          "startTime": "2024-02-13T17:30:00Z",
          "detour": "2297s",
          "shipmentLabel": "Bernese mountain dog",
          "visitType": "DELIVER_SHIPMENT"
        },
        {
          "shipmentIndex": 1,
          "startTime": "2024-02-13T17:35:00Z",
          "detour": "656s",
          "shipmentLabel": "Chihuahua",
          "visitType": "DELIVER_SHIPMENT"
        }
      ],
      "transitions": [
        {
          "travelDuration": "1496s",
          "travelDistanceMeters": 7082,
          "waitDuration": "0s",
          "totalDuration": "1496s",
          "startTime": "2024-02-13T15:55:04Z"
        },
        {
          "travelDuration": "1992s",
          "travelDistanceMeters": 16589,
          "waitDuration": "0s",
          "totalDuration": "1992s",
          "startTime": "2024-02-13T16:25:00Z"
        },
        {
          "travelDuration": "1252s",
          "travelDistanceMeters": 7860,
          "waitDuration": "356s",
          "totalDuration": "1608s",
          "startTime": "2024-02-13T17:03:12Z"
        },
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2024-02-13T17:35:00Z"
        },
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2024-02-13T17:40:00Z"
        }
      ],
      "metrics": {
        "performedShipmentCount": 2,
        "travelDuration": "4740s",
        "waitDuration": "356s",
        "delayDuration": "0s",
        "breakDuration": "0s",
        "visitDuration": "1200s",
        "totalDuration": "6296s",
        "travelDistanceMeters": 31531,
        "performedShipmentPenaltyCostSum": 2000
      },
      "routeCosts": {
        "model.vehicles.cost_per_hour": 47.22
      },
      "routeTotalCost": 47.22,
      "vehicleFullness": {
        "maxFullness": 0.3497777777777778,
        "activeSpan": 0.3497777777777778
      }
    }
  ],
  "skippedShipments": [
    {
      "index": 2,
      "label": "German shepherd",
      "penaltyCost": 100
    }
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 2,
      "travelDuration": "4740s",
      "waitDuration": "356s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "1200s",
      "totalDuration": "6296s",
      "travelDistanceMeters": 31531,
      "performedShipmentPenaltyCostSum": 2000
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2024-02-13T15:55:04Z",
    "latestVehicleEndTime": "2024-02-13T17:40:00Z",
    "totalCost": 147.22,
    "costs": {
      "model.vehicles.cost_per_hour": 47.22,
      "model.shipments.penalty_cost": 100
    }
  }
}
    

Struktur respons

OptimizeToursResponse memiliki objek ShipmentRoute dengan jenis pesan kunjungan dan objek Metrics dengan aggregatedRouteMetrics dan totalCost.

OptimizeToursResponse berisi dua komponen utama:

  • routes: Rencana rute untuk setiap kendaraan di armada Anda, termasuk urutan dan waktu untuk setiap pengambilan dan pengiriman. Anda memiliki satu van, jadi ada satu rencana rute.
  • metrics: Ringkasan seluruh rencana rute, termasuk total biaya, durasi, dan jarak.

Karena pengoptimal melewati German shepherd, respons juga menyertakan skippedShipments.

Bagian berikut menunjukkan tempat untuk menemukan setiap detail ringkasan rencana rute dalam respons.

Kendaraan mana yang menjalankan rute mana?

Pengoptimal menghasilkan rencana rute (array routes) yang sesuai dengan urutan vehicles dalam permintaan Anda.

Kolom vehicleIndex mengidentifikasi setiap kendaraan berdasarkan posisi berbasis nol, yang untuk van Anda adalah 0. Kolom vehicleStartTime dan vehicleEndTime menginstruksikan pengemudi kapan harus memulai dan mengakhiri shift mereka.

Route Optimization API menampilkan stempel waktu dalam UTC, yang ditandai dengan akhiran Z, terlepas dari selisih dalam permintaan Anda. Untuk mendapatkan waktu San Francisco, kurangi 8 jam. Untuk van Anda, shift berjalan dari pukul 07.55 hingga 09.40, seperti yang ditunjukkan dalam contoh kode berikut.

{
"routes": [
    {
    // "vehicleIndex": 0, // Omitted in actual JSON response because it's 0
    "vehicleStartTime": "2024-02-13T15:55:04Z",
    "vehicleEndTime": "2024-02-13T17:40:00Z",
    ...
    }
  ]
  ...
}

Bagaimana urutan penjemputan dan pengantaran?

Dalam setiap rute, array visits berisi setiap pengambilan dan pengiriman untuk kendaraan yang ditetapkan dalam urutan kronologis.

shipmentIndex setiap kunjungan adalah posisi berbasis nol pengiriman dalam permintaan Anda: 0 adalah Bernese mountain dog, dan 1 adalah Chihuahua. Kolom shipmentLabel menampilkan label yang Anda tetapkan untuk setiap pengiriman.

Untuk membedakan antara penjemputan dan pengantaran (atau pengiriman), Anda dapat memeriksa kolom visitType atau isPickup:

  • visitType: Menentukan tindakan kunjungan secara eksplisit.
    • Pengambilan: visitType = "PICKUP_SHIPMENT"
    • Pengiriman: visitType = "DELIVER_SHIPMENT"
  • isPickup: Kolom bantuan boolean.
    • Pengambilan: isPickup = true
    • Pengiriman: isPickup = false (dihilangkan di JSON)

Untuk menentukan urutan peristiwa yang tepat dan perkiraan waktu tiba di setiap lokasi, baca array visits secara berurutan. Tabel berikut menunjukkan tindakan rencana rute berdasarkan urutan dan nilai kolom shipmentIndex, isPickup atau visitType, dan startTime.

Urutan Nilai shipmentIndex Nilai isPickup atau visitType Nilai startTime (UTC) Tindakan
Kunjungan pertama 0 (dihilangkan di JSON) Benar atau PICKUP_SHIPMENT 2024-02-13T16:20:00Z Jemput gunung Bernese pukul 08.20.
Kunjungan kedua 1 Benar atau PICKUP_SHIPMENT 2024-02-13T16:58:12Z Menjemput Chihuahua pukul 08.58.
Kunjungan ketiga 0 (dihilangkan di JSON) False (dihilangkan) atau DELIVER_SHIPMENT 2024-02-13T17:30:00Z Mengantar Bernese Mountain ke pusat penitipan pada pukul 09.30.
Kunjungan keempat 1 False (dihilangkan) atau DELIVER_SHIPMENT 2024-02-13T17:35:00Z Mengantar Chihuahua ke pusat penitipan pukul 09.35.

Contoh kode berikut menunjukkan cara respons memberikan urutan ini:

{
  "routes": [
    {
      "visits": [
        {
          // "shipmentIndex": 0, // Omitted in actual JSON response because it's 0
          "isPickup": true,
          "startTime": "2024-02-13T16:20:00Z",
          "shipmentLabel": "Bernese mountain dog",
          "visitType": "PICKUP_SHIPMENT"
        },
        {
          "shipmentIndex": 1,
          "isPickup": true,
          "startTime": "2024-02-13T16:58:12Z",
          "shipmentLabel": "Chihuahua",
          "visitType": "PICKUP_SHIPMENT"
        },
        {
          // "shipmentIndex": 0, // Omitted in actual JSON response because it's 0
          // "isPickup": false, // Omitted in actual JSON response because it's false
          "startTime": "2024-02-13T17:30:00Z",
          "shipmentLabel": "Bernese mountain dog",
          "visitType": "DELIVER_SHIPMENT"
        },
        {
          "shipmentIndex": 1,
          // "isPickup": false, // Omitted in actual JSON response because it's false
          "startTime": "2024-02-13T17:35:00Z",
          "shipmentLabel": "Chihuahua",
          "visitType": "DELIVER_SHIPMENT"
        }
      ]
    }
  ]
}

Setiap kunjungan juga memiliki visitRequestIndex, yang merupakan posisi berbasis nol dari opsi pengambilan atau pengantaran yang dipilih pengoptimal untuk pengiriman. Setiap dalam skenario ini hanya memiliki satu opsi penjemputan dan satu opsi pengantaran, sehingga visitRequestIndex selalu 0, dan respons akan menghilangkannya.

Apa yang terjadi di antara kunjungan?

Dalam setiap rute, array transitions mencantumkan detail perjalanan antar-kunjungan. Meskipun visits dan transitions adalah daftar yang terpisah, keduanya disisipkan dalam waktu, sebagai berikut:

  1. transitions[0] (Berkendara dari titik awal ke kunjungan pertama)
  2. visits[0] (Kunjungan pertama)
  3. transitions[1] (Mendorong kunjungan kedua setelah kunjungan pertama)
  4. visits[1] (Kunjungan kedua)
  5. ...
  6. visits[N-1] (Kunjungan terakhir, dengan N adalah jumlah total kunjungan)
  7. transitions[N] (Mengemudi dari perhentian terakhir ke tujuan akhir)

Anda dapat mengikuti linimasa rute dengan melihat kolom startTime di kedua array. startTime transisi adalah saat pengemudi mulai melakukan perjalanan, dan startTime kunjungan adalah saat pengemudi memulai penjemputan atau pengantaran.

Setiap transisi menunjukkan perkiraan waktu dan jarak mengemudi antar-lokasi. Tabel berikut memetakan kolom transitions dan visits ke tindakan rute kronologis untuk skenario penitipan.

Urutan Nama kolom Nilai startTime (UTC) Detail Tindakan
Transisi pertama transitions[0] 2024-02-13T15:55:04Z travelDuration: 1496 dtk
travelDistanceMeters: 7082
Berkendara sejauh 7 km selama 25 menit dari pusat penitipan anak untuk menjemput gunung Bernese. Shift dimulai pukul 07.55.
Kunjungan pertama visits[0] 2024-02-13T16:20:00Z shipmentIndex: 0 (dihilangkan di JSON)
isPickup: True
Jemput gunung Bernese mulai pukul 08.20. Kunjungan memerlukan waktu 5 menit.
Transisi kedua transitions[1] 2024-02-13T16:25:00Z travelDuration: 1992s
travelDistanceMeters: 16589
Berkendara sejauh 17 km selama 33 menit dari Coit Tower untuk menjemput Chihuahua mulai pukul 08.25.
Kunjungan kedua visits[1] 2024-02-13T16:58:12Z shipmentIndex: 1
isPickup: True
Menjemput Chihuahua mulai pukul 08.58. Kunjungan memerlukan waktu 5 menit.
Transisi ketiga transitions[2] 2024-02-13T17:03:12Z travelDuration: 1252 dtk
travelDistanceMeters: 7860
waitDuration: 356 dtk
Berkendara sejauh 8 km selama 21 menit dari South Sunset Playground kembali ke pusat penitipan anak mulai pukul 09.03. Tiba pukul 09.24 dan menunggu selama 6 menit hingga jendela pengantaran dibuka.
Kunjungan ketiga visits[2] 2024-02-13T17:30:00Z shipmentIndex: 0 (dihilangkan di JSON)
isPickup: False (dihilangkan di JSON)
Antar gunung Bernese ke pusat penitipan mulai pukul 09.30. Kunjungan memerlukan waktu 5 menit.
Transisi keempat transitions[3] 2024-02-13T17:35:00Z travelDuration: 0 dtk
travelDistanceMeters: 0 (dihilangkan di JSON)
Jangan mengemudi. Siap mengantar Chihuahua ke pusat penitipan hewan peliharaan pukul 09.35.
Kunjungan keempat visits[3] 2024-02-13T17:35:00Z shipmentIndex: 1
isPickup: Salah (dihilangkan di JSON)
Antar Chihuahua ke pusat penitipan mulai pukul 09.35. Kunjungan memerlukan waktu 5 menit.
Transisi kelima transitions[4] 2024-02-13T17:40:00Z travelDuration: 0 dtk
travelDistanceMeters: 0 (dihilangkan di JSON)
Jangan mengemudi. Pengemudi mengakhiri shift pada pukul 09.40.

Contoh kode berikut menunjukkan cara respons memberikan urutan ini untuk transitions[0] dan transitions[1]:

{
  "routes": [
    {
      "transitions": [
        {
          "travelDuration": "1496s",
          "travelDistanceMeters": 7082,
          "waitDuration": "0s",
          "totalDuration": "1496s",
          "startTime": "2024-02-13T15:55:04Z"
        },
        {
          "travelDuration": "1992s",
          "travelDistanceMeters": 16589,
          "waitDuration": "0s",
          "totalDuration": "1992s",
          "startTime": "2024-02-13T16:25:00Z"
        },
        ...
      ]
    }
  ]
}

Berapa biaya rutenya?

Anda dapat melihat beberapa kolom dalam respons, bergantung pada apakah Anda memerlukan biaya untuk kendaraan tertentu atau total biaya untuk seluruh armada.

Tabel berikut mencantumkan semua cara untuk menemukan informasi biaya dalam respons:

Orang tua Parameter Cakupan Deskripsi
ShipmentRoute routeCosts Per rute Perincian komponen biaya tertentu (seperti biaya per jam) untuk rute tertentu tersebut.
routeTotalCost Per rute Total biaya yang dihitung untuk rute tertentu tersebut.
Metrics totalCost Total (Semua rute) Total biaya gabungan untuk semua rute dalam solusi.
costs Total (Semua rute) Perincian komponen biaya gabungan di semua rute dalam solusi.

Biaya yang ditentukan dalam routeCosts dan costs mencerminkan batasan biaya yang Anda tentukan dalam permintaan. Untuk mengetahui informasi selengkapnya, lihat dokumen Konsep utama model biaya.

Untuk skenario penitipan ini, karena Anda memiliki pengiriman yang dilewati, biaya per rute dan total biaya gabungan akan berbeda. Biaya rute hanya mencakup biaya yang terkait dengan rute tertentu (upah pengemudi), sedangkan total biaya gabungan juga mencakup denda untuk pengiriman yang dilewati. Contoh kode berikut menunjukkan tempat untuk menemukan nilai ini dalam respons:

{
  "routes": [
    {
      "vehicleStartTime": "2024-02-13T15:55:04Z",
      "vehicleEndTime": "2024-02-13T17:40:00Z",
      ...
      "routeCosts": {
        "model.vehicles.cost_per_hour": 47.22
      },
      "routeTotalCost": 47.22
    }
  ],
  "metrics": {
    "totalCost": 147.22,
    "costs": {
      "model.shipments.penalty_cost": 100,
      "model.vehicles.cost_per_hour": 47.22
    },
    ...
  }
}

Menurut rencana rute, pengemudi mengoperasikan van dari pukul 07.55 hingga 09.40, yaitu sekitar 1 jam 45 menit (6.296 detik). Dengan tarif yang Anda tentukan sebesar $27 per jam, biaya rute adalah $47,22. Karena pengoptimal melewatkan pengiriman German shepherd, pengoptimal menambahkan biaya penalti sebesar $100, sehingga total biaya gabungan menjadi $147,22.

Mengapa pengiriman dilewati?

Pengoptimal mencantumkan pengiriman yang tidak dilakukannya dalam array skippedShipments. Alasan pengiriman dilewati bergantung pada apakah Anda menetapkan penaltyCost:

  • Pengiriman wajib (tanpa penaltyCost): Pengoptimal tidak akan pernah melewatkan pengiriman ini hanya karena biaya pelaksanaannya mahal. Pengiriman hanya akan dilewati jika tidak dapat dimasukkan ke dalam rute mana pun, misalnya, karena periode waktunya bertentangan dengan pengiriman lain.
  • Pengiriman opsional (dengan penaltyCost): Pengoptimal juga dapat melewati pengiriman ini jika biaya pelaksanaannya lebih besar daripada denda. Anda dapat menetapkan biaya penalti yang berbeda untuk memprioritaskan beberapa pengiriman daripada yang lain.

Untuk skenario ini, periode penjemputan German shepherd bertentangan dengan periode Bernese mountain dog. Coit Tower dan Land's End berjarak 25 menit, sehingga pengemudi tidak dapat melakukan kedua penjemputan dalam jangka waktu 20 menit. Pengoptimal harus melewati salah satunya. Karena German shepherd memiliki biaya penalti yang lebih rendah ($100 dibandingkan dengan $1.000 untuk klien reguler), pengoptimal akan melewatinya dan dikenai penalti $100.

Contoh kode berikut menunjukkan objek skippedShipments dalam respons:

{
  ...
  "skippedShipments": [
    {
      "index": 2,
      "label": "German shepherd",
      "penaltyCost": 100
    }
  ],
  ...
}

Objek skippedShipments dalam respons berisi kolom berikut:

  • index: Indeks berbasis nol pengiriman dalam permintaan Anda (2 untuk pengiriman ketiga).
  • label: Label yang Anda tentukan dalam permintaan ("German shepherd").
  • penaltyCost: Biaya penalti yang Anda tentukan dalam permintaan, yang ditambahkan API ke total biaya.

Agar pengoptimal tidak melewatkan pengiriman, longgarkan batasan yang menyebabkan konflik. Misalnya, minta pemilik German shepherd untuk memberikan waktu penjemputan yang lebih fleksibel, lalu perbarui timeWindows untuk penjemputan tersebut dalam permintaan Anda.

Kolom respons dalam contoh

Tabel berikut menjelaskan semua kolom respons yang ditampilkan dalam OptimizeToursResponse dari skenario contoh. Meskipun Anda tidak perlu menggunakan setiap kolom untuk memahami rencana rute, Anda dapat menganalisis kolom ini untuk menentukan cara menyesuaikan OptimizeToursRequest agar sesuai dengan kebutuhan bisnis Anda. Untuk mengetahui informasi selengkapnya, lihat Siklus proses rencana rute.

Anda dapat memfilter konten menurut induk atau penelusuran teks.

Orang tua Parameter Jenis Properti Deskripsi
OptimizeToursResponse routes Array objek (ShipmentRoute) Ini berisi daftar rute yang dihitung untuk setiap kendaraan (satu per kendaraan). Untuk skenario penitipan ini, file ini berisi rencana rute mendetail untuk satu van Anda.
metrics Objek (Metrics) Bagian ini berisi metrik keseluruhan untuk solusi, yang digabungkan di semua rute. Untuk skenario penitipan ini, berikut adalah ringkasan biaya dan durasi operasional untuk hari tersebut.
skippedShipments Array objek (SkippedShipment) Ini berisi daftar pengiriman yang dilewati dalam solusi. Untuk skenario ini, ketiga (gembala jerman) dilewati.
ShipmentRoute vehicleStartTime Stempel waktu Ini adalah waktu saat kendaraan memulai rutenya. Untuk skenario penitipan ini, pengemudi mulai mengemudikan van pada pukul 07.55.
vehicleEndTime Stempel waktu Ini adalah waktu saat kendaraan menyelesaikan rutenya. Untuk skenario penitipan ini, pengemudi selesai mengemudikan van pada pukul 09.40.
visits Array objek (Visit) Ini adalah daftar pengambilan dan pengiriman yang diurutkan pada rute. Untuk skenario penitipan ini, ini adalah urutan penjemputan dan pengantaran kedua tersebut.
transitions Array objek (Transition) Ini adalah daftar yang diurutkan untuk jarak, serta waktu perjalanan dan tunggu di antara kunjungan. Untuk skenario penitipan ini, hal ini menjelaskan jarak dan waktu tempuh antara Coit Tower, South Sunset Playground Park, dan tempat penitipan.
metrics Objek (AggregatedMetrics) Ini adalah metrik khusus untuk satu rute ini. Untuk skenario penitipan ini, berikut adalah statistik untuk van tertentu ini. Metrik ini didasarkan pada biaya yang Anda tentukan dalam permintaan. Untuk mengetahui detail selengkapnya, lihat dokumen Konsep utama model biaya.
routeCosts Objek (Peta) Berikut adalah perincian biaya spesifik untuk rute ini. Untuk skenario penitipan ini, biaya dihitung dari upah pengemudi sebesar $27 per jam.
routeTotalCost Angka Ini adalah total biaya untuk rute spesifik ini. Untuk skenario penitipan ini, total biaya untuk rute van ini adalah 47.22.
vehicleFullness Objek (VehicleFullness) Ini adalah perincian seberapa dekat kendaraan dengan batas operasionalnya, seperti waktu, jarak, dan muatan. Untuk skenario penitipan ini, hanya waktu mulai dan akhir giliran kerja yang membatasi pengemudi, sehingga pengoptimal menghitung vehicleFullness sebagai pecahan dari durasi rute sebenarnya dan waktu maksimum yang tersedia untuk giliran kerja pengemudi.
Visit shipmentIndex Bilangan bulat Ini adalah indeks berbasis nol pengiriman dalam permintaan asli. Untuk skenario penitipan ini, 0 mewakili gunung Bernese, dan 1 mewakili Chihuahua.
isPickup Boolean Kolom ini bernilai benar jika kunjungan ini adalah pengambilan. Untuk skenario penitipan ini, nilainya benar saat menjemput dan salah (atau tidak ada) saat mengantar ke tempat penitipan.
startTime Stempel waktu Ini adalah perkiraan waktu mulai kunjungan. Untuk skenario penitipan ini, ini adalah saat pengemudi mengetuk pintu.
detour Durasi Ini adalah waktu tambahan yang ditambahkan pengoptimal ke perjalanan pengiriman tertentu ini. Rute memutar adalah perbedaan antara rencana rute aktual dan perjalanan langsung yang ideal jika pengemudi tidak memiliki pengiriman atau tugas lain yang harus diselesaikan.

Untuk skenario penitipan ini, kunjungan pertama, yaitu untuk menjemput gunung Bernese, memiliki rute memutar 0 karena pengemudi langsung pergi dari pusat penitipan ke lokasi penjemputan ini. Untuk penjemputan Chihuahua, pengalihan rutenya adalah 43 menit karena pengemudi menjemput gunung Bernese terlebih dahulu (dan menghabiskan waktu 5 menit untuk menaikkan).
shipmentLabel String Ini adalah label dari permintaan untuk setiap pengiriman. Untuk skenario penitipan ini, labelnya adalah "Chihuahua" atau "Bernese mountain dog".
visitType String (Enum) Ini menunjukkan jenis kunjungan, yang dapat berupa PICKUP_SHIPMENT untuk pengambilan atau DELIVER_SHIPMENT untuk pengiriman. Untuk skenario ini, nilainya adalah PICKUP_SHIPMENT atau DELIVER_SHIPMENT.
Transition travelDuration Durasi Ini adalah waktu yang dihabiskan untuk perjalanan selama transisi antar-kunjungan ini. Misalnya, dalam skenario penitipan ini, pengemudi menghabiskan waktu sekitar 25 menit untuk berkendara dari tempat penitipan ke Coit Tower untuk menjemput gunung Bernese.
travelDistanceMeters Bilangan bulat Ini adalah jarak yang ditempuh dalam meter selama transisi ini. Misalnya, dalam skenario penitipan ini, pengemudi menempuh jarak 7 kilometer dari tempat penitipan ke Coit Tower untuk menjemput gunung Bernese.
waitDuration Durasi Ini adalah waktu yang dihabiskan untuk menunggu sebelum penjemputan atau pengiriman berikutnya. Untuk skenario penitipan ini, durasinya adalah 6 menit (356 detik) untuk transisi ketiga, karena pengemudi tiba di pusat penitipan sebelum periode pengantaran dibuka pada pukul 09.30. Untuk transisi lainnya, nilai ini adalah 0.
totalDuration Durasi Ini adalah total durasi transisi, termasuk mengemudi dan menunggu. Misalnya, pengemudi menghabiskan 25 menit (25 menit mengemudi dan 0 menit menunggu) pada transisi pertama, dan 27 menit (21 menit mengemudi dan 6 menit menunggu) pada transisi ketiga kembali ke tempat penitipan anak.
startTime Stempel waktu Waktu ini adalah saat perjalanan dimulai. Waktu ini cocok dengan waktu penyelesaian kunjungan sebelumnya (atau, untuk transisi pertama, waktu mulai kendaraan). Untuk skenario penitipan, transisi pertama dimulai pada pukul 07.55 saat pengemudi meninggalkan tempat penitipan, dan transisi kedua dimulai pada pukul 08.25 saat pengemudi meninggalkan Coit Tower.
Metrics aggregatedRouteMetrics Objek (AggregatedMetrics) Ini adalah jumlah metrik di semua rute. Untuk skenario penitipan ini, berikut adalah total metrik untuk satu van Anda.
usedVehicleCount Bilangan bulat Ini adalah jumlah kendaraan yang digunakan dalam solusi. Untuk skenario penitipan ini, Anda hanya menggunakan satu van.
earliestVehicleStartTime Stempel waktu Ini adalah waktu mulai paling awal di antara semua kendaraan. Untuk skenario penitipan ini, rute van dimulai pada pukul 07.55.
latestVehicleEndTime Stempel waktu Ini adalah waktu berakhir paling lambat di antara semua kendaraan. Untuk skenario penitipan ini, rute van berakhir pada pukul 09.40.
totalCost Angka Ini adalah total biaya solusi. Untuk skenario penitipan ini, seluruh rencana rute memerlukan biaya 147.22 untuk hari itu (termasuk upah pengemudi 47.22 dan denda pengiriman yang dilewati 100).
costs Objek (Peta) Berikut adalah perincian total biaya menurut kategori. Untuk skenario penitipan ini, pengoptimal menghitung biaya rute berdasarkan biaya per jam dan biaya penalti untuk German shepherd yang dilewati.
AggregatedMetrics performedShipmentCount Bilangan bulat Ini adalah jumlah pengiriman yang berhasil dirutekan. Untuk skenario penitipan ini, pengemudi mengangkut dua.
travelDuration Durasi Ini adalah total waktu yang dihabiskan untuk bepergian. Untuk skenario penitipan ini, pengemudi melakukan perjalanan selama 79 menit.
waitDuration Durasi Ini adalah total waktu yang dihabiskan untuk menunggu. Untuk skenario penitipan ini, pengemudi berhenti selama 6 menit (356 detik) di pusat penitipan sambil menunggu jendela pengantaran dibuka.
delayDuration Durasi Ini adalah durasi tambahan yang Anda tentukan menggunakan atribut transisi, seperti waktu yang disediakan untuk parkir. Untuk skenario penitipan ini, Anda tidak menentukan atribut transisi apa pun dalam permintaan, sehingga nilai ini adalah nol.
breakDuration Durasi Ini adalah total waktu yang dihabiskan untuk istirahat. Untuk skenario penitipan ini, tidak ada istirahat.
visitDuration Durasi Ini adalah total waktu yang dihabiskan untuk melakukan layanan saat kunjungan. Untuk skenario penitipan ini, durasinya adalah 20 menit (5 menit per kunjungan untuk 4 kunjungan).
totalDuration Durasi Ini adalah jumlah dari semua komponen durasi. Untuk skenario penitipan ini, total durasinya adalah 105 menit (6.296 detik).
travelDistanceMeters Bilangan bulat Ini adalah total jarak perjalanan dalam meter. Untuk skenario penitipan ini, pengemudi menempuh jarak total 31,5 km.
performedShipmentPenaltyCostSum Ganda Ini adalah jumlah biaya penalti dari semua pengiriman yang dilakukan. Untuk skenario ini, biayanya adalah 2000 karena pengemudi menjemput gunung Bernese dan Chihuahua (masing-masing dengan biaya penalti 1000).
VehicleFullness maxFullness Angka Ini adalah rasio pemakaian tertinggi di semua kolom VehicleFullness. Untuk skenario penitipan ini, nilainya adalah 0,35 karena pengemudi hanya mengoperasikan van selama 105 menit dari seluruh shift pagi, yang Anda tentukan sebagai 5 jam dalam permintaan.
activeSpan Angka Ini adalah rasio total durasi shift pengemudi dibandingkan dengan jam operasional rencana rute. Angka yang lebih rendah berarti pengemudi menghabiskan lebih sedikit waktu pada hari kerja untuk mengoperasikan kendaraan. Untuk skenario penitipan ini, nilainya adalah 0,35 karena pengemudi mengoperasikan van selama 105 menit selama shift 5 jam.
SkippedShipment index Bilangan bulat Ini adalah indeks berbasis nol pengiriman dalam permintaan asli. Untuk skenario ini, 2 mewakili German shepherd.
label String Ini adalah label yang Anda tentukan untuk pengiriman dalam permintaan.
penaltyCost Angka Ini adalah biaya penalti yang Anda keluarkan saat pengoptimal melewati pengiriman ini. ID ini cocok dengan penaltyCost yang Anda tentukan dalam permintaan.