Method: projects.optimizeTours

Mengirim OptimizeToursRequest yang berisi ShipmentModel dan menampilkan OptimizeToursResponse yang berisi ShipmentRoute, yang merupakan kumpulan rute yang akan dilakukan dengan kendaraan yang meminimalkan biaya keseluruhan.

Model ShipmentModel sebagian besar terdiri dari Shipment yang perlu dijalankan dan Vehicle yang dapat digunakan untuk memindahkan Shipment. ShipmentRoute menetapkan Shipment ke Vehicle. Lebih khusus lagi, mereka menetapkan serangkaian Visit untuk setiap kendaraan, dengan Visit sesuai dengan VisitRequest, yaitu pengambilan atau pengantaran untuk Shipment.

Tujuannya adalah memberikan penetapan ShipmentRoute ke Vehicle yang meminimalkan total biaya dengan biaya memiliki banyak komponen yang ditentukan dalam ShipmentModel.

Permintaan HTTP

POST https://routeoptimization.googleapis.com/v1/{parent=projects/*}:optimizeTours

URL menggunakan sintaksis gRPC Transcoding.

Parameter jalur

Parameter
parent

string

Wajib. Targetkan project atau lokasi untuk melakukan panggilan.

Format: * projects/{project-id} * projects/{project-id}/locations/{location-id}

Jika tidak ada lokasi yang ditentukan, wilayah akan dipilih secara otomatis.

Isi permintaan

Isi permintaan memuat data dengan struktur berikut:

Representasi JSON
{
  "timeout": string,
  "model": {
    object (ShipmentModel)
  },
  "solvingMode": enum (SolvingMode),
  "searchMode": enum (SearchMode),
  "injectedFirstSolutionRoutes": [
    {
      object (ShipmentRoute)
    }
  ],
  "injectedSolutionConstraint": {
    object (InjectedSolutionConstraint)
  },
  "refreshDetailsRoutes": [
    {
      object (ShipmentRoute)
    }
  ],
  "interpretInjectedSolutionsUsingLabels": boolean,
  "considerRoadTraffic": boolean,
  "populatePolylines": boolean,
  "populateTransitionPolylines": boolean,
  "allowLargeDeadlineDespiteInterruptionRisk": boolean,
  "useGeodesicDistances": boolean,
  "label": string,
  "geodesicMetersPerSecond": number,
  "maxValidationErrors": integer
}
Kolom
timeout

string (Duration format)

Jika waktu tunggu ini disetel, server akan menampilkan respons sebelum periode waktu tunggu berlalu atau batas waktu server untuk permintaan sinkron tercapai, mana saja yang lebih cepat.

Untuk permintaan asinkron, server akan membuat solusi (jika memungkinkan) sebelum waktu tunggu berlalu.

Durasi dalam detik dengan maksimal sembilan digit pecahan, yang diakhiri dengan 's'. Contoh: "3.5s".

model

object (ShipmentModel)

Model pengiriman yang harus dipecahkan.

solvingMode

enum (SolvingMode)

Secara default, mode penyelesaian adalah DEFAULT_SOLVE (0).

searchMode

enum (SearchMode)

Mode penelusuran yang digunakan untuk menyelesaikan permintaan.

injectedFirstSolutionRoutes[]

object (ShipmentRoute)

Memandu algoritma pengoptimalan dalam menemukan solusi pertama yang mirip dengan solusi sebelumnya.

Model dibatasi saat solusi pertama dibangun. Setiap pengiriman yang tidak dilakukan pada suatu rute secara implisit dilewati dalam solusi pertama, tetapi pengiriman tersebut dapat dilakukan dalam solusi berturut-turut.

Solusi harus memenuhi beberapa asumsi validitas dasar:

  • untuk semua rute, vehicleIndex harus berada dalam jangkauan dan tidak diduplikasi.
  • untuk semua kunjungan, shipmentIndex dan visitRequestIndex harus berada dalam rentang.
  • pengiriman hanya dapat dirujuk pada satu rute.
  • pengambilan paket pengiriman harus dilakukan sebelum pengiriman.
  • tidak lebih dari satu alternatif pengambilan atau alternatif pengiriman untuk pengiriman yang dapat dilakukan.
  • untuk semua rute, waktu meningkat (yaitu, vehicleStartTime <= visits[0].start_time <= visits[1].start_time ... <= vehicleEndTime).
  • pengiriman hanya dapat dilakukan pada kendaraan yang diizinkan. Kendaraan diizinkan jika Shipment.allowed_vehicle_indices kosong atau vehicleIndex disertakan dalam Shipment.allowed_vehicle_indices.
  • jika menetapkan avoidUTurns ke benar (true), injectedSolutionLocationToken harus ditetapkan untuk kunjungan yang relevan

Jika solusi yang dimasukkan tidak memungkinkan, error validasi belum tentu ditampilkan dan error yang menunjukkan ketidaklayakan dapat ditampilkan.

injectedSolutionConstraint

object (InjectedSolutionConstraint)

Batasi algoritma pengoptimalan untuk menemukan solusi akhir yang serupa dengan solusi sebelumnya. Misalnya, opsi ini dapat digunakan untuk membekukan bagian rute yang telah selesai atau yang akan diselesaikan tetapi tidak boleh dimodifikasi.

Jika solusi yang dimasukkan tidak memungkinkan, error validasi belum tentu ditampilkan dan error yang menunjukkan ketidaklayakan dapat ditampilkan.

