ShipmentModel

Model pengiriman berisi serangkaian pengiriman yang harus dilakukan oleh serangkaian kendaraan, sekaligus meminimalkan biaya keseluruhan, yang merupakan jumlah dari:

  • biaya perutean kendaraan (jumlah biaya per total waktu, biaya per waktu perjalanan, dan biaya tetap untuk semua kendaraan).
  • sanksi pengiriman yang tidak dilakukan.
  • biaya durasi pengiriman global
Representasi JSON
{
  "shipments": [
    {
      object (Shipment)
    }
  ],
  "vehicles": [
    {
      object (Vehicle)
    }
  ],
  "objectives": [
    {
      object (Objective)
    }
  ],
  "globalStartTime": string,
  "globalEndTime": string,
  "globalDurationCostPerHour": number,
  "durationDistanceMatrices": [
    {
      object (DurationDistanceMatrix)
    }
  ],
  "durationDistanceMatrixSrcTags": [
    string
  ],
  "durationDistanceMatrixDstTags": [
    string
  ],
  "transitionAttributes": [
    {
      object (TransitionAttributes)
    }
  ],
  "shipmentTypeIncompatibilities": [
    {
      object (ShipmentTypeIncompatibility)
    }
  ],
  "shipmentTypeRequirements": [
    {
      object (ShipmentTypeRequirement)
    }
  ],
  "precedenceRules": [
    {
      object (PrecedenceRule)
    }
  ],
  "maxActiveVehicles": integer
}
Kolom
shipments[]

object (Shipment)

Kumpulan pengiriman yang harus dilakukan dalam model.

vehicles[]

object (Vehicle)

Kumpulan kendaraan yang dapat digunakan untuk melakukan kunjungan.

objectives[]

object (Objective)

Kumpulan tujuan untuk model ini, yang akan kita ubah menjadi biaya. Jika tidak kosong, model input harus bebas biaya. Untuk mendapatkan permintaan yang diubah, gunakan solvingMode = TRANSFORM_AND_RETURN_REQUEST. Perhatikan bahwa permintaan tidak akan diselesaikan dalam kasus ini. Lihat dokumentasi yang sesuai.

Eksperimental: Lihat https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request untuk mengetahui detail selengkapnya.

globalStartTime

string (Timestamp format)

Waktu mulai dan berakhir global model: tidak ada waktu di luar rentang ini yang dapat dianggap valid.

Rentang waktu model harus kurang dari satu tahun, yaitu globalEndTime dan globalStartTime harus berjarak kurang dari 31536000 detik.

Saat menggunakan kolom cost_per_*hour, Anda mungkin ingin menyetel jangka waktu ini ke interval yang lebih kecil untuk meningkatkan performa (misalnya, jika Anda memodelkan satu hari, Anda harus menyetel batas waktu global ke hari tersebut). Jika tidak disetel, 00:00:00 UTC, 1 Januari 1970 (yaitu detik: 0, nanos: 0) akan digunakan sebagai default.

Menggunakan RFC 3339 yang outputnya akan selalu dinormalisasi Z dan menggunakan 0, 3, 6, atau 9 digit pecahan. Offset selain "Z" juga diterima. Contoh: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z", atau "2014-10-02T15:01:23+05:30".

globalEndTime

string (Timestamp format)

Jika tidak disetel, 00:00:00 UTC, 1 Januari 1971 (yaitu detik: 31536000, nanos: 0) akan digunakan sebagai default.

Menggunakan RFC 3339 yang outputnya akan selalu dinormalisasi Z dan menggunakan 0, 3, 6, atau 9 digit pecahan. Offset selain "Z" juga diterima. Contoh: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z", atau "2014-10-02T15:01:23+05:30".

globalDurationCostPerHour

number

"Durasi global" keseluruhan paket adalah selisih antara waktu mulai berlaku paling awal dan waktu akhir berlaku paling akhir dari semua kendaraan. Pengguna dapat menetapkan biaya per jam untuk jumlah tersebut guna mencoba dan mengoptimalkan penyelesaian tugas paling awal, misalnya. Biaya ini harus dalam satuan yang sama dengan Shipment.penalty_cost.

durationDistanceMatrices[]

object (DurationDistanceMatrix)

Menentukan matriks durasi dan jarak yang digunakan dalam model. Jika kolom ini kosong, Google Maps atau jarak geodesi akan digunakan, bergantung pada nilai kolom useGeodesicDistances. Jika tidak kosong, useGeodesicDistances tidak boleh benar (true) dan durationDistanceMatrixSrcTags maupun durationDistanceMatrixDstTags tidak boleh kosong.

Contoh penggunaan:

  • Ada dua lokasi: locA dan locB.
  • 1 kendaraan memulai rutenya di locA dan mengakhirinya di locA.
  • 1 permintaan kunjungan pengambilan di locB.
model {
  vehicles { startTags: "locA"  endTags: "locA" }
  shipments { pickups { tags: "locB" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixDstTags: "locA"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrices {
    rows {  # from: locA
      durations { seconds: 0 }   meters: 0    # to: locA
      durations { seconds: 100 } meters: 1000 # to: locB
    }
    rows {  # from: locB
      durations { seconds: 102 } meters: 990 # to: locA
      durations { seconds: 0 }   meters: 0   # to: locB
    }
  }
}
  • Ada tiga lokasi: locA, locB, dan locC.
  • 1 kendaraan memulai rutenya di locA dan mengakhirinya di locB, menggunakan matriks "cepat".
  • 1 kendaraan memulai rutenya di locB dan mengakhirinya di locB, menggunakan matriks "slow".
  • 1 kendaraan memulai rutenya di locB dan mengakhirinya di locB, menggunakan matriks "fast".
  • 1 permintaan kunjungan pengambilan di locC.
model {
  vehicles { startTags: "locA" endTags: "locB" startTags: "fast" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "slow" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "fast" }
  shipments { pickups { tags: "locC" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixSrcTags: "locC"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrixDstTags: "locC"
  durationDistanceMatrices {
    vehicleStartTag: "fast"
    rows {  # from: locA
      durations { seconds: 1000 } meters: 2000 # to: locB
      durations { seconds: 600 }  meters: 1000 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }   meters: 0    # to: locB
      durations { seconds: 700 } meters: 1200 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 702 } meters: 1190 # to: locB
      durations { seconds: 0 }   meters: 0    # to: locC
    }
  }
  durationDistanceMatrices {
    vehicleStartTag: "slow"
    rows {  # from: locA
      durations { seconds: 1800 } meters: 2001 # to: locB
      durations { seconds: 900 }  meters: 1002 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }    meters: 0    # to: locB
      durations { seconds: 1000 } meters: 1202 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 1001 } meters: 1195 # to: locB
      durations { seconds: 0 }    meters: 0    # to: locC
    }
  }
}
durationDistanceMatrixSrcTags[]

string

Tag yang menentukan sumber matriks durasi dan jarak; durationDistanceMatrices(i).rows(j) menentukan durasi dan jarak dari kunjungan dengan tag durationDistanceMatrixSrcTags(j) ke kunjungan lain dalam matriks i.

Tag sesuai dengan VisitRequest.tags atau Vehicle.start_tags. VisitRequest atau Vehicle tertentu harus cocok dengan tepat satu tag di kolom ini. Perhatikan bahwa tag sumber, tujuan, dan matriks Vehicle dapat sama; demikian pula tag sumber dan tujuan VisitRequest dapat sama. Semua tag harus berbeda dan tidak boleh berupa string kosong. Jika kolom ini tidak kosong, durationDistanceMatrices tidak boleh kosong.

durationDistanceMatrixDstTags[]

string

Tag yang menentukan tujuan matriks durasi dan jarak; durationDistanceMatrices(i).rows(j).durations(k) (masing-masing durationDistanceMatrices(i).rows(j).meters(k)) menentukan durasi (atau jarak) perjalanan dari kunjungan dengan tag durationDistanceMatrixSrcTags(j) ke kunjungan dengan tag durationDistanceMatrixDstTags(k) dalam matriks i.

Tag sesuai dengan VisitRequest.tags atau Vehicle.start_tags. VisitRequest atau Vehicle tertentu harus cocok dengan tepat satu tag di kolom ini. Perhatikan bahwa tag sumber, tujuan, dan matriks Vehicle dapat sama; demikian pula tag sumber dan tujuan VisitRequest dapat sama. Semua tag harus berbeda dan tidak boleh berupa string kosong. Jika kolom ini tidak kosong, durationDistanceMatrices tidak boleh kosong.

