InjectedSolutionConstraint

Solusi yang dimasukkan dalam permintaan termasuk informasi tentang kunjungan yang harus dibatasi dan cara membatasinya.

Representasi JSON
{
  "routes": [
    {
      object (ShipmentRoute)
    }
  ],
  "skippedShipments": [
    {
      object (SkippedShipment)
    }
  ],
  "constraintRelaxations": [
    {
      object (ConstraintRelaxation)
    }
  ]
}
Kolom
routes[]

object (ShipmentRoute)

Rute solusi yang akan diinjeksi. Beberapa rute mungkin dihilangkan dari solusi awal. Rute dan pengiriman yang dilewati harus memenuhi asumsi validitas dasar yang tercantum untuk injectedFirstSolutionRoutes.

skippedShipments[]

object (SkippedShipment)

Melewati pengiriman solusi untuk diinjeksi. Beberapa bagian mungkin dihilangkan dari solusi awal. Lihat kolom routes.

constraintRelaxations[]

object (ConstraintRelaxation)

Untuk nol kelompok kendaraan atau lebih, tentukan waktu dan seberapa banyak batasan yang akan dilonggarkan. Jika kolom ini kosong, semua rute kendaraan yang tidak kosong akan sepenuhnya dibatasi.

ConstraintRelaxation

Untuk sekelompok kendaraan, tentukan batasan untuk kunjungan yang akan dilonggarkan dan batas maksimalnya. Pengiriman yang tercantum di kolom skipped_shipment dibatasi untuk dilewati; yaitu, mereka tidak dapat dilakukan.

Representasi JSON
{
  "relaxations": [
    {
      object (Relaxation)
    }
  ],
  "vehicleIndices": [
    integer
  ]
}
Kolom
relaxations[]

object (Relaxation)

Semua pelonggaran batasan kunjungan yang akan berlaku untuk kunjungan pada rute dengan kendaraan di vehicleIndices.

vehicleIndices[]

integer

Menentukan indeks kendaraan yang menerapkan batasan kunjungan relaxations. Jika kosong, atribut ini dianggap sebagai default dan relaxations berlaku untuk semua kendaraan yang tidak ditentukan di constraintRelaxations lainnya. Hanya boleh ada maksimal satu default, yaitu, maksimal satu kolom relaksasi batasan diizinkan kosong vehicleIndices. Indeks kendaraan hanya dapat dicantumkan sekali, bahkan dalam beberapa constraintRelaxations.

Indeks kendaraan dipetakan sama seperti ShipmentRoute.vehicle_index, jika interpretInjectedSolutionsUsingLabels benar (lihat komentar fields).

Relaksasi

Jika relaxations kosong, waktu mulai dan urutan semua kunjungan pada routes akan dibatasi sepenuhnya dan tidak ada kunjungan baru yang dapat disisipkan atau ditambahkan ke rute tersebut. Selain itu, waktu mulai dan berakhir kendaraan di routes sepenuhnya dibatasi, kecuali jika kendaraan kosong (yaitu, tidak memiliki kunjungan dan menetapkan usedIfRouteIsEmpty ke salah dalam model).

relaxations(i).level menentukan tingkat relaksasi batasan yang diterapkan ke kunjungan #j yang memenuhi:

  • route.visits(j).start_time >= relaxations(i).threshold_time DAN
  • j + 1 >= relaxations(i).threshold_visit_count

Demikian pula, start kendaraan dilonggarkan ke relaxations(i).level jika memenuhi:

  • vehicleStartTime >= relaxations(i).threshold_time DAN
  • relaxations(i).threshold_visit_count == 0 dan ujung kendaraan dilonggarkan ke relaxations(i).level jika memenuhi:
  • vehicleEndTime >= relaxations(i).threshold_time DAN
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

Untuk menerapkan tingkat relaksasi jika kunjungan memenuhi thresholdVisitCount ATAU thresholdTime, tambahkan dua relaxations dengan level yang sama: satu dengan hanya thresholdVisitCount yang disetel dan satu lagi dengan hanya thresholdTime yang disetel. Jika sebuah kunjungan memenuhi kondisi beberapa relaxations, tingkat yang paling longgar akan berlaku. Hasilnya, dari awal kendaraan hingga kunjungan rute hingga akhir kendaraan, tingkat relaksasi menjadi lebih santai: yaitu, tingkat relaksasi tidak menurun seiring berjalannya rute.

Waktu dan urutan kunjungan rute yang tidak memenuhi kondisi nilai minimum relaxations akan sepenuhnya dibatasi dan tidak ada kunjungan yang dapat dimasukkan ke dalam urutan ini. Selain itu, jika start atau end kendaraan tidak memenuhi kondisi relaksasi apa pun, waktu yang diperlukan adalah tetap, kecuali jika kendaraan kosong.

Representasi JSON
{
  "level": enum (Level),
  "thresholdTime": string,
  "thresholdVisitCount": integer
}
Kolom
level

enum (Level)

Level relaksasi batasan yang berlaku saat kondisi pada atau setelah thresholdTime DAN setidaknya thresholdVisitCount terpenuhi.

thresholdTime

string (Timestamp format)

Waktu saat atau setelah relaksasi level dapat diterapkan.

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".

thresholdVisitCount

integer

Jumlah kunjungan pada saat atau setelah relaksasi level dapat diterapkan. Jika thresholdVisitCount adalah 0 (atau tidak disetel), level dapat langsung diterapkan saat kendaraan di start.

Jika route.visits_size() + 1, level mungkin hanya diterapkan ke ujung kendaraan. Jika lebih dari route.visits_size() + 1, level tidak diterapkan sama sekali untuk rute tersebut.

Tingkat

Mengekspresikan berbagai level relaksasi batasan, yang diterapkan untuk kunjungan dan yang mengikuti ketika memenuhi kondisi ambang batas.

Enumerasi di bawah ini adalah untuk meningkatkan relaksasi.

Enum
LEVEL_UNSPECIFIED

Tingkat relaksasi default implisit: tidak ada batasan yang longgar, yaitu, semua kunjungan sepenuhnya dibatasi.

Nilai ini tidak boleh digunakan secara eksplisit di level.

RELAX_VISIT_TIMES_AFTER_THRESHOLD Waktu mulai kunjungan dan waktu mulai/berakhir kendaraan akan dilonggarkan, tetapi setiap kunjungan tetap terikat dengan kendaraan yang sama dan urutan kunjungan harus diamati: tidak ada kunjungan yang dapat disisipkan di antara keduanya atau sebelumnya.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD Sama seperti RELAX_VISIT_TIMES_AFTER_THRESHOLD, tetapi urutan kunjungan juga dilonggarkan: kunjungan tetap terikat pada kendaraan mereka.
RELAX_ALL_AFTER_THRESHOLD Sama seperti RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD, tetapi kendaraan juga santai: kunjungan sepenuhnya gratis pada atau setelah waktu minimum dan berpotensi mengalami penurunan performa.