refreshDetailsRoutes[]

object (ShipmentRoute)

Jika tidak kosong, rute yang diberikan akan diperbarui, tanpa mengubah urutan kunjungan atau waktu perjalanan yang mendasarinya: hanya detail lain yang akan diperbarui. Ini tidak menyelesaikan model.

Mulai 2020/11, konfigurasi ini hanya mengisi polyline rute yang tidak kosong dan mengharuskan populatePolylines benar (true).

Kolom routePolyline dari rute yang diteruskan mungkin tidak konsisten dengan rute transitions.

Kolom ini tidak boleh digunakan bersama dengan injectedFirstSolutionRoutes atau injectedSolutionConstraint.

Shipment.ignore dan Vehicle.ignore tidak memengaruhi perilaku tersebut. Polyline akan tetap diisi di antara semua kunjungan di semua rute yang tidak kosong, terlepas dari apakah pengiriman atau kendaraan terkait diabaikan atau tidak.

interpretInjectedSolutionsUsingLabels

boolean

Jika benar:

Penafsiran ini berlaku untuk kolom injectedFirstSolutionRoutes, injectedSolutionConstraint, dan refreshDetailsRoutes. ID ini dapat digunakan jika indeks pengiriman atau kendaraan dalam permintaan telah berubah sejak solusi dibuat, mungkin karena pengiriman atau kendaraan telah dipindahkan dari atau ditambahkan ke permintaan.

Jika benar, label dalam kategori berikut harus muncul paling banyak sekali di kategorinya:

Jika vehicleLabel dalam solusi yang diinjeksikan tidak sesuai dengan kendaraan permintaan, rute terkait akan dihapus dari solusi bersama dengan kunjungannya. Jika shipmentLabel dalam solusi yang dimasukkan tidak sesuai dengan pengiriman permintaan, kunjungan yang sesuai akan dihapus dari solusi. Jika SkippedShipment.label dalam solusi yang dimasukkan tidak sesuai dengan pengiriman permintaan, SkippedShipment akan dihapus dari solusi.

Menghapus kunjungan rute atau seluruh rute dari solusi yang diinjeksikan dapat memengaruhi batasan tersirat, yang dapat menyebabkan perubahan solusi, kesalahan validasi, atau ketidaklayakan.

CATATAN: Pemanggil harus memastikan bahwa setiap Vehicle.label (respons Shipment.label) secara unik mengidentifikasi entitas kendaraan (pengiriman balasan) yang digunakan di dua permintaan yang relevan: permintaan sebelumnya yang menghasilkan OptimizeToursResponse yang digunakan dalam solusi yang dimasukkan dan permintaan saat ini yang menyertakan solusi yang dimasukkan. Pemeriksaan keunikan yang dijelaskan di atas tidak cukup untuk menjamin persyaratan ini.

considerRoadTraffic

boolean

Pertimbangkan estimasi traffic dalam menghitung kolom ShipmentRoute Transition.travel_duration, Visit.start_time, dan vehicleEndTime; saat menetapkan kolom ShipmentRoute.has_traffic_infeasibilities, dan menghitung kolom OptimizeToursResponse.total_cost.

populatePolylines

boolean

Jika benar, polyline akan diisi dalam ShipmentRoute respons.

populateTransitionPolylines

boolean

Jika true (benar), polyline akan diisi dalam respons ShipmentRoute.transitions.

allowLargeDeadlineDespiteInterruptionRisk

boolean

Jika disetel, permintaan dapat memiliki batas waktu (lihat https://grpc.io/blog/deadlines) hingga 60 menit. Jika tidak, batas waktu maksimumnya hanya 30 menit. Perhatikan bahwa permintaan berdurasi panjang memiliki risiko gangguan yang jauh lebih besar (tetapi masih kecil).

useGeodesicDistances

boolean

Jika benar, jarak perjalanan akan dihitung menggunakan jarak geodesi, bukan jarak Google Maps, dan waktu perjalanan akan dihitung menggunakan jarak geodesi dengan kecepatan yang ditentukan oleh geodesicMetersPerSecond.

label

string

Label yang dapat digunakan untuk mengidentifikasi permintaan ini, dilaporkan kembali dalam OptimizeToursResponse.request_label.

geodesicMetersPerSecond

number

Jika useGeodesicDistances bernilai benar (true), kolom ini harus ditetapkan dan menentukan kecepatan yang diterapkan untuk menghitung waktu tempuh. Nilainya minimal harus 1,0 meter/detik.

maxValidationErrors

integer

Memotong jumlah error validasi yang ditampilkan. Error ini biasanya dilampirkan ke payload error INVALID_ARGUMENT sebagai detail error BadRequest (https://cloud.google.com/apis/design/errors#error_details), kecuali resolveMode=VALIDATE_ONLY: lihat kolom OptimizeToursResponse.validation_errors. Setelan default-nya adalah 100 dan dibatasi hingga 10.000.

Isi respons

Jika berhasil, isi respons memuat instance OptimizeToursResponse.

Cakupan otorisasi

Memerlukan cakupan OAuth berikut:

  • https://www.googleapis.com/auth/cloud-platform

Izin IAM

Memerlukan izin IAM berikut pada resource parent:

  • routeoptimization.locations.use

Untuk informasi selengkapnya, lihat dokumentasi IAM.