transitionAttributes[]

object (TransitionAttributes)

Atribut transisi ditambahkan ke model.

shipmentTypeIncompatibilities[]

object (ShipmentTypeIncompatibility)

Kumpulan shipment_type yang tidak kompatibel (lihat ShipmentTypeIncompatibility).

shipmentTypeRequirements[]

object (ShipmentTypeRequirement)

Kumpulan persyaratan shipmentType (lihat ShipmentTypeRequirement).

precedenceRules[]

object (PrecedenceRule)

Kumpulan aturan prioritas yang harus diterapkan dalam model.

PENTING: Penggunaan aturan prioritas membatasi ukuran masalah yang dapat dioptimalkan. Permintaan menggunakan aturan prioritas yang mencakup banyak pengiriman dapat ditolak.

maxActiveVehicles

integer

Membatasi jumlah maksimum kendaraan aktif. Kendaraan aktif jika rutenya melakukan minimal satu pengiriman. Hal ini dapat digunakan untuk membatasi jumlah rute jika jumlah pengemudi lebih sedikit daripada kendaraan dan armada kendaraan bersifat heterogen. Pengoptimalan kemudian akan memilih subkumpulan kendaraan terbaik untuk digunakan. Harus benar-benar positif.

Pengiriman

Pengiriman satu item, dari salah satu lokasi pengambilan ke salah satu lokasi pengiriman. Agar pengiriman dianggap telah dilakukan, kendaraan unik harus mengunjungi salah satu lokasi pengambilan (dan mengurangi kapasitas cadangnya), lalu mengunjungi salah satu lokasi pengiriman nanti (dan oleh karena itu, meningkatkan kembali kapasitas cadangnya).

Representasi JSON
{
  "displayName": string,
  "pickups": [
    {
      object (VisitRequest)
    }
  ],
  "deliveries": [
    {
      object (VisitRequest)
    }
  ],
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "allowedVehicleIndices": [
    integer
  ],
  "costsPerVehicle": [
    number
  ],
  "costsPerVehicleIndices": [
    integer
  ],
  "pickupToDeliveryAbsoluteDetourLimit": string,
  "pickupToDeliveryTimeLimit": string,
  "shipmentType": string,
  "label": string,
  "ignore": boolean,
  "penaltyCost": number,
  "pickupToDeliveryRelativeDetourLimit": number
}
Kolom
displayName

string

Nama tampilan pengiriman yang ditentukan pengguna. Panjangnya bisa mencapai 63 karakter dan dapat menggunakan karakter UTF-8.

pickups[]

object (VisitRequest)

Kumpulan alternatif pengambilan yang terkait dengan pengiriman. Jika tidak ditentukan, kendaraan hanya perlu mengunjungi lokasi yang sesuai dengan pengiriman.

deliveries[]

object (VisitRequest)

Kumpulan alternatif pengiriman yang terkait dengan pengiriman. Jika tidak ditentukan, kendaraan hanya perlu mengunjungi lokasi yang sesuai dengan pengambilan.

loadDemands

map (key: string, value: object (Load))

Permintaan muatan pengiriman (misalnya, berat, volume, jumlah palet, dll.). Kunci dalam peta harus berupa ID yang menjelaskan jenis beban yang sesuai, idealnya juga mencakup unit. Misalnya: "weight_kg", "volume_gallons", "pallet_count", dll. Jika kunci tertentu tidak muncul dalam peta, muatan yang sesuai dianggap sebagai null.

allowedVehicleIndices[]

integer

Kumpulan kendaraan yang dapat melakukan pengiriman ini. Jika kosong, semua kendaraan dapat melakukannya. Kendaraan diberikan berdasarkan indeksnya dalam daftar ShipmentModel's vehicles.

costsPerVehicle[]

number

Menentukan biaya yang dikeluarkan saat pengiriman ini dilakukan oleh setiap kendaraan. Jika ditentukan, harus memiliki SALAH SATU:

  • jumlah elemen yang sama dengan costsPerVehicleIndices. costsPerVehicle[i] sesuai dengan kendaraan costsPerVehicleIndices[i] dari model tersebut.
  • jumlah elemen yang sama dengan jumlah kendaraan dalam model. Elemen ke-i sesuai dengan kendaraan #i dari model.

Biaya ini harus dalam unit yang sama dengan penaltyCost dan tidak boleh negatif. Kosongkan kolom ini jika tidak ada biaya tersebut.

costsPerVehicleIndices[]

integer

Indeks kendaraan yang menerapkan costsPerVehicle. Jika tidak kosong, jumlah elemennya harus sama dengan costsPerVehicle. Indeks kendaraan tidak boleh ditentukan lebih dari sekali. Jika kendaraan dikecualikan dari costsPerVehicleIndices, biayanya adalah nol.

pickupToDeliveryAbsoluteDetourLimit

string (Duration format)

Menentukan waktu perjalanan memutar absolut maksimum dibandingkan dengan jalur terpendek dari penjemputan hingga pengiriman. Jika ditentukan, nilainya harus non-negatif, dan pengiriman harus berisi setidaknya pengambilan dan pengiriman.

Misalnya, misalkan t adalah waktu tersingkat yang diperlukan untuk beralih dari alternatif pengambilan yang dipilih langsung ke alternatif pengiriman yang dipilih. Kemudian, setelan pickupToDeliveryAbsoluteDetourLimit akan diterapkan:

startTime(delivery) - startTime(pickup) <=
t + pickupToDeliveryAbsoluteDetourLimit

Jika batas relatif dan absolut ditentukan pada pengiriman yang sama, batas yang lebih ketat akan digunakan untuk setiap kemungkinan pasangan pengambilan/pengiriman. Mulai 10/2017, rute alternatif hanya didukung jika durasi perjalanan tidak bergantung pada kendaraan.

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

pickupToDeliveryTimeLimit

string (Duration format)

Menentukan durasi maksimum dari awal pengambilan hingga awal pengiriman kiriman. Jika ditentukan, nilainya harus non-negatif, dan pengiriman harus berisi setidaknya pengambilan dan pengiriman. Hal ini tidak bergantung pada alternatif mana yang dipilih untuk pengambilan dan pengiriman, atau kecepatan kendaraan. Hal ini dapat ditentukan bersama dengan batasan perutean maksimum: solusi akan mematuhi kedua spesifikasi.

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

shipmentType

string

String tidak kosong yang menentukan "jenis" untuk pengiriman ini. Fitur ini dapat digunakan untuk menentukan inkompatibilitas atau persyaratan antara shipment_types (lihat shipmentTypeIncompatibilities dan shipmentTypeRequirements di ShipmentModel).

Berbeda dengan visitTypes yang ditentukan untuk satu kunjungan: Semua pengambilan/pengiriman yang termasuk dalam pengiriman yang sama memiliki shipmentType yang sama.

label

string

Menentukan label untuk pengiriman ini. Label ini dilaporkan dalam respons di shipmentLabel dari ShipmentRoute.Visit yang sesuai.

ignore

boolean

Jika benar, lewati pengiriman ini, tetapi jangan terapkan penaltyCost.

Mengabaikan pengiriman akan menyebabkan error validasi jika ada shipmentTypeRequirements dalam model.

Mengabaikan pengiriman yang dilakukan di injectedFirstSolutionRoutes atau injectedSolutionConstraint diizinkan; pemecah masalah akan menghapus kunjungan pengambilan/pengiriman terkait dari rute yang dilakukan. precedenceRules yang mereferensikan pengiriman yang diabaikan juga akan diabaikan.

penaltyCost

number

Jika pengiriman tidak selesai, penalti ini akan ditambahkan ke keseluruhan biaya rute. Pengiriman dianggap selesai jika salah satu alternatif pengambilan dan pengirimannya dikunjungi. Biaya dapat dinyatakan dalam unit yang sama dengan yang digunakan untuk semua kolom terkait biaya lainnya dalam model dan harus positif.

PENTING: Jika penalti ini tidak ditentukan, penalti dianggap tidak terbatas, yaitu pengiriman harus diselesaikan.

pickupToDeliveryRelativeDetourLimit

number

Menentukan waktu perjalanan memutar relatif maksimum dibandingkan dengan jalur terpendek dari lokasi penjemputan ke pengantaran. Jika ditentukan, nilainya harus non-negatif, dan pengiriman harus berisi setidaknya pengambilan dan pengiriman.

Misalnya, misalkan t adalah waktu tersingkat yang diperlukan untuk beralih dari alternatif pengambilan yang dipilih langsung ke alternatif pengiriman yang dipilih. Kemudian, setelan pickupToDeliveryRelativeDetourLimit akan diterapkan:

