ShipmentModel

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

  • biaya perutean kendaraan (jumlah biaya per total waktu, biaya per waktu perjalanan, dan biaya tetap untuk semua kendaraan).
  • penalti pengiriman yang tidak dilakukan.
  • biaya durasi pengiriman global
Representasi JSON
{
  "shipments": [
    {
      object (Shipment)
    }
  ],
  "vehicles": [
    {
      object (Vehicle)
    }
  ],
  "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)

Rangkaian pengiriman yang harus dilakukan dalam model.

vehicles[]

object (Vehicle)

Kumpulan kendaraan yang dapat digunakan untuk melakukan kunjungan.

globalStartTime

string (Timestamp format)

Waktu mulai dan berakhir global untuk 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 berada dalam rentang 31536000 detik satu sama lain.

Saat menggunakan kolom cost_per_*hour, Anda mungkin ingin menyetel periode ini ke interval yang lebih kecil untuk meningkatkan performa (misalnya, jika Anda membuat model satu hari, Anda harus menetapkan 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.

Stempel waktu dalam RFC3339 UTC "Zulu" , dengan resolusi nanodetik dan hingga sembilan digit pecahan. Contoh: "2014-10-02T15:01:23Z" dan "2014-10-02T15:01:23.045123456Z".

globalEndTime

string (Timestamp format)

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

Stempel waktu dalam RFC3339 UTC "Zulu" , dengan resolusi nanodetik dan hingga sembilan digit pecahan. Contoh: "2014-10-02T15:01:23Z" dan "2014-10-02T15:01:23.045123456Z".

globalDurationCostPerHour

number

"Durasi global" dari keseluruhan rencana adalah perbedaan antara waktu mulai efektif paling awal dan waktu berakhir efektif terbaru untuk semua kendaraan. Misalnya, pengguna dapat menetapkan biaya per jam ke kuantitas tersebut untuk mencoba dan mengoptimalkan penyelesaian pekerjaan paling awal. Biaya ini harus dalam unit yang sama dengan Shipment.penalty_cost.

durationDistanceMatrices[]

object (DurationDistanceMatrix)

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

Contoh penggunaan:

  • Ada dua lokasi: locA dan locB.
  • 1 kendaraan memulai rutenya di locA dan mengakhirinya di locA.
  • 1 permintaan 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 "lambat".
  • 1 kendaraan memulai rutenya di locB dan mengakhirinya di locB, menggunakan matriks "cepat".
  • 1 permintaan 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 satu tag di kolom ini. Perhatikan bahwa tag sumber, tujuan, dan matriks Vehicle mungkin sama; serupa, tag sumber dan tujuan VisitRequest mungkin sama. Semua tag harus berbeda dan tidak boleh berupa string kosong. Jika kolom ini tidak kosong, durationDistanceMatrices wajib diisi.

durationDistanceMatrixDstTags[]

string

Tag yang menentukan tujuan matriks durasi dan jarak; durationDistanceMatrices(i).rows(j).durations(k) (respons durationDistanceMatrices(i).rows(j).meters(k)) menentukan durasi (balasan 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 satu tag di kolom ini. Perhatikan bahwa tag sumber, tujuan, dan matriks Vehicle mungkin sama; serupa, tag sumber dan tujuan VisitRequest mungkin sama. Semua tag harus berbeda dan tidak boleh berupa string kosong. Jika kolom ini tidak kosong, durationDistanceMatrices wajib diisi.

transitionAttributes[]

object (TransitionAttributes)

Atribut transisi ditambahkan ke model.

shipmentTypeIncompatibilities[]

object (ShipmentTypeIncompatibility)

Kumpulan Shipping_types yang tidak kompatibel (lihat ShipmentTypeIncompatibility).

shipmentTypeRequirements[]

object (ShipmentTypeRequirement)

Kumpulan persyaratan shipmentType (lihat ShipmentTypeRequirement).

precedenceRules[]

object (PrecedenceRule)

Kumpulan aturan prioritas yang harus diterapkan di model.

maxActiveVehicles

integer

Membatasi jumlah maksimum kendaraan aktif. Kendaraan aktif jika rutenya melakukan setidaknya satu pengiriman. Hal ini dapat digunakan untuk membatasi jumlah rute jika jumlah pengemudi lebih sedikit daripada kendaraan dan armada kendaraan multi-penumpang. Pengoptimalan tersebut kemudian akan memilih subset kendaraan terbaik yang akan digunakan. Harus benar-benar positif.

Pengiriman

Pengiriman satu item, dari salah satu pengambilannya ke salah satu pengirimannya. Agar pengiriman dianggap telah dilaksanakan, kendaraan unik harus mengunjungi salah satu lokasi pengambilannya (dan mengurangi kapasitas cadangannya), lalu mengunjungi salah satu lokasi pengirimannya nanti (dan karenanya meningkatkan kembali kapasitas cadangannya).

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 ditetapkan oleh pengguna. Panjang maksimal 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 penjemputan.

loadDemands

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

Pemuatan permintaan pengiriman (misalnya berat, volume, jumlah palet, dll.). Kunci dalam peta harus berupa ID yang menjelaskan jenis beban yang sesuai, idealnya juga termasuk unitnya. Misalnya: "weight_kg", "volume_gallons", "pallet_count", dll. Jika kunci tertentu tidak muncul di peta, beban yang terkait akan dianggap sebagai null.

Objek yang berisi daftar pasangan "key": value. Contoh: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

allowedVehicleIndices[]

integer

Kumpulan kendaraan yang dapat melakukan pengiriman ini. Jika kosong, semua kendaraan dapat menjalankannya. Kendaraan diberikan berdasarkan indeksnya di daftar vehicles ShipmentModel.

costsPerVehicle[]

number

Menentukan biaya yang dikeluarkan saat pengiriman ini dikirimkan oleh setiap kendaraan. Jika ditentukan, kolom harus memiliki EITHER:

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

Biaya ini harus berada 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 putar balik absolut maksimum dibandingkan dengan jalur terpendek dari pengambilan ke pengiriman. Jika ditentukan, nilainya harus positif, dan pengiriman harus berisi setidaknya opsi pengambilan dan pengantaran.

Misalnya, anggaplah waktu tersingkat untuk beralih dari alternatif pengambilan yang dipilih langsung ke alternatif pengiriman yang dipilih. Kemudian, menyetel pickupToDeliveryAbsoluteDetourLimit akan menerapkan:

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

Jika batas relatif dan absolut ditentukan pada pengiriman yang sama, batas yang lebih membatasi akan digunakan untuk setiap kemungkinan pasangan pengambilan/pengiriman. Mulai tahun 2017/10, putar balik 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 pengiriman. Jika ditentukan, nilainya harus positif, dan pengiriman harus berisi setidaknya opsi pengambilan dan pengantaran. Hal ini tidak bergantung pada alternatif mana yang dipilih untuk pengambilan dan pengantaran, atau kecepatan kendaraan. Hal ini dapat ditentukan bersama batasan maksimum pengalihan: solusi akan mengikuti kedua spesifikasi tersebut.

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

shipmentType

string

String yang 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 dari visitTypes yang ditentukan untuk satu kunjungan: Semua pengambilan/pengiriman milik pengiriman yang sama memiliki shipmentType yang sama.

label

string

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

ignore

boolean

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

Mengabaikan pengiriman menyebabkan error validasi jika ada shipmentTypeRequirements dalam model.

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

penaltyCost

number

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

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

pickupToDeliveryRelativeDetourLimit

number

Menentukan waktu putar balik relatif maksimum dibandingkan dengan jalur terpendek dari pengambilan ke pengiriman. Jika ditentukan, nilainya harus positif, dan pengiriman harus berisi setidaknya opsi pengambilan dan pengantaran.

Misalnya, anggaplah waktu tersingkat untuk beralih dari alternatif pengambilan yang dipilih langsung ke alternatif pengiriman yang dipilih. Kemudian, menyetel pickupToDeliveryRelativeDetourLimit akan menerapkan:

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

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

VisitRequest

Permintaan kunjungan yang dapat dilakukan dengan kendaraan: memiliki lokasi geografis (atau dua, lihat di bawah), jam buka dan tutup yang diwakili oleh jangka waktu, dan waktu durasi layanan (waktu yang dihabiskan oleh kendaraan setelah kendaraan tiba untuk mengambil atau mengembalikan 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
}
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 disertakan 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 periode waktu kedatangan, yaitu waktu kedatangan + durasi tidak harus berada di 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 ada periode waktu yang tumpang tindih atau berdekatan dengan yang lain, dan periode tersebut harus dalam urutan yang meningkat.

costPerHourAfterSoftEndTime dan softEndTime hanya dapat ditetapkan jika ada satu periode 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 pada rute kendaraan. Kartu ini dapat digunakan untuk membayar biaya yang berbeda untuk setiap pengambilan atau pengiriman alternatif. Biaya ini harus dalam unit yang sama dengan Shipment.penalty_cost dan tidak boleh negatif.

loadDemands

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

Muat permintaan kunjungan ini. Ini sama seperti kolom Shipment.load_demands, tetapi hanya berlaku untuk VisitRequest ini, bukan keseluruhan Shipment. Permintaan yang tercantum di sini ditambahkan ke permintaan yang tercantum di Shipment.load_demands.

Objek yang berisi daftar pasangan "key": value. Contoh: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

visitTypes[]

string

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

Suatu jenis hanya dapat muncul sekali.

label

string

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

LatLng

Objek yang merepresentasikan pasangan garis lintang/bujur. Objek ini dinyatakan sebagai pasangan double 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

Mengenkapsulasi titik jalan. Titik jalan menandai lokasi kedatangan dan keberangkatan Kunjungan, serta lokasi awal dan akhir Kendaraan.

Representasi JSON
{
  "sideOfRoad": 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. Jika Anda menetapkan nilai ini, rute akan melewati lokasi sehingga kendaraan dapat berhenti di sisi jalan yang membiaskan lokasi dari tengah jalan. Opsi ini tidak berfungsi untuk 'BERJALAN' mode perjalanan.

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

object (Location)

Titik yang ditetapkan menggunakan koordinat geografis, yang mencakup arah opsional.

placeId

string

ID Tempat POI yang terkait dengan titik jalan.

Lokasi

Mengenkapsulasi lokasi (titik geografis dan judul opsional).

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

object (LatLng)

Koordinat geografis titik jalan.

heading

integer

Arah kompas yang terkait dengan arah arus lalu lintas. Nilai ini digunakan untuk menentukan sisi jalan yang akan digunakan untuk pengangkutan dan penurunan penumpang. Nilai arah dapat berasal dari 0 hingga 360, dengan 0 menentukan arah utara, 90 menentukan arah Timur, dll.

TimeWindow

Jendela waktu membatasi waktu peristiwa, seperti waktu kedatangan di kunjungan, atau waktu mulai dan berakhir kendaraan.

Batas periode waktu sulit, startTime dan endTime, menerapkan waktu paling awal dan terbaru untuk peristiwa, sehingga startTime <= event_time <= endTime. Batas bawah periode waktu lunak, softStartTime, menyatakan preferensi agar peristiwa terjadi pada atau setelah softStartTime dengan menimbulkan biaya yang proporsional dengan durasi sebelum softStartTime peristiwa tersebut terjadi. Batas atas periode waktu lunak, softEndTime, menyatakan preferensi agar peristiwa terjadi pada atau sebelum softEndTime dengan menimbulkan biaya yang sebanding dengan berapa lama setelah softEndTime peristiwa tersebut 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` <= `softStartTime` <= `endTime` and
  0 <= `startTime` <= `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 yang sulit. Jika tidak ditentukan, nilai tersebut akan ditetapkan ke ShipmentModel.global_start_time.

Stempel waktu dalam RFC3339 UTC "Zulu" , dengan resolusi nanodetik dan hingga sembilan digit pecahan. Contoh: "2014-10-02T15:01:23Z" dan "2014-10-02T15:01:23.045123456Z".

endTime

string (Timestamp format)

Waktu berakhir periode waktu sulit. Jika tidak ditentukan, nilai tersebut akan ditetapkan ke ShipmentModel.global_end_time.

Stempel waktu dalam RFC3339 UTC "Zulu" , dengan resolusi nanodetik dan hingga sembilan digit pecahan. Contoh: "2014-10-02T15:01:23Z" dan "2014-10-02T15:01:23.045123456Z".

softStartTime

string (Timestamp format)

Waktu soft start dari jangka waktu.

Stempel waktu dalam RFC3339 UTC "Zulu" , dengan resolusi nanodetik dan hingga sembilan digit pecahan. Contoh: "2014-10-02T15:01:23Z" dan "2014-10-02T15:01:23.045123456Z".

softEndTime

string (Timestamp format)

Waktu berakhir sementara pada jangka waktu.

Stempel waktu dalam RFC3339 UTC "Zulu" , dengan resolusi nanodetik dan hingga sembilan digit pecahan. Contoh: "2014-10-02T15:01:23Z" dan "2014-10-02T15:01:23.045123456Z".

costPerHourBeforeSoftStartTime

number

Biaya per jam yang 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 ini hanya dapat ditetapkan jika softStartTime telah ditetapkan.

costPerHourAfterSoftEndTime

number

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

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

Biaya ini harus bernilai positif, dan kolom ini 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),
  "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 ditetapkan pengguna. Panjang maksimal 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.

startLocation

object (LatLng)

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

startWaypoint

object (Waypoint)

Titik jalan yang mewakili lokasi geografis tempat kendaraan dimulai sebelum mengambil pengiriman. Jika startWaypoint atau startLocation tidak ditentukan, kendaraan akan dimulai saat pengambilan 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 langsung berakhir saat menyelesaikan VisitRequest terakhirnya. Jika model pengiriman memiliki matriks durasi dan jarak, endLocation tidak boleh ditentukan.

endWaypoint

object (Waypoint)

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

startTags[]

string

Menentukan tag yang disertakan pada awal rute kendaraan.

String kosong atau duplikat tidak diizinkan.

endTags[]

string

Menentukan tag yang disertakan di akhir rute kendaraan.

String kosong atau duplikat tidak diizinkan.

startTimeWindows[]

object (TimeWindow)

Periode waktu saat kendaraan dapat meninggalkan lokasi awal. Batas waktu tersebut harus berada dalam batas waktu global (lihat kolom ShipmentModel.global_*). Jika tidak ditentukan, tidak ada batasan selain batas waktu global tersebut.

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

costPerHourAfterSoftEndTime dan softEndTime hanya dapat ditetapkan jika ada satu periode waktu.

endTimeWindows[]

object (TimeWindow)

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

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

costPerHourAfterSoftEndTime dan softEndTime hanya dapat ditetapkan jika ada satu periode waktu.

unloadingPolicy

enum (UnloadingPolicy)

Kebijakan bongkar muat diterapkan di kendaraan.

loadLimits

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

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

Objek yang berisi daftar pasangan "key": value. Contoh: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

costPerHour

number

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

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

costPerTraveledHour

number

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

costPerKilometer

number

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

fixedCost

number

Biaya tetap berlaku jika kendaraan ini digunakan untuk menangani pengiriman.

usedIfRouteIsEmpty

boolean

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

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

Jika tidak, kendaraan tidak akan melakukan perjalanan dari awal ke lokasi akhirnya, 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 ke total durasi rute kendaraan. Dalam OptimizeToursResponse tertentu, durasi rute kendaraan adalah selisih antara vehicleEndTime dan vehicleStartTime.

travelDurationLimit

object (DurationLimit)

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

routeDistanceLimit

object (DistanceLimit)

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

extraVisitDurationForVisitType

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

Menentukan peta dari string visitType ke durasi. Durasinya adalah waktu, selain VisitRequest.duration, yang akan dilakukan pada kunjungan dengan visitTypes yang ditentukan. Durasi kunjungan tambahan ini akan menambahkan biaya jika costPerHour ditentukan. Kunci (yaitu visitTypes) tidak boleh berupa string kosong.

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

Objek yang berisi daftar pasangan "key": value. Contoh: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

breakRule

object (BreakRule)

Menjelaskan jadwal jeda yang akan diterapkan pada kendaraan ini. Jika kosong, tidak ada waktu 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 true (benar), usedIfRouteIsEmpty harus salah (false), dan kendaraan ini akan tetap tidak digunakan.

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

Jika pengiriman dilakukan oleh kendaraan yang diabaikan di injectedSolutionConstraint dan pengambilan/pengiriman terkait dibatasi untuk tetap berada di kendaraan (yaitu, tidak longgar ke level RELAX_ALL_AFTER_THRESHOLD), pengiriman 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, menyetel ini ke 2.0 berarti kendaraan ini lebih lambat dan memiliki waktu perjalanan dua kali lipat dari yang sebelumnya untuk kendaraan standar. Beberapa hal ini tidak memengaruhi durasi kunjungan. Hal ini memengaruhi biaya jika costPerHour atau costPerTraveledHour ditentukan. Ini harus dalam rentang [0,001, 1000,0]. Jika tidak disetel, kendaraan bersifat standar, dan kelipatan ini dianggap 1.0.

PERINGATAN: Waktu tempuh 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 merupakan bagian dari mode perjalanan Routes Preferred API Google Maps Platform. Lihat: https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.

Enum
TRAVEL_MODE_UNSPECIFIED Mode perjalanan belum ditetapkan, setara dengan DRIVING.
DRIVING Mode perjalanan yang sesuai dengan rute mobil (mobil, ...).
WALKING Mode perjalanan yang sesuai dengan rute jalan kaki.

UnloadingPolicy

Kebijakan tentang cara bongkar muat kendaraan. Hanya berlaku untuk pengiriman yang memiliki opsi ambil dan antar.

Pengiriman lainnya dapat terjadi di mana saja pada rute yang tidak bergantung pada unloadingPolicy.

Enum
UNLOADING_POLICY_UNSPECIFIED Kebijakan bongkar muat tidak ditentukan; pengiriman harus dilakukan setelah pengambilan yang sesuai.
LAST_IN_FIRST_OUT Pengiriman harus dilakukan dengan urutan terbalik
FIRST_IN_FIRST_OUT Pengiriman harus dilakukan dengan urutan yang sama dengan pengambilan

LoadLimit

Menentukan batas beban yang berlaku untuk kendaraan, misalnya, "truk ini mungkin hanya bisa mengangkut hingga 3.500 kg". Lihat loadLimits.

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

string (int64 format)

Batas ringan dari beban. Lihat costPerUnitAboveSoftMax.

costPerUnitAboveSoftMax

number

Jika beban melebihi softMaxLoad di sepanjang rute kendaraan ini, sanksi biaya berikut akan berlaku (hanya sekali per kendaraan): (beban - softMaxLoad) * costPerUnitAboveSoftMax. Semua biaya bertambah dan harus dalam unit yang sama dengan Shipment.penalty_cost.

startLoadInterval

object (Interval)

Interval beban kendaraan yang dapat diterima di awal rute.

endLoadInterval

object (Interval)

Interval pemuatan kendaraan yang dapat diterima di akhir rute.

maxLoad

string (int64 format)

Jumlah beban maksimum yang dapat diterima.

Interval

Interval jumlah pemuatan 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 akan dibatasi oleh pesan ini. Jika keduanya ditentukan, min harus ≤ max.

DurationLimit

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

Jika kolom batas terbatas ditentukan, nilai minimum minimum dan biaya terkait harus ditentukan bersama.

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

string (Duration format)

Batas ketat yang membatasi durasi agar mencapai maksimum maxDuration.

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

softMaxDuration

string (Duration format)

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

Jika ditentukan, softMaxDuration harus positif. 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 sementara tidak menerapkan batas durasi maksimum, tetapi jika dilanggar akan membuat rute dikenai biaya, kuadrat dalam durasinya. Biaya ini menambah biaya lain yang ditentukan dalam model, dengan unit yang sama.

Jika ditentukan, quadraticSoftMaxDuration harus positif. Jika maxDuration juga ditentukan, quadraticSoftMaxDuration harus lebih kecil dari maxDuration, dan selisihnya 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 timbul jika nilai minimum softMaxDuration dilanggar. Biaya tambahannya adalah 0 jika durasi tidak melebihi nilai minimum. Jika tidak, biaya bergantung pada durasi sebagai berikut:

  costPerHourAfterSoftMax * (duration - softMaxDuration)

Biaya harus bilangan positif.

costPerSquareHourAfterQuadraticSoftMax

number

Biaya per jam persegi yang timbul jika nilai minimum quadraticSoftMaxDuration dilanggar.

Biaya tambahannya adalah 0 jika durasi tidak melebihi nilai minimum. Jika tidak, biaya bergantung pada durasi sebagai berikut:

  costPerSquareHourAfterQuadraticSoftMax *
  (duration - quadraticSoftMaxDuration)^2

Biaya harus bilangan positif.

DistanceLimit

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

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

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

string (int64 format)

Batas ketat yang membatasi jarak untuk mencapai maksimal maxMeters. Batasnya tidak boleh negatif.

softMaxMeters

string (int64 format)

Batas awal tidak menerapkan batas jarak maksimum, tetapi jika dilanggar akan mengakibatkan biaya yang menambah biaya lain yang ditentukan dalam model, dengan unit yang sama.

Jika ditentukan, softMaxMeters harus kurang dari maxMeters dan harus positif.

costPerKilometerAboveSoftMax

number

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

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

Biaya harus bilangan positif.

BreakRule

Aturan untuk menghasilkan waktu istirahat untuk kendaraan (misalnya istirahat makan siang). Waktu istirahat adalah periode waktu berurutan saat kendaraan tetap tidak ada aktivitas pada posisi saat ini dan tidak dapat melakukan kunjungan apa pun. Gangguan dapat terjadi:

  • selama perjalanan antara dua kunjungan (yang mencakup waktu tepat sebelum atau tepat setelah kunjungan, tetapi tidak di tengah-tengah kunjungan), dalam hal ini penambahan waktu transit yang sesuai di antara kunjungan tersebut,
  • atau sebelum kendaraan dimulai (kendaraan mungkin tidak menyala di tengah waktu istirahat), sehingga tidak memengaruhi waktu mulai kendaraan.
  • atau setelah akhir kendaraan (sama dengan, dengan waktu berakhir 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 terpenuhi oleh BreakRequest dari BreakRule ini. Baca FrequencyConstraint.

BreakRequest

Urutan jeda (yaitu nomor dan urutannya) yang berlaku untuk setiap kendaraan harus diketahui sebelumnya. BreakRequest yang berulang menentukan urutan tersebut, sesuai urutan kemunculannya. Periode waktunya (earliestStartTime / latestStartTime) mungkin tumpang-tindih, tetapi harus kompatibel dengan pesanan (ini dicentang).

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

string (Timestamp format)

Wajib. Batas bawah (inklusif) pada awal jeda.

Stempel waktu dalam RFC3339 UTC "Zulu" , dengan resolusi nanodetik dan hingga sembilan digit pecahan. Contoh: "2014-10-02T15:01:23Z" dan "2014-10-02T15:01:23.045123456Z".

latestStartTime

string (Timestamp format)

Wajib. Batas atas (inklusif) pada awal jeda.

Stempel waktu dalam RFC3339 UTC "Zulu" , dengan resolusi nanodetik dan hingga sembilan digit pecahan. Contoh: "2014-10-02T15:01:23Z" dan "2014-10-02T15:01:23.045123456Z".

minDuration

string (Duration format)

Wajib. Durasi minimum istirahat. Harus positif.

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

FrequencyConstraint

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

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

Pengaturan waktu dan durasi jeda dalam solusi akan mengikuti semua batasan tersebut, selain jangka waktu dan durasi minimum yang sudah ditentukan dalam BreakRequest.

Dalam praktiknya, FrequencyConstraint mungkin berlaku untuk jeda yang tidak berurutan. Misalnya, jadwal berikut mengikuti "1h setiap 12 jam" contoh:

  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 jeda 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 dari setiap interval waktu di rute yang tidak menyertakan setidaknya jeda duration >= minBreakDuration. Harus positif.

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

DurationDistanceMatrix

Menentukan matriks durasi dan jarak dari lokasi kunjungan dan awal kendaraan yang akan dikunjungi dan lokasi akhir kendaraan.

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

object (Row)

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

vehicleStartTag

string

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

Setiap start kendaraan harus sama persis dengan satu matriks, yaitu tepat satu kolom startTags harus cocok dengan vehicleStartTag dari matriks (dan hanya dari 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 sebanyak 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, jumlah elemen harus sebanyak durations.

TransitionAttributes

Menentukan atribut transisi antara dua kunjungan berturut-turut pada rute. Beberapa TransitionAttributes mungkin berlaku untuk transisi yang sama: dalam hal ini, semua biaya tambahan akan bertambah dan batasan atau batas yang paling ketat 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 akan diterapkan 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 yang tidak kosong).

excludedDstTag

string

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

cost

number

Menentukan biaya untuk melakukan transisi ini. Biaya ini berada dalam unit yang sama dengan semua biaya lain dalam model dan tidak boleh negatif. Tarif ini berlaku di atas semua biaya lain yang ada.

costPerKilometer

number

Menentukan biaya per kilometer yang diterapkan ke jarak yang ditempuh saat melakukan transisi ini. Total ini menambahkan hingga Vehicle.cost_per_kilometer yang ditentukan di kendaraan.

distanceLimit

object (DistanceLimit)

Menentukan batas jarak yang ditempuh saat melakukan transisi ini.

Mulai 2021/06, hanya batas sementara yang didukung.

delay

string (Duration format)

Menentukan penundaan yang terjadi saat melakukan transisi ini.

Keterlambatan 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 ketidaksesuaian antar-pengiriman bergantung pada deliveryType-nya. Tampilan pengiriman yang tidak kompatibel di rute yang sama dibatasi berdasarkan mode inkompatibilitas.

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

string

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

incompatibilityMode

enum (IncompatibilityMode)

Mode diterapkan pada inkompatibilitas.

IncompatibilityMode

Mode yang menentukan bagaimana tampilan pengiriman yang tidak kompatibel dibatasi di rute yang sama.

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

Untuk dua pengiriman dengan jenis yang tidak kompatibel dengan mode inkompatibilitas NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY:

  • Jika keduanya hanya merupakan pengambilan (tidak ada pengiriman) atau hanya pengiriman (tidak ada pengambilan), keduanya tidak dapat menggunakan kendaraan yang sama sama sekali.
  • Jika salah satu pengiriman memiliki pengiriman dan pengiriman lainnya menggunakan kendaraan yang sama, kedua pengiriman dapat menggunakan kendaraan yang sama jika pengiriman sebelumnya dikirimkan sebelum yang terakhir diambil.

ShipmentTypeRequirement

Menentukan persyaratan antar-pengiriman berdasarkan jenis pengirimannya. Detail persyaratan ditentukan oleh mode persyaratan.

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

string

Daftar jenis pengiriman alternatif yang diwajibkan oleh dependentShipmentTypes.

dependentShipmentTypes[]

string

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

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

requirementMode

enum (RequirementMode)

Mode diterapkan ke persyaratan.

RequirementMode

Mode yang menentukan tampilan pengiriman dependen di rute.

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

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

"dependen" pengambilan pengiriman harus memiliki:

  • Kolom "wajib" khusus pengiriman pengiriman diantarkan di rute setelahnya, atau
  • "Wajib diisi" pengiriman diambil di rute sebelumnya, dan jika "wajib" pengiriman telah ada, pengiriman ini harus dilakukan setelah "dependen" pengambilan paket.
IN_SAME_VEHICLE_AT_DELIVERY_TIME Sama seperti sebelumnya, kecuali "dependen" pengiriman harus memiliki “wajib” pengiriman di kendaraan mereka pada saat pengiriman.

PrecedenceRule

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

Beberapa prioritas dapat merujuk ke 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.

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

boolean

Menunjukkan jika "pertama" adalah pengiriman.

secondIsDelivery

boolean

Menunjukkan jika "detik" adalah pengiriman.

offsetDuration

string (Duration format)

Offset antara "pertama" dan "kedua" peristiwa. Bisa jadi negatif.

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

firstIndex

integer

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

secondIndex

integer

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