startTime(delivery) - startTime(pickup) <=
std::ceil(t * (1.0 + pickupToDeliveryRelativeDetourLimit))

Jika batas relatif dan absolut ditentukan pada pengiriman yang sama, batas yang lebih ketat akan digunakan untuk setiap kemungkinan pasangan pengambilan/pengiriman. Mulai 10/2017, rute alternatif hanya didukung jika durasi perjalanan tidak bergantung pada kendaraan.

VisitRequest

Permintaan kunjungan yang dapat dilakukan oleh kendaraan: memiliki geo-lokasi (atau dua, lihat di bawah), waktu buka dan tutup yang diwakili oleh rentang waktu, dan durasi waktu layanan (waktu yang dihabiskan oleh kendaraan setelah tiba untuk mengambil atau menurunkan barang).

Representasi JSON
{
  "arrivalLocation": {
    object (LatLng)
  },
  "arrivalWaypoint": {
    object (Waypoint)
  },
  "departureLocation": {
    object (LatLng)
  },
  "departureWaypoint": {
    object (Waypoint)
  },
  "tags": [
    string
  ],
  "timeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "duration": string,
  "cost": number,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "visitTypes": [
    string
  ],
  "label": string,
  "avoidUTurns": boolean
}
Kolom
arrivalLocation

object (LatLng)

Geo-lokasi tempat kendaraan tiba saat melakukan VisitRequest ini. Jika model pengiriman memiliki matriks jarak durasi, arrivalLocation tidak boleh ditentukan.

arrivalWaypoint

object (Waypoint)

Titik jalan tempat kendaraan tiba saat melakukan VisitRequest ini. Jika model pengiriman memiliki matriks jarak durasi, arrivalWaypoint tidak boleh ditentukan.

departureLocation

object (LatLng)

Geo-lokasi tempat kendaraan berangkat setelah menyelesaikan VisitRequest ini. Dapat dihilangkan jika sama dengan arrivalLocation. Jika model pengiriman memiliki matriks jarak durasi, departureLocation tidak boleh ditentukan.

departureWaypoint

object (Waypoint)

Titik jalan tempat kendaraan berangkat setelah menyelesaikan VisitRequest ini. Dapat dihilangkan jika sama dengan arrivalWaypoint. Jika model pengiriman memiliki matriks jarak durasi, departureWaypoint tidak boleh ditentukan.

tags[]

string

Menentukan tag yang dilampirkan ke permintaan kunjungan. String kosong atau duplikat tidak diizinkan.

timeWindows[]

object (TimeWindow)

Periode waktu yang membatasi waktu kedatangan pada kunjungan. Perhatikan bahwa kendaraan dapat berangkat di luar jangka waktu kedatangan, yaitu waktu kedatangan + durasi tidak harus berada dalam jangka waktu. Hal ini dapat menyebabkan waktu tunggu jika kendaraan tiba sebelum TimeWindow.start_time.

Tidak adanya TimeWindow berarti kendaraan dapat melakukan kunjungan ini kapan saja.

Periode waktu harus terpisah, yaitu tidak boleh tumpang-tindih atau berdekatan dengan periode waktu lain, dan harus dalam urutan menaik.

costPerHourAfterSoftEndTime dan softEndTime hanya dapat disetel jika ada satu jangka waktu.

duration

string (Duration format)

Durasi kunjungan, yaitu waktu yang dihabiskan oleh kendaraan antara kedatangan dan keberangkatan (untuk ditambahkan ke kemungkinan waktu tunggu; lihat timeWindows).

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

cost

number

Biaya untuk melayani permintaan kunjungan ini di rute kendaraan. Hal ini dapat digunakan untuk membayar biaya yang berbeda untuk setiap pengambilan atau pengiriman alternatif kiriman. Biaya ini harus dalam unit yang sama dengan Shipment.penalty_cost dan tidak boleh negatif.

loadDemands

map (key: string, value: object (Load))

Memuat permintaan kunjungan ini. Kolom ini sama seperti kolom Shipment.load_demands, tetapi hanya berlaku untuk VisitRequest ini, bukan seluruh Shipment. Permintaan yang tercantum di sini ditambahkan ke permintaan yang tercantum di Shipment.load_demands.

visitTypes[]

string

Menentukan jenis kunjungan. Hal ini dapat digunakan untuk mengalokasikan waktu tambahan yang diperlukan kendaraan untuk menyelesaikan kunjungan ini (lihat Vehicle.extra_visit_duration_for_visit_type).

Jenis hanya dapat muncul satu kali.

label

string

Menentukan label untuk VisitRequest ini. Label ini dilaporkan dalam respons sebagai visitLabel dalam ShipmentRoute.Visit yang sesuai.

avoidUTurns

boolean

Menentukan apakah putar balik harus dihindari dalam rute mengemudi di lokasi ini. Penghindaran belokan U adalah upaya terbaik dan penghindaran lengkap tidak dijamin. Fitur ini bersifat eksperimental dan perilakunya dapat berubah.

Eksperimental: Lihat https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request untuk mengetahui detail selengkapnya.

LatLng

Objek yang merepresentasikan pasangan garis lintang/bujur. Objek ini dinyatakan sebagai pasangan nilai ganda untuk mewakili derajat lintang dan derajat bujur. Kecuali jika ditentukan lain, objek ini harus sesuai dengan standar WGS84. Nilai harus berada dalam rentang yang dinormalisasi.

Representasi JSON
{
  "latitude": number,
  "longitude": number
}
Kolom
latitude

number

Lintang dalam derajat. Harus dalam rentang [-90.0, +90.0].

longitude

number

Bujur dalam derajat. Harus dalam rentang [-180.0, +180.0].

Waypoint

Mengkapsulasi titik jalan. Titik jalan menandai lokasi kedatangan dan keberangkatan VisitRequest, serta lokasi awal dan akhir Kendaraan.

Representasi JSON
{
  "sideOfRoad": boolean,
  "vehicleStopover": boolean,

  // Union field location_type can be only one of the following:
  "location": {
    object (Location)
  },
  "placeId": string
  // End of list of possible types for union field location_type.
}
Kolom
sideOfRoad

boolean

Opsional. Menunjukkan bahwa lokasi titik jalan ini dimaksudkan untuk memiliki preferensi agar kendaraan berhenti di sisi jalan tertentu. Saat Anda menetapkan nilai ini, rute akan melewati lokasi sehingga kendaraan dapat berhenti di sisi jalan yang cenderung mengarah ke lokasi dari tengah jalan. Opsi ini tidak berfungsi untuk mode perjalanan 'BERJALAN KAKI'.

vehicleStopover

boolean

Menunjukkan bahwa titik jalan ditujukan agar kendaraan berhenti di sana, dengan maksud untuk menjemput atau mengantar. Opsi ini hanya berfungsi untuk mode perjalanan 'DRIVING', dan saat 'locationType' adalah 'location'.

Eksperimental: Perilaku atau keberadaan kolom ini dapat berubah di masa mendatang.

Kolom union location_type. Berbagai cara untuk merepresentasikan lokasi. location_type hanya dapat berupa salah satu dari berikut:
location

object (Location)

Titik yang ditentukan menggunakan koordinat geografis, termasuk arah opsional.

placeId

string

ID tempat POI yang terkait dengan titik jalan.

Saat menggunakan ID tempat untuk menentukan lokasi kedatangan atau keberangkatan VisitRequest, gunakan ID tempat yang cukup spesifik untuk menentukan lokasi LatLng untuk navigasi ke tempat tersebut. Misalnya, ID tempat yang merepresentasikan bangunan cocok, tetapi ID tempat yang merepresentasikan jalan tidak disarankan.

Lokasi

Mencakup lokasi (titik geografis, dan arah opsional).

Representasi JSON
{
  "latLng": {
    object (LatLng)
  },
  "heading": integer
}
Kolom
latLng

object (LatLng)

Koordinat geografis titik jalan.

heading

integer

Arah kompas yang terkait dengan arah aliran traffic. Nilai ini digunakan untuk menentukan sisi jalan yang akan digunakan untuk pengambilan dan pengantaran. Nilai arah dapat berupa 0 hingga 360, dengan 0 menentukan arah Utara, 90 menentukan arah Timur, dll.

TimeWindow

Rentang waktu membatasi waktu terjadinya peristiwa, seperti waktu kedatangan saat berkunjung, atau waktu mulai dan berakhir kendaraan.

Batas jangka waktu tetap, startTime dan endTime, memberlakukan waktu paling awal dan paling akhir dari peristiwa, sehingga startTime <= event_time <= endTime. Batas bawah periode waktu fleksibel, softStartTime, menyatakan preferensi agar peristiwa terjadi pada atau setelah softStartTime dengan menimbulkan biaya yang proporsional dengan berapa lama sebelum softStartTime peristiwa terjadi. Batas atas periode waktu fleksibel, softEndTime, menyatakan preferensi agar peristiwa terjadi pada atau sebelum softEndTime dengan menimbulkan biaya yang sebanding dengan berapa lama setelah softEndTime peristiwa terjadi. startTime, endTime, softStartTime, dan softEndTime harus berada dalam batas waktu global (lihat ShipmentModel.global_start_time dan ShipmentModel.global_end_time) dan harus mematuhi:

  0 <= `startTime` <= `endTime` and
  0 <= `startTime` <= `softStartTime` and
  0 <= `softEndTime` <= `endTime`.
Representasi JSON
{
  "startTime": string,
  "endTime": string,
  "softStartTime": string,
  "softEndTime": string,
  "costPerHourBeforeSoftStartTime": number,
  "costPerHourAfterSoftEndTime": number
}
Kolom
startTime

string (Timestamp format)

Waktu mulai periode waktu tetap. Jika tidak ditentukan, nilainya akan ditetapkan ke ShipmentModel.global_start_time.

Menggunakan RFC 3339 yang outputnya akan selalu dinormalisasi Z dan menggunakan 0, 3, 6, atau 9 digit pecahan. Offset selain "Z" juga diterima. Contoh: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z", atau "2014-10-02T15:01:23+05:30".

endTime

string (Timestamp format)

Waktu berakhir periode waktu tetap. Jika tidak ditentukan, nilainya akan ditetapkan ke ShipmentModel.global_end_time.

Menggunakan RFC 3339 yang outputnya akan selalu dinormalisasi Z dan menggunakan 0, 3, 6, atau 9 digit pecahan. Offset selain "Z" juga diterima. Contoh: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z", atau "2014-10-02T15:01:23+05:30".

softStartTime

string (Timestamp format)

Waktu mulai lembut periode waktu.

Menggunakan RFC 3339 yang outputnya akan selalu dinormalisasi Z dan menggunakan 0, 3, 6, atau 9 digit pecahan. Offset selain "Z" juga diterima. Contoh: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z", atau "2014-10-02T15:01:23+05:30".

softEndTime

string (Timestamp format)

Waktu berakhir sementara periode waktu.

Menggunakan RFC 3339 yang outputnya akan selalu dinormalisasi Z dan menggunakan 0, 3, 6, atau 9 digit pecahan. Offset selain "Z" juga diterima. Contoh: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z", atau "2014-10-02T15:01:23+05:30".

costPerHourBeforeSoftStartTime

number

Biaya per jam ditambahkan ke biaya lain dalam model jika peristiwa terjadi sebelum softStartTime, dihitung sebagai:

   max(0, softStartTime - t.seconds)
                          * costPerHourBeforeSoftStartTime / 3600,
t being the time of the event.

Biaya ini harus positif, dan kolom hanya dapat ditetapkan jika softStartTime telah ditetapkan.

costPerHourAfterSoftEndTime

number

Biaya per jam ditambahkan ke biaya lain dalam model jika peristiwa terjadi setelah softEndTime, yang dihitung sebagai:

   max(0, t.seconds - softEndTime.seconds)
                    * costPerHourAfterSoftEndTime / 3600,
t being the time of the event.

Biaya ini harus positif, dan kolom hanya dapat ditetapkan jika softEndTime telah ditetapkan.

Kendaraan

Membuat model kendaraan dalam masalah pengiriman. Menyelesaikan masalah pengiriman akan membuat rute yang dimulai dari startLocation dan berakhir di endLocation untuk kendaraan ini. Rute adalah urutan kunjungan (lihat ShipmentRoute).

Representasi JSON
{
  "displayName": string,
  "travelMode": enum (TravelMode),
  "routeModifiers": {
    object (RouteModifiers)
  },
  "startLocation": {
    object (LatLng)
  },
  "startWaypoint": {
    object (Waypoint)
  },
  "endLocation": {
    object (LatLng)
  },
  "endWaypoint": {
    object (Waypoint)
  },
  "startTags": [
    string
  ],
  "endTags": [
    string
  ],
  "startTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "endTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "unloadingPolicy": enum (UnloadingPolicy),
  "loadLimits": {
    string: {
      object (LoadLimit)
    },
    ...
  },
  "costPerHour": number,
  "costPerTraveledHour": number,
  "costPerKilometer": number,
  "fixedCost": number,
  "usedIfRouteIsEmpty": boolean,
  "routeDurationLimit": {
    object (DurationLimit)
  },
  "travelDurationLimit": {
    object (DurationLimit)
  },
  "routeDistanceLimit": {
    object (DistanceLimit)
  },
  "extraVisitDurationForVisitType": {
    string: string,
    ...
  },
  "breakRule": {
    object (BreakRule)
  },
  "label": string,
  "ignore": boolean,
  "travelDurationMultiple": number
}
Kolom
displayName

string

Nama tampilan kendaraan yang ditentukan pengguna. Panjangnya bisa mencapai 63 karakter dan dapat menggunakan karakter UTF-8.

travelMode

enum (TravelMode)

Mode perjalanan yang memengaruhi jalan yang dapat digunakan oleh kendaraan dan kecepatannya. Lihat juga travelDurationMultiple.

routeModifiers

object (RouteModifiers)

Kumpulan kondisi yang harus dipenuhi yang memengaruhi cara penghitungan rute untuk kendaraan tertentu.

startLocation

object (LatLng)

Lokasi geografis tempat kendaraan memulai perjalanan sebelum mengambil kiriman. Jika tidak ditentukan, kendaraan akan memulai perjalanan dari lokasi penjemputan pertamanya. Jika model pengiriman memiliki matriks durasi dan jarak, startLocation tidak boleh ditentukan.

startWaypoint

object (Waypoint)

Titik jalan yang merepresentasikan lokasi geografis tempat kendaraan memulai perjalanan sebelum mengambil pengiriman. Jika startWaypoint maupun startLocation tidak ditentukan, kendaraan akan memulai perjalanan di lokasi penjemputan pertamanya. Jika model pengiriman memiliki matriks durasi dan jarak, startWaypoint tidak boleh ditentukan.

endLocation

object (LatLng)

Lokasi geografis tempat kendaraan berakhir setelah menyelesaikan VisitRequest terakhirnya. Jika tidak ditentukan, ShipmentRoute kendaraan akan segera berakhir saat menyelesaikan VisitRequest terakhirnya. Jika model pengiriman memiliki matriks durasi dan jarak, endLocation tidak boleh ditentukan.

endWaypoint

object (Waypoint)

Titik jalan yang merepresentasikan lokasi geografis tempat kendaraan berakhir setelah menyelesaikan VisitRequest terakhirnya. Jika endWaypoint maupun endLocation tidak ditentukan, ShipmentRoute kendaraan akan segera berakhir saat kendaraan menyelesaikan VisitRequest terakhirnya. Jika model pengiriman memiliki matriks durasi dan jarak, endWaypoint tidak boleh ditentukan.

startTags[]

string

Menentukan tag yang dilampirkan ke awal rute kendaraan.

String kosong atau duplikat tidak diizinkan.

endTags[]

string

Menentukan tag yang dilampirkan di akhir rute kendaraan.

String kosong atau duplikat tidak diizinkan.

startTimeWindows[]

object (TimeWindow)

Periode waktu saat kendaraan dapat berangkat dari lokasi awalnya. Nilai harus berada dalam batas waktu global (lihat kolom ShipmentModel.global_*). Jika tidak ditentukan, tidak ada batasan selain batas waktu global tersebut.

Periode waktu yang termasuk dalam kolom berulang yang sama harus terpisah, yaitu tidak ada periode waktu yang dapat tumpang-tindih atau berdekatan dengan periode waktu lain, dan harus dalam urutan kronologis.

costPerHourAfterSoftEndTime dan softEndTime hanya dapat disetel jika ada satu jangka waktu.

endTimeWindows[]

object (TimeWindow)

Rentang waktu saat kendaraan dapat tiba di lokasi akhir. Nilai harus berada dalam batas waktu global (lihat kolom ShipmentModel.global_*). Jika tidak ditentukan, tidak ada batasan selain batas waktu global tersebut.

Periode waktu yang termasuk dalam kolom berulang yang sama harus terpisah, yaitu tidak ada periode waktu yang dapat tumpang-tindih atau berdekatan dengan periode waktu lain, dan harus dalam urutan kronologis.

costPerHourAfterSoftEndTime dan softEndTime hanya dapat disetel jika ada satu jangka waktu.

unloadingPolicy

enum (UnloadingPolicy)

Kebijakan pembongkaran diterapkan pada kendaraan.

loadLimits

map (key: string, value: object (LoadLimit))

Kapasitas kendaraan (berat, volume, jumlah palet, misalnya). Kunci dalam peta adalah ID jenis beban, yang konsisten dengan kunci kolom Shipment.load_demands. Jika kunci tertentu tidak ada dalam peta ini, kapasitas yang sesuai dianggap tidak terbatas.

costPerHour

number

Biaya kendaraan: semua biaya dijumlahkan dan harus dalam unit yang sama dengan Shipment.penalty_cost.

Biaya per jam rute kendaraan. Biaya ini diterapkan pada total waktu yang dibutuhkan oleh rute, dan mencakup waktu perjalanan, waktu tunggu, dan waktu kunjungan. Menggunakan costPerHour, bukan hanya costPerTraveledHour, dapat menyebabkan latensi tambahan.

costPerTraveledHour

number

Biaya per jam perjalanan rute kendaraan. Biaya ini hanya berlaku untuk waktu tempuh yang diperlukan oleh rute (yaitu, yang dilaporkan dalam ShipmentRoute.transitions), dan tidak termasuk waktu tunggu dan waktu kunjungan.

costPerKilometer

number

Biaya per kilometer rute kendaraan. Biaya ini diterapkan pada jarak yang dilaporkan di ShipmentRoute.transitions dan tidak berlaku untuk jarak yang ditempuh secara implisit dari arrivalLocation ke departureLocation dari satu VisitRequest.

fixedCost

number

Biaya tetap diterapkan jika kendaraan ini digunakan untuk menangani pengiriman.

usedIfRouteIsEmpty

boolean

Kolom ini hanya berlaku untuk kendaraan yang rutenya tidak melayani pengiriman apa pun. Hal ini menunjukkan apakah kendaraan harus dianggap sebagai bekas atau tidak dalam kasus ini.

Jika benar, kendaraan akan bergerak dari lokasi awal ke lokasi akhir meskipun tidak melayani pengiriman apa pun, dan biaya waktu serta jarak yang dihasilkan dari perjalanan awal --> akhir akan diperhitungkan.

Jika tidak, kendaraan tidak melakukan perjalanan dari lokasi awal ke lokasi akhir, dan tidak ada breakRule atau keterlambatan (dari TransitionAttributes) yang dijadwalkan untuk kendaraan ini. Dalam hal ini, ShipmentRoute kendaraan tidak berisi informasi apa pun kecuali indeks dan label kendaraan.

routeDurationLimit

object (DurationLimit)

Batas diterapkan pada total durasi rute kendaraan. Dalam OptimizeToursResponse tertentu, durasi rute kendaraan adalah selisih antara vehicleEndTime dan vehicleStartTime.

travelDurationLimit

object (DurationLimit)

Batas yang diterapkan pada durasi perjalanan rute kendaraan. Dalam OptimizeToursResponse tertentu, durasi perjalanan rute adalah jumlah semua transitions.travel_duration-nya.

routeDistanceLimit

object (DistanceLimit)

Batas yang diterapkan pada total jarak rute kendaraan. Dalam OptimizeToursResponse tertentu, jarak rute adalah jumlah semua transitions.travel_distance_meters-nya.

extraVisitDurationForVisitType

map (key: string, value: string (Duration format))

Menentukan peta dari string visitTypes ke durasi. Durasi adalah waktu selain VisitRequest.duration yang harus diambil saat kunjungan dengan visitTypes yang ditentukan. Durasi kunjungan tambahan ini akan menambah biaya jika costPerHour ditentukan. Kunci (yaitu visitTypes) tidak boleh berupa string kosong.

Jika permintaan kunjungan memiliki beberapa jenis, durasi akan ditambahkan untuk setiap jenis di peta.

breakRule

object (BreakRule)

Mendeskripsikan jadwal istirahat yang akan diterapkan pada kendaraan ini. Jika kosong, tidak ada istirahat yang akan dijadwalkan untuk kendaraan ini.

label

string

Menentukan label untuk kendaraan ini. Label ini dilaporkan dalam respons sebagai vehicleLabel dari ShipmentRoute yang sesuai.

ignore

boolean

Jika benar, usedIfRouteIsEmpty harus salah, dan kendaraan ini akan tetap tidak digunakan.

Jika pengiriman dilakukan oleh kendaraan yang diabaikan di injectedFirstSolutionRoutes, pengiriman tersebut akan dilewati dalam solusi pertama, tetapi dapat dilakukan dalam respons.

Jika pengiriman dilakukan oleh kendaraan yang diabaikan di injectedSolutionConstraint dan pengambilan/pengiriman terkait dibatasi untuk tetap berada di kendaraan (yaitu, tidak dilonggarkan ke level RELAX_ALL_AFTER_THRESHOLD), pengiriman tersebut akan dilewati dalam respons. Jika pengiriman memiliki kolom allowedVehicleIndices yang tidak kosong dan semua kendaraan yang diizinkan diabaikan, pengiriman tersebut akan dilewati dalam respons.

travelDurationMultiple

number

Menentukan faktor perkalian yang dapat digunakan untuk menambah atau mengurangi waktu perjalanan kendaraan ini. Misalnya, menyetelnya ke 2,0 berarti kendaraan ini lebih lambat dan memiliki waktu perjalanan dua kali lebih lama dibandingkan kendaraan standar. Pengganda ini tidak memengaruhi durasi kunjungan. Hal ini memengaruhi biaya jika costPerHour atau costPerTraveledHour ditentukan. Nilai ini harus dalam rentang [0.001, 1000.0]. Jika tidak disetel, kendaraan adalah standar, dan kelipatan ini dianggap 1,0.

PERINGATAN: Waktu perjalanan akan dibulatkan ke detik terdekat setelah kelipatan ini diterapkan, tetapi sebelum melakukan operasi numerik apa pun. Oleh karena itu, kelipatan kecil dapat menyebabkan hilangnya presisi.

Lihat juga extraVisitDurationForVisitType di bawah.

TravelMode

Mode perjalanan yang dapat digunakan oleh kendaraan.

Ini harus berupa subset dari mode perjalanan Google Maps Platform Routes API, lihat: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode

Catatan: Rute WALKING masih dalam versi beta dan terkadang mungkin tidak memiliki trotoar atau jalur pejalan kaki yang jelas. Anda harus menampilkan peringatan ini kepada pengguna untuk semua rute jalan kaki yang Anda tampilkan di aplikasi Anda.

Enum
TRAVEL_MODE_UNSPECIFIED Mode perjalanan tidak ditentukan, setara dengan DRIVING.
DRIVING Mode perjalanan yang sesuai dengan rute mengemudi (mobil, ...).
WALKING Mode perjalanan yang sesuai dengan rute jalan kaki.

RouteModifiers

Mencakup serangkaian kondisi opsional yang harus dipenuhi saat menghitung rute kendaraan. Hal ini mirip dengan RouteModifiers di Google Maps Platform Routes Preferred API; lihat: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers.

Representasi JSON
{
  "avoidTolls": boolean,
  "avoidHighways": boolean,
  "avoidFerries": boolean,
  "avoidIndoor": boolean
}
Kolom
avoidTolls

boolean

Menentukan apakah akan menghindari jalan tol jika memungkinkan. Rute yang tidak berisi jalan tol akan diprioritaskan. Hanya berlaku untuk mode perjalanan bermotor.

avoidHighways

boolean

Menentukan apakah akan menghindari jalan tol jika memungkinkan. Rute yang tidak berisi jalan raya akan diprioritaskan. Hanya berlaku untuk mode perjalanan bermotor.

avoidFerries

boolean

Menentukan apakah akan menghindari feri jika memungkinkan. Rute yang tidak mencakup perjalanan dengan feri akan diprioritaskan. Hanya berlaku untuk mode perjalanan bermotor.

avoidIndoor

boolean

Opsional. Menentukan apakah akan menghindari navigasi di dalam ruangan jika memungkinkan. Rute yang tidak berisi navigasi dalam ruangan akan diprioritaskan. Hanya berlaku untuk mode perjalanan WALKING.

UnloadingPolicy

Kebijakan tentang cara menurunkan kendaraan. Hanya berlaku untuk pengiriman yang memiliki pengambilan dan pengantaran.

Pengiriman lainnya dapat dilakukan di mana saja di sepanjang rute, terlepas dari unloadingPolicy.

Enum
UNLOADING_POLICY_UNSPECIFIED Kebijakan pembongkaran tidak ditentukan; pengiriman hanya boleh dilakukan setelah pengambilan yang sesuai.
LAST_IN_FIRST_OUT Pengiriman harus dilakukan dalam urutan terbalik dari pengambilan
FIRST_IN_FIRST_OUT Pengiriman harus dilakukan dalam urutan yang sama dengan pengambilan

LoadLimit

Menentukan batas muatan yang berlaku untuk kendaraan, misalnya, "truk ini hanya boleh membawa muatan hingga 3.500 kg". Lihat loadLimits.

Representasi JSON
{
  "softMaxLoad": string,
  "costPerUnitAboveSoftMax": number,
  "startLoadInterval": {
    object (Interval)
  },
  "endLoadInterval": {
    object (Interval)
  },
  "maxLoad": string,
  "costPerKilometer": {
    object (LoadCost)
  },
  "costPerTraveledHour": {
    object (LoadCost)
  }
}
Kolom
softMaxLoad

string (int64 format)

Batas lunak beban. Lihat costPerUnitAboveSoftMax.

costPerUnitAboveSoftMax

number

Jika beban pernah melebihi softMaxLoad di sepanjang rute kendaraan ini, penalti biaya berikut akan berlaku (hanya sekali per kendaraan): (beban - softMaxLoad) * costPerUnitAboveSoftMax. Semua biaya dijumlahkan dan harus dalam satuan yang sama dengan Shipment.penalty_cost. Batas lunak hanya dapat ditentukan pada jenis yang berlaku untuk pengambilan saja atau pengiriman saja di seluruh model.

startLoadInterval

object (Interval)

Interval muatan yang dapat diterima dari kendaraan di awal rute.

endLoadInterval

object (Interval)

Interval muatan yang dapat diterima dari kendaraan di akhir rute.

maxLoad

string (int64 format)

Jumlah beban maksimum yang dapat diterima.

costPerKilometer

object (LoadCost)

Biaya memindahkan satu unit muatan sejauh satu kilometer untuk kendaraan ini. Hal ini dapat digunakan sebagai pengganti konsumsi bahan bakar: jika beban adalah berat (dalam Newton), maka beban*kilometer memiliki dimensi energi.

Eksperimental: Lihat https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request untuk mengetahui detail selengkapnya.

costPerTraveledHour

object (LoadCost)

Biaya perjalanan dengan satu unit muatan selama satu jam untuk kendaraan ini.

Eksperimental: Lihat https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request untuk mengetahui detail selengkapnya.

Interval

Interval jumlah muatan yang dapat diterima.

Representasi JSON
{
  "min": string,
  "max": string
}
Kolom
min

string (int64 format)

Beban minimum yang dapat diterima. Harus ≥ 0. Jika keduanya ditentukan, min harus ≤ max.

max

string (int64 format)

Beban maksimum yang dapat diterima. Harus ≥ 0. Jika tidak ditentukan, beban maksimum tidak dibatasi oleh pesan ini. Jika keduanya ditentukan, min harus ≤ max.

LoadCost

Biaya pemindahan satu unit beban selama Transition. Untuk beban tertentu, biaya adalah jumlah dari dua bagian:

  • min(load, loadThreshold) * costPerUnitBelowThreshold
  • max(0, load - loadThreshold) * costPerUnitAboveThreshold

Dengan biaya ini, solusi lebih memilih untuk mengirimkan permintaan tinggi terlebih dahulu, atau secara setara mengambil permintaan tinggi terakhir. Misalnya, jika kendaraan memiliki

load_limit {
  key: "weight"
  value {
    costPerKilometer {
      loadThreshold: 15
      costPerUnitBelowThreshold: 2.0
      costPerUnitAboveThreshold: 10.0
    }
  }
}

dan rutenya adalah start,pickup,pickup,delivery,delivery,end dengan transisi:

transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }

maka biaya yang dikeluarkan oleh LoadCost ini adalah (cost_below * load_below * kilometers + cost_above * load_above * kms)

  • transisi 0: 0,0
  • transisi 1: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • transisi 2: 2.0 * 15 * 1.0 + 10.0 * (20 - 15) * 1.0 = 80.0
  • transisi 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • transisi 4: 0,0

Jadi, LoadCost di rute adalah 120,0.

Namun, jika rutenya adalah start,pickup,delivery,pickup,delivery,end dengan transisi:

transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }

maka biaya yang dikeluarkan oleh LoadCost ini adalah

  • transisi 0: 0,0
  • transisi 1: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • transisi 2: 0.0
  • transisi 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • transisi 4: 0,0

Di sini, LoadCost di rute adalah 40,0.

LoadCost membuat solusi dengan transisi yang sangat berat menjadi lebih mahal.

Eksperimental: Lihat https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request untuk mengetahui detail selengkapnya.

Representasi JSON
{
  "loadThreshold": string,
  "costPerUnitBelowThreshold": number,
  "costPerUnitAboveThreshold": number
}
Kolom
loadThreshold

string (int64 format)

Jumlah muatan di atasnya biaya pemindahan satu unit muatan berubah dari costPerUnitBelowThreshold menjadi costPerUnitAboveThreshold. Harus >= 0.

costPerUnitBelowThreshold

number

Biaya pemindahan unit beban, untuk setiap unit antara 0 dan nilai minimum. Harus berupa nilai terbatas, dan >= 0.

costPerUnitAboveThreshold

number

Biaya pemindahan satu unit beban, untuk setiap unit di atas nilai minimum. Dalam kasus khusus dengan nilai minimum = 0, ini adalah biaya tetap per unit. Harus berupa nilai terbatas, dan >= 0.

DurationLimit

Batas yang menentukan durasi maksimum rute kendaraan. Bisa keras atau lembut.

Jika kolom batas lunak ditentukan, batas maksimal lunak dan biaya terkaitnya harus ditentukan bersama-sama.

Representasi JSON
{
  "maxDuration": string,
  "softMaxDuration": string,
  "quadraticSoftMaxDuration": string,
  "costPerHourAfterSoftMax": number,
  "costPerSquareHourAfterQuadraticSoftMax": number
}
Kolom
maxDuration

string (Duration format)

Batas ketat yang membatasi durasi menjadi paling banyak maxDuration.

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

softMaxDuration

string (Duration format)

Batas lunak yang tidak menerapkan batas durasi maksimum, tetapi jika dilanggar, rute akan dikenai biaya. Biaya ini ditambahkan ke biaya lain yang ditentukan dalam model, dengan unit yang sama.

Jika ditentukan, softMaxDuration tidak boleh negatif. Jika maxDuration juga ditentukan, softMaxDuration harus kurang dari maxDuration.

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

quadraticSoftMaxDuration

string (Duration format)

Batas lunak tidak memberlakukan batas durasi maksimum, tetapi jika dilanggar, rute akan dikenai biaya, kuadrat dalam durasi. Biaya ini ditambahkan ke biaya lain yang ditentukan dalam model, dengan unit yang sama.

Jika ditentukan, quadraticSoftMaxDuration tidak boleh negatif. Jika maxDuration juga ditentukan, quadraticSoftMaxDuration harus kurang dari maxDuration, dan perbedaannya tidak boleh lebih besar dari satu hari:

maxDuration - quadraticSoftMaxDuration <= 86400 seconds

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

costPerHourAfterSoftMax

number

Biaya per jam yang dikenakan jika batas softMaxDuration dilanggar. Biaya tambahan adalah 0 jika durasinya di bawah nilai minimum, jika tidak, biaya bergantung pada durasi sebagai berikut:

  costPerHourAfterSoftMax * (duration - softMaxDuration)

Biaya tidak boleh negatif.

costPerSquareHourAfterQuadraticSoftMax

number

Biaya per jam persegi yang dikenakan jika batas quadraticSoftMaxDuration dilanggar.

Biaya tambahan adalah 0 jika durasinya di bawah nilai minimum, jika tidak, biaya bergantung pada durasi sebagai berikut:

  costPerSquareHourAfterQuadraticSoftMax *
  (duration - quadraticSoftMaxDuration)^2

Biaya tidak boleh negatif.

DistanceLimit

Batas yang menentukan jarak maksimum yang dapat ditempuh. Bisa keras atau lembut.

Jika batas lunak ditentukan, softMaxMeters dan costPerKilometerAboveSoftMax harus ditentukan dan tidak boleh negatif.

Representasi JSON
{
  "maxMeters": string,
  "softMaxMeters": string,
  "costPerKilometerBelowSoftMax": number,
  "costPerKilometerAboveSoftMax": number
}
Kolom
maxMeters

string (int64 format)

Batas ketat yang membatasi jarak menjadi paling banyak maxMeters. Batas harus non-negatif.

softMaxMeters

string (int64 format)

Batas lunak tidak menerapkan batas jarak maksimum, tetapi jika dilanggar akan menghasilkan biaya yang ditambahkan ke biaya lain yang ditentukan dalam model, dengan unit yang sama.

Jika ditentukan, softMaxMeters harus kurang dari maxMeters dan tidak boleh negatif.

costPerKilometerBelowSoftMax

number

Biaya per kilometer yang dikeluarkan, meningkat hingga softMaxMeters, dengan formula:

  min(distanceMeters, softMaxMeters) / 1000.0 *
  costPerKilometerBelowSoftMax.

Biaya ini tidak didukung di routeDistanceLimit.

costPerKilometerAboveSoftMax

number

Biaya per kilometer yang dikeluarkan jika jarak di atas batas softMaxMeters. Biaya tambahan adalah 0 jika jaraknya di bawah batas, jika tidak, formula yang digunakan untuk menghitung biaya adalah sebagai berikut:

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

Biaya tidak boleh negatif.

BreakRule

Aturan untuk membuat jeda waktu untuk kendaraan (misalnya, istirahat makan siang). Istirahat adalah periode waktu yang berurutan saat kendaraan tetap tidak bergerak di posisinya saat ini dan tidak dapat melakukan kunjungan apa pun. Istirahat dapat terjadi:

  • selama perjalanan antara dua kunjungan (yang mencakup waktu tepat sebelum atau tepat setelah kunjungan, tetapi tidak di tengah kunjungan), dalam hal ini akan memperpanjang waktu transit yang sesuai antara kunjungan,
  • atau sebelum kendaraan dinyalakan (kendaraan mungkin tidak dinyalakan di tengah istirahat), dalam hal ini tidak memengaruhi waktu mulai kendaraan.
  • atau setelah akhir kendaraan (sama, dengan waktu akhir kendaraan).
Representasi JSON
{
  "breakRequests": [
    {
      object (BreakRequest)
    }
  ],
  "frequencyConstraints": [
    {
      object (FrequencyConstraint)
    }
  ]
}
Kolom
breakRequests[]

object (BreakRequest)

Urutan jeda. Lihat pesan BreakRequest.

frequencyConstraints[]

object (FrequencyConstraint)

Beberapa FrequencyConstraint mungkin berlaku. Semuanya harus dipenuhi pada BreakRequest BreakRule ini. Lihat FrequencyConstraint.

BreakRequest

Urutan istirahat (yaitu jumlah dan urutannya) yang berlaku untuk setiap kendaraan harus diketahui sebelumnya. BreakRequest yang berulang menentukan urutan tersebut, dalam urutan terjadinya. Rentang waktunya (earliestStartTime / latestStartTime) dapat tumpang-tindih, tetapi harus kompatibel dengan urutannya (hal ini diperiksa).

Representasi JSON
{
  "earliestStartTime": string,
  "latestStartTime": string,
  "minDuration": string
}
Kolom
earliestStartTime

string (Timestamp format)

Wajib. Batas bawah (inklusif) pada awal jeda.

Menggunakan RFC 3339 yang outputnya akan selalu dinormalisasi Z dan menggunakan 0, 3, 6, atau 9 digit pecahan. Offset selain "Z" juga diterima. Contoh: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z", atau "2014-10-02T15:01:23+05:30".

latestStartTime

string (Timestamp format)

Wajib. Batas atas (inklusif) pada awal jeda.

Menggunakan RFC 3339 yang outputnya akan selalu dinormalisasi Z dan menggunakan 0, 3, 6, atau 9 digit pecahan. Offset selain "Z" juga diterima. Contoh: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z", atau "2014-10-02T15:01:23+05:30".

minDuration

string (Duration format)

Wajib. Durasi minimum jeda. Harus positif.

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

FrequencyConstraint

Orang dapat membatasi lebih lanjut frekuensi dan durasi jeda yang ditentukan di atas, dengan menerapkan frekuensi jeda minimum, seperti "Harus ada jeda minimal 1 jam setiap 12 jam". Dengan asumsi bahwa hal ini dapat ditafsirkan sebagai "Dalam rentang waktu geser 12 jam, harus ada setidaknya satu istirahat minimal satu jam", contoh tersebut akan diterjemahkan ke FrequencyConstraint berikut:

{
   minBreakDuration { seconds: 3600 }         # 1 hour.
   maxInterBreakDuration { seconds: 39600 }  # 11 hours (12 - 1 = 11).
}

Waktu dan durasi jeda dalam solusi akan mematuhi semua batasan tersebut, selain periode waktu dan durasi minimum yang telah ditentukan dalam BreakRequest.

FrequencyConstraint dalam praktiknya dapat berlaku untuk jeda yang tidak berurutan. Misalnya, jadwal berikut mematuhi contoh "1h every 12h":

  04:00 vehicle start
   .. performing travel and visits ..
  09:00 1 hour break
  10:00 end of the break
   .. performing travel and visits ..
  12:00 20-min lunch break
  12:20 end of the break
   .. performing travel and visits ..
  21:00 1 hour break
  22:00 end of the break
   .. performing travel and visits ..
  23:59 vehicle end
Representasi JSON
{
  "minBreakDuration": string,
  "maxInterBreakDuration": string
}
Kolom
minBreakDuration

string (Duration format)

Wajib. Durasi istirahat minimum untuk batasan ini. Non-negatif. Lihat deskripsi FrequencyConstraint.

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

maxInterBreakDuration

string (Duration format)

Wajib. Rentang waktu maksimum yang diizinkan untuk setiap interval waktu dalam rute yang tidak menyertakan istirahat duration >= minBreakDuration, setidaknya sebagian. Harus positif.

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

Tujuan

Tujuan menggantikan model biaya sepenuhnya, dan oleh karena itu tidak kompatibel dengan biaya yang sudah ada. Setiap tujuan dipetakan ke sejumlah biaya yang telah ditentukan sebelumnya untuk, misalnya, atribut kendaraan, pengiriman, atau transisi.

Eksperimental: Lihat https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request untuk mengetahui detail selengkapnya.

Representasi JSON
{
  "type": enum (Type),
  "weight": number
}
Kolom
type

enum (Type)

Jenis tujuan.

weight

number

Seberapa besar bobot tujuan ini dibandingkan dengan tujuan lainnya. Nilai ini dapat berupa bilangan non-negatif apa pun, bobot tidak harus berjumlah 1. Bobot defaultnya adalah 1.0.

Jenis

Jenis tujuan yang akan dipetakan ke serangkaian biaya.

Enum
DEFAULT Kumpulan biaya default akan digunakan untuk memastikan solusi yang wajar. Catatan: tujuan ini dapat digunakan sendiri, tetapi juga akan selalu ditambahkan dengan bobot 1.0, sebagai dasar, ke tujuan yang ditentukan oleh pengguna, jika belum ada.
MIN_DISTANCE Tujuan "MIN". Minimalkan total jarak tempuh.
MIN_WORKING_TIME Minimalkan total waktu kerja, yang dijumlahkan untuk semua kendaraan.
MIN_TRAVEL_TIME Sama seperti di atas, tetapi hanya berfokus pada waktu tempuh.
MIN_NUM_VEHICLES Minimalkan jumlah kendaraan yang digunakan.

DurationDistanceMatrix

Menentukan matriks durasi dan jarak dari lokasi awal kunjungan dan kendaraan ke lokasi akhir kunjungan dan kendaraan.

Representasi JSON
{
  "rows": [
    {
      object (Row)
    }
  ],
  "vehicleStartTag": string
}
Kolom
rows[]

object (Row)

Menentukan baris matriks durasi dan jarak. Jumlah elemennya harus sama dengan ShipmentModel.duration_distance_matrix_src_tags.

vehicleStartTag

string

Tag yang menentukan kendaraan yang menerapkan matriks durasi dan jarak ini. Jika kosong, ini berlaku untuk semua kendaraan, dan hanya boleh ada satu matriks.

Setiap start kendaraan harus cocok dengan tepat satu matriks, yaitu tepat satu kolom startTags harus cocok dengan vehicleStartTag matriks (dan hanya matriks tersebut).

Semua matriks harus memiliki vehicleStartTag yang berbeda.

Baris

Menentukan baris matriks durasi dan jarak.

Representasi JSON
{
  "durations": [
    string
  ],
  "meters": [
    number
  ]
}
Kolom
durations[]

string (Duration format)

Nilai durasi untuk baris tertentu. Jumlah elemennya harus sama dengan ShipmentModel.duration_distance_matrix_dst_tags.

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

meters[]

number

Nilai jarak untuk baris tertentu. Jika tidak ada biaya atau batasan yang merujuk pada jarak dalam model, kolom ini dapat dibiarkan kosong; jika tidak, kolom ini harus memiliki elemen sebanyak durations.

TransitionAttributes

Menentukan atribut transisi antara dua kunjungan berurutan di rute. Beberapa TransitionAttributes dapat berlaku untuk transisi yang sama: dalam hal ini, semua biaya tambahan akan dijumlahkan dan batasan atau batas yang paling ketat akan berlaku (mengikuti semantik "AND" alami).

Representasi JSON
{
  "srcTag": string,
  "excludedSrcTag": string,
  "dstTag": string,
  "excludedDstTag": string,
  "cost": number,
  "costPerKilometer": number,
  "distanceLimit": {
    object (DistanceLimit)
  },
  "delay": string
}
Kolom
srcTag

string

Tag yang menentukan kumpulan transisi (src->dst) yang berlaku untuk atribut ini.

Kunjungan sumber atau awal kendaraan cocok jika VisitRequest.tags atau Vehicle.start_tags berisi srcTag atau tidak berisi excludedSrcTag (bergantung pada kolom mana yang tidak kosong).

excludedSrcTag

string

Lihat srcTag. Tepat satu dari srcTag dan excludedSrcTag tidak boleh kosong.

dstTag

string

Kunjungan tujuan atau akhir kendaraan cocok jika VisitRequest.tags atau Vehicle.end_tags berisi dstTag atau tidak berisi excludedDstTag (bergantung pada kolom mana dari kedua kolom ini yang tidak kosong).

excludedDstTag

string

Lihat dstTag. Tepat satu dari dstTag dan excludedDstTag tidak boleh kosong.

cost

number

Menentukan biaya untuk melakukan transisi ini. Nilai ini berada dalam unit yang sama dengan semua biaya lainnya dalam model dan tidak boleh negatif. Biaya ini diterapkan di atas semua biaya yang ada.

costPerKilometer

number

Menentukan biaya per kilometer yang diterapkan pada jarak yang ditempuh saat melakukan transisi ini. Nilai ini ditambahkan ke Vehicle.cost_per_kilometer yang ditentukan pada kendaraan.

distanceLimit

object (DistanceLimit)

Menentukan batas jarak yang ditempuh saat melakukan transisi ini.

Mulai 2021/06, hanya batas lunak yang didukung.

delay

string (Duration format)

Menentukan penundaan yang terjadi saat melakukan transisi ini.

Penundaan ini selalu terjadi setelah menyelesaikan kunjungan sumber dan sebelum memulai kunjungan tujuan.

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

ShipmentTypeIncompatibility

Menentukan ketidakcocokan antara pengiriman, bergantung pada shipmentType-nya. Tampilan pengiriman yang tidak kompatibel pada rute yang sama dibatasi berdasarkan mode ketidakcocokan.

Representasi JSON
{
  "types": [
    string
  ],
  "incompatibilityMode": enum (IncompatibilityMode)
}
Kolom
types[]

string

Daftar jenis yang tidak kompatibel. Dua pengiriman yang memiliki shipment_types berbeda di antara yang tercantum adalah "tidak kompatibel".

incompatibilityMode

enum (IncompatibilityMode)

Mode yang diterapkan pada inkompatibilitas.

IncompatibilityMode

Mode yang menentukan cara pembatasan tampilan pengiriman yang tidak kompatibel pada rute yang sama.

Enum
INCOMPATIBILITY_MODE_UNSPECIFIED Mode ketidakcocokan tidak ditentukan. Nilai ini tidak boleh digunakan.
NOT_PERFORMED_BY_SAME_VEHICLE Dalam mode ini, dua pengiriman dengan jenis yang tidak kompatibel tidak akan pernah menggunakan kendaraan yang sama.
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

Dalam mode ini, dua pengiriman dengan jenis yang tidak kompatibel tidak akan pernah berada di kendaraan yang sama pada waktu yang sama:

  • Mereka dapat berbagi kendaraan yang sama hanya jika salah satu kendaraan dikirim sebelum kendaraan lainnya diambil.
  • Jika kedua pengiriman hanya berupa pengambilan di lokasi (tanpa pengiriman) atau hanya berupa pengiriman (tanpa pengambilan di lokasi), keduanya tidak dapat menggunakan kendaraan yang sama sama sekali.

ShipmentTypeRequirement

Menentukan persyaratan antar-pengiriman berdasarkan shipmentType-nya. Detail persyaratan ditentukan oleh mode persyaratan.

Representasi JSON
{
  "requiredShipmentTypeAlternatives": [
    string
  ],
  "dependentShipmentTypes": [
    string
  ],
  "requirementMode": enum (RequirementMode)
}
Kolom
requiredShipmentTypeAlternatives[]

string

Daftar jenis pengiriman alternatif yang diperlukan oleh dependentShipmentTypes.

dependentShipmentTypes[]

string

Semua pengiriman dengan jenis di kolom dependentShipmentTypes memerlukan setidaknya satu pengiriman jenis requiredShipmentTypeAlternatives untuk dikunjungi di rute yang sama.

CATATAN: Rantai persyaratan yang membuat shipmentType bergantung pada dirinya sendiri tidak diizinkan.

requirementMode

enum (RequirementMode)

Mode yang diterapkan pada persyaratan.

RequirementMode

Mode yang menentukan tampilan pengiriman dependen pada rute.

Enum
REQUIREMENT_MODE_UNSPECIFIED Mode persyaratan tidak ditentukan. Nilai ini tidak boleh digunakan.
PERFORMED_BY_SAME_VEHICLE Dalam mode ini, semua pengiriman "dependen" harus menggunakan kendaraan yang sama dengan setidaknya salah satu pengiriman "wajib".
IN_SAME_VEHICLE_AT_PICKUP_TIME

Dengan mode IN_SAME_VEHICLE_AT_PICKUP_TIME, semua pengiriman "dependen" harus memiliki setidaknya satu pengiriman "wajib" di kendaraan pada saat pengambilan.

Oleh karena itu, pengambilan kiriman "tanggungan" harus memiliki salah satu dari:

  • Pengiriman "wajib" khusus pengiriman yang dikirimkan di rute setelah, atau
  • Pengiriman "wajib" yang diambil di rute sebelumnya, dan jika pengiriman "wajib" memiliki pengiriman, pengiriman ini harus dilakukan setelah pengambilan pengiriman "bergantung".
IN_SAME_VEHICLE_AT_DELIVERY_TIME Sama seperti sebelumnya, kecuali pengiriman "dependent" harus memiliki pengiriman "required" di kendaraan pada saat pengiriman.

PrecedenceRule

Aturan prioritas antara dua peristiwa (setiap peristiwa adalah pengambilan atau pengiriman kiriman): peristiwa "kedua" harus dimulai setidaknya offsetDuration setelah "pertama" dimulai.

Beberapa preseden dapat merujuk pada peristiwa yang sama (atau terkait), misalnya, "pengambilan B terjadi setelah pengiriman A" dan "pengambilan C terjadi setelah pengambilan B".

Selain itu, prioritas hanya berlaku jika kedua pengiriman dilakukan dan diabaikan jika tidak.

Representasi JSON
{
  "firstIsDelivery": boolean,
  "secondIsDelivery": boolean,
  "offsetDuration": string,
  "firstIndex": integer,
  "secondIndex": integer
}
Kolom
firstIsDelivery

boolean

Menunjukkan apakah peristiwa "pertama" adalah pengiriman.

secondIsDelivery

boolean

Menunjukkan apakah peristiwa "kedua" adalah pengiriman.

offsetDuration

string (Duration format)

Selisih antara peristiwa "pertama" dan "kedua". Nilainya bisa negatif.

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

firstIndex

integer

Indeks pengiriman peristiwa "pertama". Kolom ini harus ditentukan.

secondIndex

integer

Indeks pengiriman peristiwa "kedua". Kolom ini harus ditentukan.